Ответ:
Версии используемых средств:
FreeBSD 4.10
Racoon 20040818a
OpenSSL 0.9.7d
Межсетевой экран DFL-100
Hardware Version: 4A1
Firmware Version: 2.29
И так, мы имеем сеть вида 192.168.0.х/24 с шлюзом DFL-100 с внутренним адресом 192.168.0.1.
Внешний адрес у DFL-100 - 200.168.135.100
Другая сеть вида 192.168.1.х/24 работает через шлюз FreeBSD с внутренним адресом 192.168.1.10
Внешний адрес у шлюза с FreeBSD - 200.168.135.220
Настройка FreeBSD
ШАГ 1
Требуется добавить в ядро поддержку IPSEC:
options IPSEC
options IPSEC_ESP
И пересобираем ядро.
ШАГ 2
В /etc/rc.conf добавляем:
ipsec_enable="YES"
ipsec_file="/etc/ipsec.conf"
ike_enable="YES"
ike_program="/usr/local/sbin/racoon" (как настроить Racoon - ниже)
ШАГ 3
Создаем файл /etc/ipsec.conf:
flush;
spdflush;
spdadd 192.168.1.0/24 192.168.0.0/24 any -P out ipsec esp/tunnel/200.168.134.220-200.168.134.100/require;
spdadd 192.168.0.0/24 192.168.1.0/24 any -P in ipsec esp/tunnel/200.168.134.100-200.168.134.220/require;
ШАГ 4
Ставим и настраиваем Racoon:
В моем случае я его ставил с пакетов : pkg_add racoon-20040818a.tgz
Настраиваем /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";
#log debug
padding
{
maximum_length 20; # maximum padding length.
randomize off; # enable randomize length.
strict_check off; # enable strict check. e
exclusive_tail off; # extract last one octet.
}
listen
{
isakmp 200.168.134.220 [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;
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 md5;
authentication_method pre_shared_key;
dh_group 2;
}
}
sainfo anonymous
{
pfs_group 1;
lifetime time 3600 sec;
encryption_algorithm 3des;
authentication_algorithm hmac_md5;
compression_algorithm deflate;
}
Настраиваем файл ключей /usr/local/etc/racoon/psk.txt :
200.168.134.100 qwerty
Также следует установить права на psk.txt:
chmod 0600 /usr/local/etc/racoon/psk.txt
Без этого Racoon будет считать права на файл psk.txt слабыми, и не будет читать его читать.
ШАГ 5
В файл с правилами файервола IPFW /etc/rc.firewall необходимы, как минимум эти строки:
${fw} add pass UDP from any 500 to any 500 ${fw} add pass ESP from any to any
где, fw="sbin/ipfw"
Конечно, с точки зрения безопасности очень желательно, чтобы все было описано более явно и четко, но это дело вкуса. =)
Настройка DFL-100
В первую очередь, на вкладке Advanced Settings / VPN Settings /IPSec Status настраиваем статус IPSec. По умолчанию, IPSec включен.
Важно! Настраиваем параметр Negotiation ID - этот параметр, заданный на DFL-100, служит для организации тоннеля и указывается на удаленном устройстве в привязке к ключу шифрации. Т.к. на BSD машине ключ шифрации мы привязываем к IP адресу, то в данной схеме мы должны на DFL-100 указать в поле Negotiation ID IP - адрес wan интерфейса DFL-100. Иначе тоннель не будет установлен!
Т.о. в данной схеме Negotiation ID = 200.168.134.100
Далее, на вкладке Advanced Settings / VPN Settings / IPSec Tunnel Mode задаем настройки для конкретного тоннеля. За подробностями понимания всех этих настроек можно обратится к документации по IPSec - она широко представлена в Интернет.
В данном случае на этой вкладке, при работе с маршрутизатором BSD, поле Negotiation ID носит информативный характер - можно указать любое значение.
Далее, параметр Remote Gateway IP - это IP-адрес WAN-интерфейса устройства, стоящего на другом конце тоннеля, т.е. 200.168.134.220
Параметр Remote IP Network - это внутренняя сеть LAN, подключенная к устройству, стоящему на другом конце тоннеля, т.е. 192.168.1.0
Параметр Remote IP Netmask - маска подсети для предыдущего пункта, т.е. 255.255.255.0
Все остальные параметры должны быть одинаковые на обоих устройствах, организующих IPSec соединение.
Примечание: Здесь выбор настроек определяется пользователем исходя из требований производительности или надежности. Приведенные ниже настройки даны в качестве примера. Вы также можете использовать другие комбинации - необходимое требование при этом одно: настройки должны быть идентичны на обоих устройствах, организующих IPSec тоннель!
Все, на этом конфигурирование устройств закончено
Для отладки со стороны BSD
я использовал вышеописанные правила IPFW с параметром log:
${fw} add pass log UDP from any 500 to any 500
${fw} add pass log ESP from any to any
в файле /var/log/security должно быть примерно следующее:
FreeBSD-Main /kernel: ipfw: 350 Accept ICMP:8.0 192.168.1.1 192.168.0.10 in via …..
FreeBSD-Main /kernel: ipfw: limit 1 reached on entry 350
FreeBSD-Main /kernel: ipfw: 1100 Accept UDP 192.168.134.220:500 192.168.134.100:500 out via ….
FreeBSD-Main /kernel: ipfw: limit 1 reached on entry 1100
FreeBSD-Main /kernel: ipfw: 1150 Accept P:50 192.168.134.220 192.168.134.100 out via ….
FreeBSD-Main /kernel: ipfw: limit 1 reached on entry 1200
для отладки Racoon'а можно использовать такой запуск:
/usr/local/sbin/racoon -F -v -а /usr/local/etc/racoon/racoon.conf
На экране, в случае удачного соединения должно быть примерно следующее:
2000-00-09 12:32:55: INFO: main.c:172:main(): @(#)package version freebsd-20040818a
2000-00-09 12:32:55: INFO: main.c:174:main(): @(#)internal version 20001216 sakane@kame.net
2000-00-09 12:32:55: INFO: main.c:175:main(): @(#)This product linked OpenSSL 0.9.7d 17 Mar 2004 (http://www.openssl.org/)
2000-00-09 12:32:55: INFO: isakmp.c:1368:isakmp_open(): 200.168.134.220[500] used as isakmp port (fd=5)
2000-00-09 12:33:24: INFO: isakmp.c:904:isakmp_ph1begin_r(): respond new phase 1 negotiation:
200.168.134.220[500]<=>200.168.134.100[500]
2000-00-09 12:33:24: INFO: isakmp.c:909:isakmp_ph1begin_r(): begin Identity Protection mode.
2000-00-09 12:33:26: INFO: isakmp.c:2459:log_ph1established(): ISAKMP-SA established
200.168.134.220[500]-200.168.134.100[500] spi:021b5ee9640d1f:4f24008f5c15ee
2000-00-09 12:33:26: INFO: isakmp.c:1059:isakmp_ph2begin_r(): respond new phase 2 negotiation:
200.168.134.220[0]<=>200.168.134.100[0]
2000-00-09 12:33:27: INFO: pfkey.c:1197:pk_recvupdate(): IPsec-SA established: ESP/Tunnel 200.168.134.100->200.168.134.220
spi=15535903(0x949761)
2000-00-09 12:33:27: INFO: pfkey.c:1420:pk_recvadd(): IPsec-SA established: ESP/Tunnel 200.168.134.220->200.168.134.100
spi=237052007(0x8d4b4d1)
Проверка
Теперь для поднятия тоннеля между устройствами посылаем icmp-запрос из одной подсети в другую:
Контролируем процесс на DFL-100 :
Компания D-link выражает свою благодарность Вадиму Рыбакову за составление данного материала. С ним Вы можете связаться по e-mail: vadimnot at yandex.ru