Хочу рассказать об одном из своих первых опытов общения с FreeBSD и настройке IPSEC для связи с D-Link DI-804HV и проблемах, которые возникли при этом. Надеюсь, это поможет народу не наступать на мои грабли.
Так получилось, что когда я пришел на новую работу, то в мою сферу ответственности попал сервер с FreeBSD, который был шлюзом в Интернет — на нем крутился почтовый сервер и файерволл. По предыдущей работе был опыт работы с Линуксами, но FreeBSD до этого в глаза не видел. И вот одна из первых задач на новой работе была настроить соединение с удаленным офисом через инет, для этого туда прикупили железку D-Link DI-804HV. Решено было соединить это все хозяйство через IPSEC.В статью были внесены некоторые изменения, на основании замечаний после публикации
Итак, что у нас было в наличии (адреса здесь даны исключительно для примера):
внутренняя сеть предприятия 192.168.250.0/24,
внутренняя сеть офиса 192.168.0.0/24,
машрутизатор предприятия 192.168.250.1
маршрутизатор офиса 192.168.0.1
внешний адрес на FreeBSD 10.10.10.1,
внешний адрес на DI-804HV 10.10.10.2.
Все работы проводил сперва на тестовой машине во избежание всяких неприятных моментов.
Ну началось все как обычно — с чтения документации на сайте D-link`а и других сетевых ресурсах. На сайте D-Link есть описание связки FreeBSD 4.8 с этой железкой, но часть информации там уже устарела, как выяснилось позднее.
Начал свою работу с пересборки ядра, с включением необходимых опций — конфиги ядра лежат в /usr/src/sys/i386/conf, я скопировал GENERIC в IPSEC и начал вносить изменения.
Поскольку у меня стоит FreeBSD 9, то изменения следующие:options IPSEC
device crypto
Если версия меньше 7 (как я понял из обсуждения в инете), необходимо следующее:options IPSEC
options IPSEC_ESP
options IPSEC_DEBUG # необязательно, но облегчит поиск проблем
Пересобрал ядро командами:make buildkernel KERNCONF=IPSEC
make installkernel KERNCONF=IPSEC
где IPSEC — это мое название конфигурации ядра.
Перегрузил машину, проверил, что она загружается.
Далее приступил к установке непосредственно самого софта. Перед установкой все рекомендуют сделать обновление портов, в моем случае это было через команды:portsnap fetch
portsnap extract
portsnap update
После этого приступил к установке нужных портов. Из чтения статей в форуме, понял, что мне нужен racoon, он находится в портах /usr/ports/security/ipsec-tools. Есть еще racoon2, но нам он не нужен, поскольку ikev2 не поддерживается DI-804HV.
Установливаем порт через:make install clean
После установки переходим в каталог /usr/local/etc/racoon — если его нет, то создаем — и создаем файл конфигурации racoon.conf:freebsd# cat /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; # maximum padding length.
randomize off; # enable randomize length.
strict_check off; # enable strict check.
exclusive_tail off; # extract last one octet.
}
listen
{
#isakmp ::1 [7000];
isakmp 10.10.10.1 [500];
#admin [7002]; # administrative port for racoonctl.
#strict_address; # requires that all addresses must be bound.
}
# Specify various default timers.
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 send.
# maximum time to wait for completing each phase.
phase1 30 sec;
phase2 15 sec;
}
remote anonymous
{
exchange_mode main,base;
# doi ipsec_doi;
# situation identity_only;
lifetime time 28800 sec;
#my_identifier asn1dn;
#certificate_type x509 "my.cert.pem" "my.key.pem";
#nonce_size 16;
# initial_contact on;
generate_policy on;
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group 2;
}
proposal_check strict;
}
sainfo anonymous
{
#pfs_group 2;
lifetime time 28800 sec;
encryption_algorithm 3des, cast128, blowfish 448, des, rijndael;
authentication_algorithm hmac_sha1, hmac_md5;
compression_algorithm deflate;
}
Аутентификация будет происходить при помощи общего ключа (shared_key), который находится в файле /usr/local/etc/racoon/psk.txt:freebsd# cat /usr/local/etc/racoon/psk.txt
10.10.10.2 123456789q
Хотелось бы заметить, что на данный файл необходимо сменить атрибуты вида 0600 от рута:freebsd# ls -l /usr/local/etc/racoon/psk.txt
-rw------- 1 root wheel 21 Jan 31 13:55 /usr/local/etc/racoon/psk.txt
Иначе потом можно долго разбираться, почему не работает.
Затем вносим изменения в /etc/rc.conf:racoon_enable="YES"
#Как выяснилось из обсуждения, gif0 в принципе и не нуженcloned_interfaces="gif0"
gif_interfaces="gif0"
gifconfig_gif0="10.10.10.1 10.10.10.2"
ifconfig_gif0="inet 192.168.250.1 192.168.0.1 netmask 0xffffffff"
ipsec_enable="YES"
ipsec_file="/etc/ipsec.conf"
Ну и файл /etc/ipsec.conf:flush;
spdflush;
spdadd 192.168.250.0/24 192.168.0.0/24 any -P out ipsec esp/tunnel/10.10.10.1.-10.10.10.2/require;
spdadd 192.168.0.0/24 192.168.250.0/24 any -P in ipsec esp/tunnel/10.10.10.2-10.10.10.1/require;
Перегружаемся, видим, что новый интерфейс появился, служба стартовала, идем к следующему этапу.
Ну вот, вроде закончили с настройкой FreeBSD, пора приступать к DI-804HV
Заходим на вебконсоль, переходим на вкладку VPN, вводим название для нашего VPN соединения и жмем кнопку More.
Попадаем в следующие настройки и заполняем все поля согласно нашим начальным условиям:
После заполнения этих данных нажимаем Apply и после перегрузки страницы нам надо зайти на IKE Proposal Index, щелкаем на кнопку Select IKE Proposal и что же мы видим?
А видим мы там только 56-bit DES, что соответствует 1DES, а вовсе не 3DES, как нам нужно.
Сперва я на это внимание не обратил, из-за чего потерял полчаса разбираясь, почему не устанавливается соединение. Решил, что возможно проблема в прошивке, пошел на ftp.dlink.ru и выяснил, что у меня последняя прошивка 1.53RU. Путем дальнейшего гугления из кэша гугла вытащил информацию, что в моей прошивке нет 3DES, значит надо откатиться на старую. Нашел версию 1.51 за 2008 год ftp.dlink.com/Gateway/di804HV/Firmware/di804HV_firmware_151.BIN, проапгрейдил, вернее, задаунгрейдил и вуаля — нужное нам 3DES появилось на нужной странице.
Ну а дальше все просто — выбираем DH Group — Group 2 (это тоже самое, что и modp1024, если для racoon2), encrypt algorithm — 3DES, Auth algorithm — SHA1, Life Time=28800 (необходимо проследить, чтобы все эти параметры совпадали с теми, которые у нас указаны в /usr/local/etc/racoon/racoon.conf. В конце не забываем выделить нужный Proposal ID в комбобоксе, нажать Add to Proposal Index и после этого — Apply.
Возвращаемся назад и идем в IPSeс Proposal и заполняем там все необходимые поля:
Также добавляем это все по аналогии, сохраняем и переходим закладку Status->VPN Status:
Нажимаем Reconnect — и все, можно проверять работу канала:
Использованная литература:www.opennet.ru
forum.lissyara.suwww.google.ru
PS Данная статья была написана только лишь для того, чтобы облегчить установку данной связки FreeBSD D-Link DI-804HV, потому как в процессе настройки я регулярно на форумах натыкался на всевозможные проблемы в этой связке. Любые конструктивные замечания приветствуются.