Вопрос: Настройка IPSEC тоннеля между маршрутизатором DI-804HV и FreeBSD 4.8

Ответ: 

FreeBSD:
внешний интерфейс: XXX.XXX.XXX.XXX
внутренний: xxx.xxx.xxx.xxx
сеть за BSD: xxx.xxx.xxx.0/24

D-link:
внешний интерфейс: YYY.YYY.YYY.YYY
внутренний: yyy.yyy.yyy.yyy
сеть за D-link: yyy.yyy.yyy.0/24

FreeBSD:
1. Добавляем в ядро поддержку IPSEC:

options IPSEC
options IPSEC_ESP
options IPSEC_DEBUG


2. Пересобираем ядро.

3. В /etc/rc.conf добавляем:

ipsec_enable="YES"
ipsec_file="/etc/ipsec.conf"

4. Создаем /etc/ipsec.conf

flush;
spdflush;
spdadd xxx.xxx.xxx.0/24 yyy.yyy.yyy.0/24 any -P out ipsec esp/tunnel/XXX.XXX.XXX.XXX-YYY.YYY.YYY.YYY/require;
spdadd yyy.yyy.yyy.0/24 xxx.xxx.xxx.0/24 any -P in ipsec esp/tunnel/YYY.YYY.YYY.YYY-XXX.XXX.XXX.XXX/require;

5. Ставим racoon. Он будет шифровать канал.

cd /usr/ports/security/racoon; make install clean

6. Настраиваем /usr/local/etc/racoon/racoon.conf

path include "/usr/local/etc/racoon" ;
path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;
path certificate "/usr/local/etc/cert" ;
padding
{
maximum_length 20; # maximum padding length.
randomize off; # enable randomize length.
strict_check off; # enable strict check.
exclusive_tail off; # extract last one octet.
}

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

timer
{
# These value can be changed per remote node.
counter 5; # maximum trying count to send.
interval 20 sec; # maximum interval to resend
persend 1; # the number of packets per a send.

# timer for waiting to complete each phase.
phase1 30 sec;
phase2 15 sec;
}

remote anonymous
{
exchange_mode main,aggressive;
#exchange_mode aggressive,main;
doi ipsec_doi;
situation identity_only;

#my_identifier address;
my_identifier user_fqdn "mail@mail.ru";
peers_identifier user_fqdn "mail@mail.ru";
#certificate_type x509 "mycert" "mypriv";

nonce_size 16;
lifetime time 3600 sec; # sec,min,hour
initial_contact on;
support_mip6 on;
proposal_check obey; # obey, strict or claim

proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key ;
dh_group 1 ;
}
}

sainfo anonymous
{
pfs_group 1;
lifetime time 3600 sec;
encryption_algorithm 3des ;
authentication_algorithm hmac_md5;
compression_algorithm deflate ;
}

7. Настраиваем файл ключей /usr/local/etc/racoon/psk.txt

YYY.YYY.YYY.YYY Preshare_Key


не забываем:
chmod 0600 /usr/local/etc/racoon/psk.txt

С BSD все. В статьях на open.net написано что надо поднимать gif интерфейсы,
но у меня все работает без них. Т.е. в ядре поддержка есть, но в rc.conf они не прописаны.
2. D-Link












3. Посылаем ping из одной сети в другую. Соединение установлено.

4. Если не работает, то:

ps -ax ищем процесс racoon и убиваем его kill

далее: /usr/local/sbin/racoon -F -v -f /usr/local/etc/racoon/racoon.conf
и смотрим на что ругается.