OS X — переадресация внешнего порта на локальный адрес обратной связи

OS X — переадресация внешнего порта на локальный адрес обратной связи

У меня есть HTTP-сервис, привязанный к порту 8000, к которому я хочу получить доступ с другого компьютера в сети, но я не могу подключиться, используя внешний IP-адрес машины (например, 192.168.0.105). Я проверил, что брандмауэр OS X не запущен, поэтому я предполагаю, что проблема в том, что сервис привязан только к IP-адресу 127.0.0.1, а не к внешнему IP-адресу.

Какой самый простой способ временно перенаправить внешние соединения на порт 8000 на 127.0.0.1:8000?

решение1

Самый простой и быстрый способ сделать локально привязанные порты доступными для публичного интерфейса без перенастройки базовой службы — создать переадресацию портов SSH и сделать ее доступной глобально (по умолчанию она прослушивает только локально)

Поскольку это одна и та же машина, вам придется использовать разные порты. На Mac, где запущена служба, запустите

ssh -v -g -L 8001:localhost:8000 localhost

-vдля подробного, чтобы вы могли видеть входящие соединения

-gсделать его доступным в публичном интерфейсе

-L port:targethost:targetportну, вы это уже знаете :-)

Если на вашем компьютере имеется более одного активного интерфейса, расширьте оператор, -Lвключив в него адрес, к которому вы хотите его привязать.

решение2

Используйте ipfw, он похож на iptables в Linux.

Полагаю, вы используете переадресацию порта SSH на локальную машину.

ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.0.105 dst-port 8000

Другая машина в сети может получить доступ к сервису через 192.168.0.105:8000.

решение3

Если я правильно понимаю,Кальмарможет сработать. Также попробуйте имя компьютера вместо IP или какую-нибудь другую службу (ping, VNC, FTP и т. д.)

решение4

Во-первых, убедитесь, что вы ищете правильную проблему. Вы можете проверить, какие IP-адреса прослушивает веб-сервер, с помощью команды netstat:

$ netstat -an | grep LISTEN
tcp46      0      0  *.8000                 *.*                    LISTEN
tcp4       0      0  *.88                   *.*                    LISTEN
tcp6       0      0  *.88                   *.*                    LISTEN
tcp4       0      0  127.0.0.1.631          *.*                    LISTEN
tcp6       0      0  ::1.631                *.*                    LISTEN

В первой строке этого примера "*.8000" означает, что что-то (предположительно веб-сервер) прослушивает порт 8000 на всех привязанных IP-адресах. С другой стороны, последние две строки означают, что что-то прослушивает порт 631 на петлях IPv4 и IPv6 (127.0.0.1 и ::). Если вы видите "127.0.0.1:8000" при запуске команды, это означает, что вы на правильном пути в своей диагностике.

Если проблема в этом, то, вероятно, лучше всего решить ее, привязав веб-сервер ко всем IP-адресам, а не пытаться обойти ее с помощью пересылки. Проверьте файл(ы) конфигурации Apache (по умолчанию в OS X это /etc/apache2/httpd.conf, плюс все, что "Include" из него) на наличие директив "Listen". Если вы видите

Listen 127.0.0.1:8000

изменить это на

Listen 8000

Связанный контент