Я использую виртуальную машину xhyve (с докером), используя мостовую сеть:

bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=3<RXCSUM,TXCSUM>
    ether a2:99:9b:01:6d:64
    inet 192.168.64.1 netmask 0xffffff00 broadcast 192.168.64.255
    Configuration:
        id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
        maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
        root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
        ipfilter disabled flags 0x2
    member: en5 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 12 priority 0 path cost 0
    nd6 options=1<PERFORMNUD>
    media: autoselect
    status: active

Я хочу перенаправить порт 8000 на моем Mac на IP-адрес виртуальной машины, порт 8000. Я использую pfctl:

[~]$ echo "
rdr pass inet proto tcp from any to any port 8000 -> 192.168.64.9 port 8000
" | sudo pfctl -ef -
Password:
pfctl: Use of -f option, could result in flushing of rules
present in the main ruleset added by the system at startup.
See /etc/pf.conf for further details.

No ALTQ support in kernel
ALTQ related functions disabled
pfctl: pf already enabled

Теперь, telnet к localhost 8000 говорит "отказано в соединении":

[~]$ telnet localhost 8000
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Network is unreachable
telnet: Unable to connect to remote host

Но, telnet к "192.168.64.9" работает:

[~]$ telnet 192.168.64.9 8000
Trying 192.168.64.9...
Connected to ebdev.io.
Escape character is '^]'.

Как я могу переадресовать порт 8000 в этом случае?

1 ответ1

0

Мне не повезло с функциональностью перенаправления в pfctl в OS X. Может быть, есть что-то тонкое, что я тоже скучаю, но ты не один. У меня работает переадресация по ssh. Это несколько менее удобно, но это легко и всегда работает. Просто введите:

ssh 127.0.0.1 -L127.0.0.1:8000:192.168.64.9:8000

и пока этот сеанс ssh активен, переадресация портов будет работать. Вы можете опустить «127.0.0.1», если хотите связать сокет прослушивания со всеми IP-адресами на вашем компьютере, а не просто привязать к localhost.

Если вы выясните, почему правила rdr не работают, дайте нам всем знать, потому что вы определенно не единственный, кто видит такое поведение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .