Достаточно интересная задачка по соединению сетей - на одной стороне шлюзом ISA 2006 на другой шлюзом FreeBSD. Идеологически правильно создавать IPSEC соединение site-to-site - так пишут на M$. Ок...супер...но нигде нет про FreeBSD, везде только Linux :) Не беда...поправим - итак быстрое howto соединения сетей....
дано -
сеть 10.0.0.0/24 - шлюз ISA - внешний 1.1.1.252
сеть 172.16.172.0/24 - шлюз FreeBSD внешний 1.1.1.150
необходимо -
связать сети между собой и шифровать канал
Лирика - делаю на preshared key пока. С сертифкатами надо конкретно вдуплить...что и как....
На ISA все решается мастером за 5 минут, посему только скрины без комментариев
Итак..с ISA все...
FreeBSD - необходимо -
в ядре
option IPSEC
device crypto
пересобираем ядро
ставим ipsec-tools -
создаем директории для файлов racoon -
/usr/local/erc/racoon - нормальный такой выбор
/usr/local/etc/racoon/cert - для сертификатов (в будущем) и файлов presharedkeys
создем файл ipsec.conf в /etc - для политик IPSEC
копируем из /usr/local/share/examples/ipsec-tools два файла
конфиг racoon в racoon и psk.txt в cert
рихтуем под себя
psk.txt - наш файл ключей - IP адрес удаленной стороны и ключ
ПРАВА НА ФАЙЛ 0600 для root - иначе не запустися!
racoon.conf - собственно файл конфигурации. Самый простой вариант без наворотов
path include "/usr/local/etc/racoon";
path pre_shared_key "/usr/local/etc/racoon/cert/psk.txt";
log debug;
# "padding" defines some padding parameters. You should not touch these.
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.
}
# if no listen directive is specified, racoon will listen on all
# available interface addresses.
listen
{
isakmp 1.1.1.150 [500];
}
# 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 1.1.1.252
{
exchange_mode aggressive,main;
doi ipsec_doi;
situation identity_only;
my_identifier address 1.1.1.150;
peers_identifier address 1.1.1.252;
proposal_check obey; # obey, strict, or claim
proposal {
encryption_algorithm 3des;
hash_algorithm md5;
authentication_method pre_shared_key;
lifetime time 30 sec;
dh_group 2;
}
}
sainfo 1.1.1.150 any address 1.1.1.252 any
{
pfs_group 2;
lifetime time 36000 sec;
encryption_algorithm 3des;
authentication_algorithm hmac_md5;
compression_algorithm deflate;
}
sainfo anonymous
{
pfs_group 2;
lifetime time 60 min;
encryption_algorithm 3des;
authentication_algorithm hmac_md5;
compression_algorithm deflate;
}
и наконец ipsec.conf - указываем политики связи и шифрования
spdadd 172.16.172.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/1.1.1.150-1.1.1.252/require;
spdadd 10.0.0.0/24 172.16.172.0/24 any -P in ipsec esp/tunnel/1.1.1.252-1.1.1.150/require;
рихтуем rc.conf
racoon_enable="NO" - включаем racoon (пока NO, но как только все проверим ставим YES)
gif_interfaces="gif0" - описываем интерфейс через который идем в туннель
gifconfig_gif0="1.1.1.150 1.1.1.252" - создаем туннель
ifconfig_gif0="inet 172.16.172.252 10.0.0.252 netmask 255.255.255.0" какие сети связываем
ipsec_enable="YES" - шифрование
ipsec_file="/etc/ipsec.conf" - его конфиг
static_routes="MyContoso" - маршрут в другую сеть
route_MyContoso="10.0.0.0/24 -interface gif0" - куда и через кого
перегружаем FreeBSD смотрим наш gif0
А теперь пробуем взлететь со всем этим - запускаемся в отладке
смутило пару вещей - потом покопаюсь...
ну и пробуем пробить туннель - пингуем из сети 10.0.0.0/24 адрес в сети 172.16.172.0/24
первый пакет потерялся - устанавливалась связь, зато потом все супер
со стороны FreeBSD
ну и чтобы окончательно убедиться в том что все пашет - ssh соединение на ВНУТРЕННИЙ адрес FreeBSD
Смотрим на ISA
ну вроде все... быстро (не совсем безопасно, не совсем правильно :) ). так сказать костыль на пару дней.
P.S.
Заметил неприятную вещь - соединение устанавливается только если инициатор в сети за ISA. Если попробовать соединиться инициировав соединение из сети за freebsd, то ничего не получится....
После ночи капания в google вроде как понял, что косяк в реализации NAT-T IPSEC в ISA.
Побороть пока не смог :( обыдно да...