[freebsd] Мультихомед ipsec VPN

Eugene Grosbein eugen at grosbein.net
Thu Oct 11 12:55:45 EEST 2018


On 11.10.2018 16:40, Andrey A Lyubimets wrote:

>> Это не проблема mpd5, ему совершенно всё равно и он у меня работает со множеством внешних каналов.
>>
>> Это проблема не настроенного PBR на роутере - чтобы ответы на запросы, пришедшие
>> через недефолтный канал, уходили в него же, а не по дефолтному роутеру.
> Извиняюсь, что написал сверхкратко, до ввода в заблуждение.
> 
> У меня настроен PBR только средствами pf - pptp работает на обоих каналах
> 
> правила pf для PBR выглядят так:
> pass in on $ext_if_1 reply-to ($ext_if_1 $gw_1) inet to ($ext_if_1) tag 
> EXT_IF_A
> pass in on $ext_if_1 inet from ($ext_if_1:network) to ($ext_if_1)
> 
> pass in on $ext_if_2 reply-to ($ext_if_2 $gw_2) inet to ($ext_if_2) tag 
> EXT_IF_2
> pass in on $ext_if_2 inet from ($ext_if_2:network) to ($ext_if_2)
> 
> pass in quick from ($ext_if_1:network) tagged EXT_IF_1 keep state
> pass in quick reply-to ($ext_if_1 $gw_1) tagged EXT_IF_1 keep state
> 
> pass in quick from ($ext_if_2:network) tagged EXT_IF_2 keep state
> pass in quick reply-to ($ext_if_2 $gw_2) tagged EXT_IF_2 keep state
> 
> pass out route-to ($ext_if_1 $gw_1) inet from $ext_addr_1 keep state
> pass out route-to ($ext_if_2 $gw_2) inet from $ext_addr_2 keep state
> 
> 
> pptp работает на обоих каналах, но при установке ipsec-соединения
> 
> обмен пакетами  с ракуном вижу, а ответных ipsec-пакетов нет:
> 
> 14:21:14.590034 IP 80.x.x.x.59690 > 212.y.y.y.500: isakmp: phase 1 I ident
> 14:21:14.597585 IP 212.y.y.y.500 > 80.x.x.x.59690: isakmp: phase 1 R ident
> 14:21:14.606945 IP 80.x.x.x.59690 > 212.y.y.y.500: isakmp: phase 1 I ident
> 14:21:14.614994 IP 212.y.y.y.500 > 80.x.x.x.59690: isakmp: phase 1 R ident
> 14:21:14.619311 IP 80.x.x.x.60052 > 212.y.y.y.4500: NONESP-encap: 
> isakmp: phase 1 I ident[E]
> 14:21:14.627155 IP 212.y.y.y.4500 > 80.x.x.x.60052: NONESP-encap: 
> isakmp: phase 1 R ident[E]
> 14:21:14.630252 IP 80.x.x.x.60052 > 212.y.y.y.4500: NONESP-encap: 
> isakmp: phase 2/others I oakley-quick[E]
> 14:21:14.639471 IP 212.y.y.y.4500 > 80.x.x.x.60052: NONESP-encap: 
> isakmp: phase 2/others R oakley-quick[E]
> 14:21:14.640948 IP 80.x.x.x.60052 > 212.y.y.y.4500: NONESP-encap: 
> isakmp: phase 2/others I oakley-quick[E]
> 14:21:14.653265 IP 80.x.x.x.60052 > 212.y.y.y.4500: UDP-encap: 
> ESP(spi=0x0d18e3ea,seq=0x1), length 164
> 14:21:15.649011 IP 80.x.x.x.60052 > 212.y.y.y.4500: UDP-encap: 
> ESP(spi=0x0d18e3ea,seq=0x2), length 164
> 14:21:17.648743 IP 80.x.x.x.60052 > 212.y.y.y.4500: UDP-encap: 
> ESP(spi=0x0d18e3ea,seq=0x3), length 164
> 14:21:21.648771 IP 80.x.x.x.60052 > 212.y.y.y.4500: UDP-encap: 
> ESP(spi=0x0d18e3ea,seq=0x4), length 164
> 14:21:29.648306 IP 80.x.x.x.60052 > 212.y.y.y.4500: UDP-encap: 
> ESP(spi=0x0d18e3ea,seq=0x5), length 164
> 14:21:34.616983 IP 80.x.x.x.60052 > 212.y.y.y.4500: isakmp-nat-keep-alive
> 14:21:39.647956 IP 80.x.x.x.60052 > 212.y.y.y.4500: UDP-encap: 
> ESP(spi=0x0d18e3ea,seq=0x6), length 164
> 
> если сделать route change default 212.y.y.y ,то соединение устанавливается.

Вывод - pf не заворачивает ESP-пакеты во второй канал. Видимо, ошибка в правилах.
Я никогда не использовал pf и не понимаю его синтаксиса, так что точно не подскажу,
но подозреваю, что какая-то проблема в правиле

pass out route-to ($ext_if_2 $gw_2) inet from $ext_addr_2 keep state

Зачем вообще нужен keep state? Никакие состояния тут не нужны, потому что всё
однозначно - если пакет с $ext_addr_2, он безусловно должен идти в $ext_if_2
безо всяких стейтов. Соответственно, и для входящих правил тоже низачем не нужно
отслеживание состояний - лишняя нагрузка на CPU и забивание памяти таблицами состояний.

Состояния нужно отслеживать только если пакет проходит NAT, а для терминируемого
на самом роутере трафика всё это лишнее.




More information about the freebsd mailing list