URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 2385
[ Назад ]

Исходное сообщение
"FreeBSD 5.4: не работает VPN на IPSEC"

Отправлено Vasiliy_Seleznev , 24-Окт-05 17:20 
Система: два маршрутизатора на FreeBSD 5.4.
Раньше была одна машина на FreeBSD 5.2, вторая на 5.4, всё работало (оба маршрутизатора конфигурил сам с нуля). Поменял один из них, перестало работать. Не могу разобраться, то-ли я сам дурак, то-ли что-то на самом деле глючит.
Симптомы:
Конфигурю тунель (gif0 create, route add...), после этого пускаю пинг со 192.168.60.1 на 192.168.61.1. Пинг проходит.
Когда включаю шифрование (setkey), пинг перестаёт проходить.
После изврата с tcpdump я пришёл к следующему выводу:
проблемная машина (192.168.60.1) получает ESP пакеты, их содержимое не попадает на gif0.
Машина 192.168.61.1 получает ESP пакеты, корректно их обрабатывает и отсылает обратные, которые ДОХОДЯТ до проблемной машины, но там не расшифровываются.
Подскажите, где грабли? Пятой точкой чую, что где-то сам туплю

Содержание

Сообщения в этом обсуждении
"FreeBSD 5.4: не работает VPN на IPSEC"
Отправлено Moralez , 25-Окт-05 06:42 
А почему ни слова про IKE? Он у вас есть вообще?

"FreeBSD 5.4: не работает VPN на IPSEC"
Отправлено Vasiliy_Seleznev , 25-Окт-05 12:10 
>А почему ни слова про IKE? Он у вас есть вообще?

Я даже не знаю, что это такое :)

Я просто пересобрал ядро с options IPSEC (и др.), поставил racoon и всё работало.
Потом точно так же настроил новый маршрутизатор, работать перестало.

Настройки файрвола
100 pass all from any to any via gif0
200 pass all from xxx.xxx.xxx.xxx to yyy.yyy.yyy.yyy
300 pass all from yyy.yyy.yyy.yyy to xxx.xxx.xxx.xxx


"FreeBSD 5.4: не работает VPN на IPSEC"
Отправлено Vasiliy_Seleznev , 25-Окт-05 12:31 
>А почему ни слова про IKE? Он у вас есть вообще?

Имеется в виду internet key exchange? Так racoon для этого и создан.

Racoon стартуется на обоих концах (пробовал запускать racoon с ключем -F, всё ок вроде)
вот что пишет при попытке пинга на проблемной машине:

domain# ./racoon -F
Foreground mode.
2005-10-25 12:30:31: INFO: main.c:172:main(): @(#)package version freebsd-20040818a
2005-10-25 12:30:31: INFO: main.c:174:main(): @(#)internal version 20001216 sakane@kame.net
2005-10-25 12:30:31: INFO: main.c:175:main(): @(#)This product linked OpenSSL 0.9.7e 25 Oct 2004 (http://www.openssl.org/)
2005-10-25 12:30:31: INFO: isakmp.c:1368:isakmp_open(): xxx.xxx.xxx.xxx[500] used as isakmp port (fd=5)
2005-10-25 12:30:41: INFO: isakmp.c:1694:isakmp_post_acquire(): IPsec-SA request for yyy.yyy.yyy.yyy queued due to no phase1 found.
2005-10-25 12:30:41: INFO: isakmp.c:808:isakmp_ph1begin_i(): initiate new phase 1 negotiation: xxx.xxx.xxx.xxx[500]<=>yyy.yyy.yyy.yyy[500]
2005-10-25 12:30:41: INFO: isakmp.c:813:isakmp_ph1begin_i(): begin Aggressive mode.
2005-10-25 12:30:41: INFO: vendorid.c:128:check_vendorid(): received Vendor ID: KAME/racoon
2005-10-25 12:30:42: NOTIFY: oakley.c:2084:oakley_skeyid(): couldn't find the proper pskey, try to get one by the peer's address.
2005-10-25 12:30:42: INFO: isakmp.c:2459:log_ph1established(): ISAKMP-SA established xxx.xxx.xxx.xxx[500]-yyy.yyy.yyy.yyy[500] spi:a87d3f7d0919282d:c40dc5ec98c6a9c4
2005-10-25 12:30:42: INFO: isakmp.c:952:isakmp_ph2begin_i(): initiate new phase 2 negotiation: xxx.xxx.xxx.xxx[0]<=>yyy.yyy.yyy.yyy[0]
2005-10-25 12:30:42: INFO: pfkey.c:1197:pk_recvupdate(): IPsec-SA established: ESP/Tunnel yyy.yyy.yyy.yyy->xxx.xxx.xxx.xxx spi=119541167(0x7200daf)
2005-10-25 12:30:42: INFO: pfkey.c:1420:pk_recvadd(): IPsec-SA established: ESP/Tunnel xxx.xxx.xxx.xxx->yyy.yyy.yyy.yyy spi=220570738(0xd25a472)

tcpdump видит обмен ключами через 500-й порт.
в один конец пакеты доходят, а в другой почему-то нет, куда-то деваются после интерфейса сетевой карточки. Можно как-нибудь отследить этот момент?

Привожу конфиг (они одинаковые на обеих машинах, за исключением раздела listen, это и ежу понятно):
######################################
## /usr/local/etc/racoon/racoon.conf #
######################################

path include "/usr/local/etc/racoon" ;
path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;

padding
{
        maximum_length 20;
        randomize on;
        strict_check on;
        exclusive_tail off;
}


listen
{
        isakmp xxx.xxx.xxx.xxx [500];
}

timer
{
        counter 5;
        interval 10 sec;
        persend 1;
        phase1 30 sec;
        phase2 15 sec;
}

remote anonymous
{
        exchange_mode aggressive,main;
        nonce_size 16;
        lifetime time 10 min;       # sec,min,hour
        initial_contact on;
        support_proxy off;
        proposal_check obey;        # obey, strict or claim

        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key ;
                dh_group 2 ;
        }
}
sainfo anonymous
{
        lifetime time 10 min;
        encryption_algorithm rijndael;
        authentication_algorithm hmac_sha1;
        compression_algorithm deflate ;
}


"FreeBSD 5.4: не работает VPN на IPSEC"
Отправлено Moralez , 28-Окт-05 08:58 
покажите файл, который setkey -f скармливаете. проблема наверняка там. in-out напр перепутано или что-то ещё...

"Подскажите, плиз, как записать для IPFILTER правила "
Отправлено Oleg104 , 08-Ноя-05 17:45 
Подскажите, плиз, как записать для IPFILTER правила аналогичные правилам:
ipfw add 1 allow udp from A.B.C.D to W.X.Y.Z isakmp
ipfw add 1 allow udp from W.X.Y.Z to A.B.C.D isakmp
ipfw add 1 allow esp from A.B.C.D to W.X.Y.Z
ipfw add 1 allow esp from W.X.Y.Z to A.B.C.D
ipfw add 1 allow ipencap from A.B.C.D to W.X.Y.Z
ipfw add 1 allow ipencap from W.X.Y.Z to A.B.C.D

"FreeBSD 5.4: не работает VPN на IPSEC"
Отправлено Vasiliy_Seleznev , 09-Ноя-05 15:16 
>покажите файл, который setkey -f скармливаете. проблема наверняка там. in-out напр перепутано
>или что-то ещё...

Проблемный комп:
#!/bin/sh

ifconfig gif0 create
ifconfig gif0 inet 192.168.60.1 192.168.61.1 netmask 0xffffffff tunnel xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy
route add 192.168.61.0/24 192.168.61.1

setkey -FP
setkey -F
setkey -c << END
spdadd xxx.xxx.xxx.xxx/32 yyy.yyy.yyy.yyy/24 ipencap -P out ipsec esp/tunnel/xxx.xxx.xxx.xxx-yyy.yyy.yyy.yyy/require;
spdadd yyy.yyy.yyy.yyy/24 xxx.xxx.xxx.xxx/32 ipencap -P in  ipsec esp/tunnel/yyy.yyy.yyy.yyy-xxx.xxx.xxx.xxx/require;
END


Непроблемный комп:
#!/bin/sh

ifconfig gif0 create
ifconfig gif0 inet 192.168.61.1 192.168.60.1 netmask 0xffffffff tunnel yyy.yyy.yyy.yyy xxx.xxx.xxx.xxx
route add 192.168.60.0/24 192.168.60.1

setkey -FP
setkey -F
setkey -c << END
spdadd yyy.yyy.yyy.yyy/32 xxx.xxx.xxx.xxx/24 ipencap -P out ipsec esp/tunnel/yyy.yyy.yyy.yyy-xxx.xxx.xxx.xxx/require;
spdadd xxx.xxx.xxx.xxx/24 yyy.yyy.yyy.yyy/32 ipencap -P in  ipsec esp/tunnel/xxx.xxx.xxx.xxx-yyy.yyy.yyy.yyy/require;
END