Date: Thu, 2 Jul 2002 12:54:01 +0000 (UTC)
From: Shevtsov P. <paul@dongorbank.com>
Subject: Настройка IPSec между FreeBSD и Cisco
--------------------------------------------------------------
Настройка IPSec между FreeBSD и cisco
--------------------------------------------------------------
Организация IPSec tunnel's между FreeBSD - FreeBSD и
FreeBSD - Cisco.
Используем на FreeBSD gif интерфейс, на cisco tunnel ipip.
Для это на FreeBSD делаем нижеследующие действия
1. Добавляем (если нет) поддержку gif я ядро. Примечание: на версиях до 4.4R надо было
указывать количество устройств, которое необходимо.
pseudo-device dif [количество]
С версии 4.4R в этом нет необходимости.
pseudo-device gif
2. В rc.conf добавляем строку
gif_interfeces="gif0 gif1 gif[и так далее]"
(Сколько нам надо).
3. В rc.conf добавляем на каждый нужный нам gif следующую строку
gifconfig_gif[номер]="[realip.address.source.tunnel] [realip.address.destination.tunnel]"
Примечание: важно чтобы эти оба адреса были видны в сети, именно на них мы будем "приземлять"
сам туннель. Т.е. они должны друг друга пинговать (другими словами).
4. В rc.conf теперь добавляем уже сам tunnel
ifconfig_gif[номер]="inet [ip.address.source.tunnel]
[ip.address.destination.tunnel] netmask 255.255.255.252"
Внимание! Обратим внимание, что здесь поднимается по сути дела просто
point-to-point. Т.е. сеть размера /30 в CIDR нотации. Почему так. Ведь даже
на daemonnews приводят примеры, где маска берется 255.255.255.0 (по CIDR /24),
правда, там же сетуют, что таким образом можно объединять только сети
одинакового размера.
Еще один нюанс при этом в их примерах ip source и destination в туннеле берутся
прямо из сети, которая сидит на втором ethetrnet-е. А зачем?
А если у нас нет
второго интерфейса вообще на одном конце? Мы ведь все равно делаем свою
приватную сеть (как правило), так выделим тогда хоть, сколько адресов
специально для создания point-to-point туннелей, а в них будем раутить чего
хотим. На мой взгляд, так логичнее.
5. Собственно теперь в этот туннель с любого из концов его можно заворачивать
трафик.
С помощью gated в static это выглядит приблизительно так:
[ip.address.network.s] masklen [size] gw [ip.address.destination.tunnel] retain;
Ну и трафик в него заворачивать
[ip.address.network.s] [netmask] tunnel[номер]
Или в ip адрес
[ip.address.network.s] [netmask] [ip.address.destination.tunnel]
Теперь поднимаем IPSec между cisco и FreeBSD.
На cisco нужен IOS который поддерживает IPSec.
На FreeBSD в опции ядра добавить
options IPSEC
options IPSEC_ESP
options IPSEC_DEBUG
Для обмена ключами на FreeBSD ставим racoon.
Конфигурация ipsec на cisco:
crypto isakmp policy 1 (или другой номер)
hash md5
authentication pre-share
lifetime 3600
crypto isakmp key [секретная фраза] address [realip.address.destination.tunnel]
crypto ipsec transform-set [имя transform-а] esp-des esp-md5-mac
mode transport
crypto map [имя map] 1 (или другой номер) ipsec-isakmp
set peer [realip.address.destination.tunnel]
set transform-set [имя transform-а]
set pfs group1
match address [номер access-list-а]
access-list [номер access-list-а] permit ip host [realip.address.source.tunnel]
host [realip.address.destination.tunnel]
И на нужные нам интерфейсы говорим
crypto map [имя map]
(Это должен быть сам туннель и физический интерфейс, через который этот
туннель работает).
После этого начинаем настраивать FreeBSD.
Сначала делаем записи в rc.conf
ipsec_enable="YES"
И создаем файл в каталоге /etc с именем ipsec.conf Пишем туда нечто вроде
flush;
spdflush;
spdadd [realip.address.source.tunnel] [realip.address.destination.tunnel] any -P
out ipsec esp/transport/[realip.address.source.tunnel]-[realip.address.destination.tunnel]/require;
spdadd [realip.address.destination.tunnel] [ralip.address.source.tunnel] any -P
in ipsec esp/transport/[realip.address.destination.tunnel]-[realip.address.source.tunnel]/require;
Затем ставим из /usr/ports/secure - racoon. И настраиваем его.
Прописываем в /usr/local/etc/racoon/psk.txt
[ip.addrees.peer] [секретная фраза]
А файл конфигурации racoon.conf делаем приблизительно такого вида:
------------------------------------------------------------------
# "path" must be placed before it should be used.
# You can overwrite which you defined, but it should not use due to confusing.
path include "/usr/local/etc/racoon" ;
#include "remote.conf" ;
# search this file for pre_shared_key with various ID key.
path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;
# racoon will look for certificate file in the directory,
# if the certificate/certificate request payload is received.
#path certificate "/usr/local/etc/cert" ;
# "log" specifies logging level. It is followed by either "notify", "debug"
# or "debug2".
log notify;
# "padding" defines some parameter of padding. 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 to all
# available interface addresses.
listen
{
#isakmp ::1 [7000];
#isakmp 202.249.11.124 [500];
#admin [7002]; # administrative's port by kmpstat.
#strict_address; # required all addresses must be bound.
}
# Specification of default various timer.
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;
}
Теперь перегружаем машину (предварительно убедившись, что racoon.sh живет в /usr/local/etc/rc.d).
И делаем trace или ping с адреса сети, который должен шифроваться на аналогичный адрес другой сети.
Все должно состояться. Если не работает смотреть racoon.conf и debug crypto isakmp
debug crypto ipsec.
До того как оно заработает. IPSec между FreeBSD - FreeBSD поднимается аналогично.
P.S. Отдельная благодарность yk@donbass.net за потраченое время. :)
619 Прочтений • [Настройка IPSec между FreeBSD и Cisco (bsd ipsec crypt tunnel vpn cisco)] [08.05.2012] [Комментариев: 0]