Pull to refresh

FreeBSD и D-Link DI-804HV через IPSEC

System administration *
Sandbox
Хочу рассказать об одном из своих первых опытов общения с 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.

image

Попадаем в следующие настройки и заполняем все поля согласно нашим начальным условиям:

image

После заполнения этих данных нажимаем Apply и после перегрузки страницы нам надо зайти на IKE Proposal Index, щелкаем на кнопку Select IKE Proposal и что же мы видим?

image

А видим мы там только 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 появилось на нужной странице.

image

Ну а дальше все просто — выбираем 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 и заполняем там все необходимые поля:

image

Также добавляем это все по аналогии, сохраняем и переходим закладку Status->VPN Status:

image

Нажимаем Reconnect — и все, можно проверять работу канала:

image

Использованная литература:
www.opennet.ru
forum.lissyara.su
www.google.ru

PS Данная статья была написана только лишь для того, чтобы облегчить установку данной связки FreeBSD <-> D-Link DI-804HV, потому как в процессе настройки я регулярно на форумах натыкался на всевозможные проблемы в этой связке. Любые конструктивные замечания приветствуются.
Tags:
Hubs:
Total votes 17: ↑16 and ↓1 +15
Views 16K
Comments Comments 8