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

Andrey A Lyubimets andrey at nskes.ru
Thu Oct 11 12:40:15 EEST 2018



11.10.2018 12:41, Eugene Grosbein пишет:
> 11.10.2018 12:08, Andrey A Lyubimets пишет:
> 
>> Навеяно соседним тредом.
>>
>> mpd5 работает на сервере подключенном к двум провайдерам - l2tp/ipsec устанавливает соединения только на том интерфейсе где дефаултроутер.
>>
>> Можно ли как-то заставить его работать на любом интерфейсе?
>> или не париться и забить?
> 
> Это не проблема 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 ,то соединение устанавливается.

> 
> Для демона, запущенного непосредственно на самом роутере, проблема решается
> одним дополнительным правилом ipfw типа такого:
> 
> ipfw add 10 fwd $gw2 from $ip2 to any out xmit $if1
> 
> где $if1 - имя дефолтного интерфейса, $gw2 - IP-адрес шлюза второго (недефолтного) провайдера,
> $ip2 - IP-адрес самого роутера на втором интерфейсе роутера.
> 
> То есть, правило принудительно направляет в нужный провайдерский роутер ответные пакеты,
> идущие с второго интерфейса, если они по роутингу пытаются уйти в неправильный интерфейс $if1.
> 
> Само собой, номер правила ipfw тоже зависит от местных условий, правило надо добавлять вдумчиво.
> 


More information about the freebsd mailing list