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

Ответить