[freebsd] Есть ли особенности проброса порта в туннель?

Eugene Grosbein eugen at grosbein.net
Sun Jun 26 21:35:12 EEST 2022


24.06.2022 17:16, Nick Kostirya via freebsd пишет:
> On Fri, 24 Jun 2022 14:30:01 +0700
> Eugene Grosbein <eugen at grosbein.net> wrote:
> 
>>> На сервере Y с IP 192.168.12.111 в туннеле (13.1-RELEASE)
>>> Вижу только входящий пакет и все.
>>> # tcpdump -n -i ipsec0 -a 'port 8080 or port 80'
>>> 06:07:03.106586 IP X.X.X.X.62673 > 192.168.12.111.80: Flags [S], seq 1358968744, win 65535, options [mss 16344,nop,wscale 6,sackOK,TS val 3568935363 ecr 0], length 0  
>>
>> Разница в том, что в первом случае адрес источника был X.X.X.X, а во втором 192.168.12.1.
>> Либо входящий пакет был убит файрволом на приёмной стороне, либо ответ не находит роута в туннель
>> и уходит в другой интерфейс или вообще никуда.
> 
> В ipfw разрешено для tcp все.
> 
> Таблица роутинга вот такая:
> 
> Destination        Gateway            Flags     Netif Expire
> default            X.X.X.X            UGS         rl0
> 127.0.0.1          link#2             UH          lo0
> 192.168.0.0/24     link#1             U           rl0
> 192.168.0.111      link#1             UHS         lo0
> 192.168.12.1       link#5             UH       ipsec0
> 192.168.12.111     link#5             UHS         lo0
> 
> 
> Получается ответы, на запроси от X.X.X.X, хоть и пришли через тунель, уходят на X.X.X.X, а не в тунель 192.168.12.1.
> 
> Но их почему-то не видно tcpdump -i rl0 'port 8080 or port 80'.

Тогда они не уходят в этот интерфейс. Вероятно, они не уходят никуда, потому что убиваются
уже после расшифровки в ядре.

> А почему на сервере Y в tcpdump видны запросы
> 
> 12:50:08.219710 IP X.X.X.X.41173 > 192.168.12.111.http: Flags [S], seq 3645315935, win 65535, options [mss 16344,nop,wscale 6,sackOK,TS val 1553419922 ecr 0], length 0
> 
> Но в ipfw нет?

Вероятно, до прохода по ipfw после расшифровки пакеты не доходят.
Нужен вывод netstat -sp ipsec и netstat -sp esp

> И что означает ip в nat config ?
> Описание "Define an ip address to use for aliasing." на понятно.

Вместо if можно использовать ip.
Если использовать if, то ipfw nat берет с указанного интерфейса два параметра:
IP в качестве aliasing address (то есть, "внешнего) и MTU для PMTUD,
для отправки ICMP need-frag при необходимости.

Если же вместо if указать ip, то он будет его использовать, но ICMP need-frag отправлять не будет.

Что касается исходной проблемы: пора в деталях описывать, каким образом устанавливается IPSec-туннель:
используется ли IKE-агент? Используется ли NAT-T? Что в выводе упомянутых выше команд
netstat -sp ipsec и netstat -sp esp и какие счетчики растут, когда проблема воспроизводится повторно?



More information about the freebsd mailing list