Yvision.kz
kk
Разное
Разное
399 773 постов42 подписчика
Всяко-разно
0
06:53, 26 сентября 2009

Связь между сетями ISA и FreeBSD с помощью IPSEC

Достаточно интересная задачка по соединению сетей - на одной стороне шлюзом 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 минут, посему только скрины без комментариев

Blog post image

Blog post image

Blog post image

Blog post image

Blog post image

Blog post image

Blog post image

Blog post image

Blog post image

Итак..с ISA все...

FreeBSD - необходимо -

в ядре

option IPSEC

device crypto

Blog post image

пересобираем ядро

ставим ipsec-tools -

Blog post image

создаем директории для файлов racoon -

/usr/local/erc/racoon - нормальный такой выбор

/usr/local/etc/racoon/cert - для сертификатов (в будущем) и файлов presharedkeys

создем файл ipsec.conf в /etc - для политик IPSEC

копируем из /usr/local/share/examples/ipsec-tools два файла

Blog post image

конфиг racoon в racoon и psk.txt в cert

рихтуем под себя

psk.txt - наш файл ключей - IP адрес удаленной стороны и ключ

Blog post image ПРАВА НА ФАЙЛ 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

Blog post image

А теперь пробуем взлететь со всем этим - запускаемся в отладке

Blog post image

смутило пару вещей - потом покопаюсь...

ну и пробуем пробить туннель - пингуем из сети 10.0.0.0/24 адрес в сети 172.16.172.0/24

первый пакет потерялся - устанавливалась связь, зато потом все супер

Blog post image

со стороны FreeBSD

Blog post image

ну и чтобы окончательно убедиться в том что все пашет - ssh соединение на ВНУТРЕННИЙ адрес FreeBSD

Blog post image

Смотрим на ISA

Blog post image

ну вроде все... быстро (не совсем безопасно, не совсем правильно :) ). так сказать костыль на пару дней.

P.S.

Заметил неприятную вещь - соединение устанавливается только если инициатор в сети за ISA. Если попробовать соединиться инициировав соединение из сети за freebsd, то ничего не получится....

После ночи капания в google вроде как понял, что косяк в реализации NAT-T IPSEC в ISA.

Побороть пока не смог :( обыдно да...

0
299
5