Я хочу пересылать запросы от 192.168.99.100:80
к 127.0.0.1:8000
. Вот как я бы сделал это в Linux, используя iptables
:
iptables -t nat -A OUTPUT -p tcp --dport 80 -d 192.168.99.100 -j DNAT --to-destination 127.0.0.1:8000
Как мне сделать то же самое в MacOS X? Я попробовал комбинацию ipfw
команд без особого успеха:
ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80
(Для меня успех - указать браузер http://192.168.99.100
и получить ответ от сервера разработки, на котором я работаю localhost:8000
)
Ответы:
Так я узнал , что есть способ сделать это. Я не уверен, что это предпочтительный способ, но он работает! На вашей любимой оболочке:
(Псевдоним,
lo0
кажется, недостающая часть)Если вы хотите, чтобы (поддельный) домен указывал на этот новый псевдоним, убедитесь, что в / etc / hosts есть строка:
источник
Я был в состоянии получить эту работу , используя
ifconfig
иpfctl
команды на Mac 10.10.2. При следующем подходе я успешно картографирование127.0.0.1:3000
кmydomain.com
локально на моей машине.В командной строке введите следующие две команды для переадресации соединений
127.0.0.1:3000
на10.0.0.1
:Затем отредактируйте файл
/etc/hosts
или/private/etc/hosts
файл и добавьте следующую строку, чтобы сопоставить свой домен10.0.0.1
.После сохранения файла hosts очистите локальный DNS:
Теперь откройте
mydomain.com
в браузере, и вы увидите сервер, расположенный на вашем локальном порту (то есть127.0.0.1:3000
). По сути, этот процесс сопоставляет<ip>:<port>
новое с<ip>
тем, чтобы вы могли затем сопоставить хост с этим IP.источник
sudo discoveryutil udnsflushcaches
дает мне,command not found
но он по-прежнему соответствует записи правильно. Но как я могу сопоставить второй порт? Я попытался сделать шаги 1 + 2 с id:10.0.0.2
и другим портом, но он всегда принимает только последнее соединение. Так что, если я сделаю последний10.0.0.1
иport 3000
это вперед3000
, если я сделаю последний10.0.0.2
и перенесу4000
это вперед4000
. По моему/private/etc/hosts
я написал обе записи с (соответственно) разными идентификаторами.sudo dscacheutil -flushcache
Недавно мне тоже пришлось сделать нечто подобное, и при поиске натолкнулся на этот ответ. К сожалению, ответ Nafe использует,
ipfw
который в настоящее время устарел и недоступен в OSX; и ответ Кевина Лири действительно немного хакерский. Поэтому я должен был сделать что-то лучше (чище) и решил поделиться этим здесь для потомков. Этот ответ в значительной степени основан на подходе, упомянутом в этой сущности .Как упоминается в OP, указание браузера на 192.168.99.100 должно получить ответ от сервера по адресу localhost: 8000. Добавление псевдонима в
ifconfig
действительности не является необходимым,pfctl
одного достаточно: для достижения этого необходимо изменитьpf.conf
файл/etc/pf.conf
.Сначала мы создаем (с Судо) новый файл якорный (назовем его
redirection
) по адресу:/etc/pf.anchors/redirection
. В основном это обычный текстовый файл и содержит следующую строку (так же , как в ответ Кевин Лири):rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000
. Как только новый файл привязки был создан, на него нужно ссылаться вpf.conf
файле. Откройтеpf.conf
файл с помощью sudo и добавьтеrdr-anchor "redirection"
после последней строки rdr-anchor (которая естьrdr-anchor "com.apple/*"
) и добавьтеload anchor "redirection" from "/etc/pf.anchors/redirection"
в конце.В конечном итоге, так должен выглядеть файл pf.conf:
И это почти все. Просто перезапустите
pfctl
,sudo pfctl -d
выполнив сначала команду, чтобы отключить ее, а затемsudo pfctl -fe /etc/pf.conf
снова запустить.Теперь, если вам нужно, чтобы это происходило автоматически после каждого перезапуска, нужно выполнить еще одну крошечную часть работы:
pfctl
необходимо обновить демон запуска для (ссылка на gist указывает на то, что pf включается автоматически при загрузке, однако это не похоже на случай с просмотром кода). Откройте (с помощью sudo)System/Library/LaunchDaemons/com.apple.pfctl.plist
и посмотрите на это:и добавьте строку,
<string>-e</string>
чтобы в конечном итоге сделать это так:Это должно сделать это.
Предостережение : Apple больше не позволяет изменять файлы запуска демона просто так (не с помощью sudo, ни chmod, ни чего-либо еще). Только путь повозиться с системой защиты от целостности настроек: загрузиться в режиме восстановления и запуска терминала. Проверьте состояние SIP с помощью
csrutil status
, как правило, он должен быть включен. Отключите егоcsrutil disable
и перезагрузите в обычном режиме, а затем внесите изменения в файл plist, как описано выше. После этого вернитесь в режим восстановления и снова включите защиту (она установлена по уважительной причине), выдав командуcsrutil enable
.Объяснение: Можно проверить, введя
ifconfig
команду, которая127.0.0.1
уже является псевдонимом (по умолчанию) для localhost lo0 - этот факт используется, чтобы избежать необходимости добавлять дополнительный псевдоним для localhost и просто использовать адрес по умолчанию вpf.conf
файле.ОБНОВЛЕНИЕ: К сожалению, кажется, что загрузка файла при запуске не работает. Я все еще пытаюсь получить помощь, чтобы разобраться. До тех пор, бег
sudo pfctl -f /etc/pf.conf
после запуска делает свое дело.источник
System/Library/LaunchDaemons/com.apple.pfctl.plist
; это, вероятно, не переживет обновление ОС?Это хорошо сработало для меня:
Добавьте следующую строку в файл запуска, как описано здесь: http://xeiam.com/port-forwarding-80-to-8080-using-ipfw-on-mac-os-x/
add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in
источник
Начиная с 10.5, OS X поставляется с новым, ориентированным на приложения межсетевым экраном вместо
ipfw
. Но ipfw все еще установлен. Если у вас есть проблемы с его синтаксисом, проверьте графические интерфейсы, такие какWaterRoof
илиFlying Buttress
.HTH, PEra
источник
порядок правил важен, убедитесь, что не существует «запретить все» до того, как вы разрешите правила, или что-то подобное.
источник
65535 allow ip from any to any
).Кажется, в вашей команде отсутствует номер правила; пытаться:
(если вы не работаете с правами root, вам придется использовать префикс sudo). Еще одна вещь, чтобы проверить, что брандмауэр включен:
Если он возвращается со значением 0 (выкл), включите его с помощью:
... и затем подготовьте его к включению после перезагрузки компьютера. «Правильный» способ сделать это, вероятно, создать элемент launchd ( Lingon делает это довольно легко). Или просто используйте один из инструментов GUI, упомянутых PEra, и пусть он позаботится о деталях.
источник