В туннель заворачивается на сервере 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 не работает.
_______________________________________________
freebsd mailing list
fre...@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/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
>
>
> Почему так?
Проверил на NetBSD - аналогично. Но почему так?
>
>
> Для UDP заворачиваю в туннель вот так
> ${fwcmd} add fwd 192.168.10.1 all from me 8080 to any out via rl0
>
> И все работает. Сервер видит ответ X и пересылает дальше.
>
> А вот с TCP forward не работает.
А это еще не пробовал. Нужно читать про npf...
Нужен полный вывод ipfw show без каких-либо редактирований, разве что можешь заменить публичные адреса.
> 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'
06:03:48.740345 IP 192.168.10.111.http-alt > W.W.W.W.35922: Flags [S.], seq 1829934935, ack 3960482503, win 65535, options [mss 1460,nop,wscale 6,sackOK,TS val 3660567064 ecr 2622412667], length 0
E..<..@.@..c..
oak.....Rm..W..*......`.............
./...N.{
06:03:49.740412 IP 192.168.10.111.http-alt > W.W.W.W.35922: Flags [S.], seq 1829934935, ack 3960482503, win 65535, options [mss 1460,nop,wscale 6,sackOK,TS val 3660568064 ecr 2622412667], length 0
E..<..@.@..c..
oak.....Rm..W..*......x.............
./...N.{
06:03:51.976288 IP 192.168.10.111.http-alt > W.W.W.W.35922: Flags [S.], seq 1829934935, ack 3960482503, win 65535, options [mss 1460,nop,wscale 6,sackOK,TS val 3660570300 ecr 2622412667], length 0
E..<..@.@..c..
oak.....Rm..W..*....................
./...N.{
06:03:56.266309 IP 192.168.10.111.http-alt > W.W.W.W.35922: Flags [S.], seq 1829934935, ack 3960482503, win 65535, options [mss 1460,nop,wscale 6,sackOK,TS val 3660574590 ecr 2622412667], length 0
E..<..@.@..c..
oak.....Rm..W..*....................
./.~.N.{
Выше - это ответ на вот это запрос, который пришел по ng0 тунелю:
# tcpdump -A -i ng0 'port 8080'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ng0, link-type NULL (BSD loopback), capture size 262144 bytes
06:06:39.524166 IP W.W.W.W.35924 > 192.168.10.111.http-alt: Flags [S], seq 1945733787, win 64240, options [mss 1178,sackOK,TS val 2622583445 ecr 0,nop,wscale 7], length 0
E..<..@.3...ak....
o.T..s............o.........
.Qr.........
Я просил вывод ipfw show, а не tcpdump.
> 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
00200 0 0 nat 1 ip from any 8080 to any
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
Лучше писать 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
Это если сервер не выполняет функции роутера и исходящий трафик у него есть только свой собственный
и форвард нужен безусловный, независимо от того, в какой интерфейс пакеты таблица маршрутизации
направила бы ответные пакеты.
> > 00200 0 0 nat 1 ip from any 8080 to any
>
> А вот тут большая ошибка: транслировать исходящие пакеты надо,
> только если они уходят обратно в тот же интерфейс, то есть пропущено out xmit vmx0 в конце правила, добавь.
Кстати, а в чем отличие out xmit от out recv?
>
> > 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
_______________________________________________