On 28.06.2022 09:23, Nick Kostirya via freebsd wrote: > On Tue, 28 Jun 2022 03:03:35 +0700 > Eugene Grosbein <eu...@grosbein.net> wrote: > >> On 27.06.2022 10:11, Nick Kostirya via freebsd wrote: >>> On Mon, 27 Jun 2022 01:36:39 +0700 >>> Eugene Grosbein <eu...@grosbein.net> wrote: >>> >>>> 25.06.2022 13:47, Nick Kostirya via freebsd пишет: >>>>> Привет. >>>>> >>>>> В туннель заворачивается на сервере X (192.168.10.1) вот так >>>>> >>>>> ${fwcmd} nat 2 config if vmx0 same_ports reset redirect_port udp >>>>> 192.168.10.111:8080 8080 redirect_port tcp 192.168.10.111:8080 8080 >>>>> >>>>> >>>>> На сервере Y (192.168.10.111) запросы tcpdump показывает приходят на >>>>> 192.168.10.111, но вот ответы... >>>>> >>>>> UDP ответ идет с 192.168.0.111 (вне туннеля) по внешнему интерфейсу rl0 >>>>> а >>>>> TCP ответ идет с 192.168.10.111 (адрес туннеля), но тоже по внешнему >>>>> интерфейсу rl0 >>>>> >>>>> >>>>> Почему так? >>>>> >>>>> >>>>> Для UDP заворачиваю в туннель вот так >>>>> ${fwcmd} add fwd 192.168.10.1 all from me 8080 to any out via rl0 >>>>> >>>>> И все работает. Сервер видит ответ X и пересылает дальше. >>>>> >>>>> А вот с TCP forward не работает. >>>> >>>> Нужен полный вывод ipfw show без каких-либо редактирований, разве что >>>> можешь заменить публичные адреса. >>> >>> На W.W.W.W делаю запрос, который X.X.X.X перенаправляет в тeннель >>> 192.168.10.1 -> 192.168.10.111 >>> # echo hello | nc -w 1 X.X.X.X 8080 >>> >>> >>> >>> Ответ на дальнем конце туннеля (192.168.10.111), где стоит TCP сервер >>> >>> >>> # tcpdump -A -i rl0 'port 8080' >> >> Я просил вывод ipfw show, а не tcpdump. > > > Прошу прошение. > > UDP > > Начало туннеля. > > # ipfw show > 00100 1 34 nat 1 ip from any to me 8080 in via vmx0 > 00200 2 62 nat 1 ip from any 8080 to any > 65000 56 3352 allow ip from any to any > 65535 8928 1279978 deny ip from any to any > > > > ${fwcmd} nat 1 config if vmx0 same_ports reset redirect_port udp > 192.168.10.111:8080 8080 redirect_port tcp 192.168.10.111:8080 8080 > ${fwcmd} add nat 1 ip from any to me 8080 in via vmx0 > ${fwcmd} add nat 1 ip from any 8080 to any > > > > Сервер в конце туннеля > > # ipfw show > 00100 0 0 fwd 192.168.10.1 ip from 192.168.10.111 8080 to any via rl0 > 00200 1 31 fwd 192.168.10.1 ip from me 8080 to any out via rl0 > 65000 120 11064 allow ip from any to any > 65535 122 10052 allow ip from any to any > > > ${fwcmd} add fwd 192.168.10.1 all from 192.168.10.111 8080 to any via rl0 > ${fwcmd} add fwd 192.168.10.1 all from me 8080 to any out via rl0 > > > > TCP > > Начало туннеля. > > # ipfw show > 00100 1 60 nat 1 ip from any to me 8080 in via vmx0
Лучше писать in recv vmx0 (хотя функционально это одно и то же). > 00200 0 0 nat 1 ip from any 8080 to any А вот тут большая ошибка: транслировать исходящие пакеты надо, только если они уходят обратно в тот же интерфейс, то есть пропущено out xmit vmx0 в конце правила, добавь. > 65000 104 7636 allow ip from any to any > 65535 8928 1279978 deny ip from any to any > > Сервер в конце туннеля > > # ipfw show > 00100 4 240 fwd 192.168.10.1 ip from 192.168.10.111 8080 to any via rl0 > 00200 0 0 fwd 192.168.10.1 ip from me 8080 to any out via rl0 > 65000 63 4599 allow ip from any to any > 65535 122 10052 allow ip from any to any Если тебе надо безусловно направлять ответные пакеты через 192.168.10.1, то правило нужно только одно и чем оно будет короче, тем лучше: ipfw add 100 fwd 192.168.10.1 ip from any 8080 to any out Это если сервер не выполняет функции роутера и исходящий трафик у него есть только свой собственный и форвард нужен безусловный, независимо от того, в какой интерфейс пакеты таблица маршрутизации направила бы ответные пакеты. _______________________________________________ freebsd mailing list freebsd@uafug.org.ua http://mailman.uafug.org.ua/mailman/listinfo/freebsd