Ключевые слова:vpn, cisco, freebsd, gif, tunnel, ipsec, (найти похожие документы)
From: one@sysadmins.ru
Newsgroups: email
Date: Mon, 9 Dec 2003 14:31:37 +0000 (UTC)
Subject: Установка и настройка маршрутизатора удаленного филиала компании.
Оригинал: http://npo.businessgrad.ru/~alexey/freebsd.html
Установка и настройка маршрутизатора удаленного филиала компании на
основе FreeBSD
e-mail: one@sysadmins.ru
Задача: установить и настроить машрутизатор, имеющий защищенный с
помощью IPsec туннель с головным офисом (маршрутизатор Cisco) и
имеющий выход в Интернет через собственного провайдера.
Устанавливаем FreeBSD 4.8 на машину с двумя сетевыми платами,
определяем в настройках конфигурации сетевых плат:
rl0: 213.85.11.100/27 - подключение к провайдеру
rl1: 192.168.100.1/24 - подключение к локальной сети филиала
задаем в файле /etc/resolv.conf адреса днс-серверов провайдера. В
файле /etc/rc.conf прописываем путь по умолчанию:
defaultrouter="213.85.11.97"
Убеждаемся в наличии Интернета.
ping www.rambler.ru
Если все работает, идем дальше.
cd /sys/i386/conf
cp GENERIC MYKERN
ee MYKERN
Переконфигурируем ядро. Намнеобходима поддержка:
options IPFIREWALL
options IPDIVERT ; для работы NAT'а и файрволла
options IPSEC
options IPSEC_ESP
options IPSEC_DEBUG ; для работы IPSEC
pseudo-device gif ; для работы туннеля
Убрав все лишнее из ядра, и немного его поднастроив, делаем команды:
cd /usr/src
make buildkernel KERNCONF=MYKERN
make installkernel KERNCONF=MYKERN
Если ядро установилось нормально, добавляем в /etc/rc .conf строки:
firewall_enable="YES"
firewall_type="/etc/firewall.conf"
natd_enable="YES"
natd_flags="-u -d -a 213.85.11.100" ; включение динамического
НАТирования на внешний адрес 213.85.11.100 всех пакетов с адресами
незарегестрированных сетей (192.168.х.х, 172.16.х.х, 10.х.х.х)
gateway_enable="YES"
Внимание: необходимо отдавать себе отчет, что настройку файрволла
лучше производить с физической консоли, иначе вы рискуете оказаться
отключенным от консоли правилом по умолчанию 65535 deny all from any
to any.
Редактируем файл /etc/firewall.conf:
; заворачивать в демон ната все пакеты из внутренней сети
add 100 divert natd all from 192.168.100.0/24 to any out recv rl1 xmit rl0
; заворачивать в демон все пакеты, пришедшие снаружи не с адресов нашей сети (головного офиса)
add 200 divert natd all from not 192.168.0.0/16 to 213.85.11.100 recv rl0
add 65000 allow all from any to any
Перезагружаемся.
Проверям с клиентской машины - ping www.rambler.ru
NAT работает, запросы успешно проходят через роутер и возвращаются
обратно.
Если не так, можно запустить natd с ключом -v и наблюдать на консоли
отладочную информацию.
Настало время делать туннель.
Убеждаемся, что с роутера пингуется наша циска в центральном офисе:
ping 80.31.234.98
В файл rc .conf прописываем параметры туннеля:
gif_interfaces="gif0"
gifconfig_gif0="213.85.11.100 80.31.234.98"
ifconfig_gif0="inet 192.168.5.2 192.168.5.1 netmask 255.255.255.252"
Осталось внести маршрутную информацию о сети офиса:
route add -net 192.168.10 -netmask 255.255.255.0 192.168.5.2
Я прописываю эту команду в файл /etc/rc.local для автоматического
выполнения при загрузке. Вы также можете использовать динамическую
маршрутизацию.
На стороне циски прописываем:
interface Tunnel70
description test-tunnel1
ip address 192.168.5.1 255.255.255.252
tunnel source FastEthernet0/0.9 (или IP-адресцисковскогоинтерфейса)
tunnel destination 213.85.11.100
tunnel mode ipip
в конфигурационном режиме циски делаем:
iproute 192.168.100.0 255.255.255.0 Tunnel70 , т.е. направляем в
туннель весь трафик, относящийся к подсети филиала.
Туннель должен работать. Однако вот незадача: все исходящие из
интерфейса rl 0 пакеты идут на обработку демону natd , который их
отбрасывает, потому что они имеют адрес назначения из невнешней сети.
Добавляем в /etc/firewall.confтакие строки:
add 10 allow ip from 192.168.0.0/16 to 192.168.0.0/16
add 20 allowipfrom 80.31.234.98 to 213.85.11.100
делаем ipfw flush && ipfw /etc/firewall
Проверяем настройку правил файроволла: ipfw list
0010 allow ip from 192.168.0.0/16 to 192.168.0.0/16
0020 allow ip from 80.31.234.98 to 213.85.11.100
0100 divert natd all from 192.168.100.0/24 to any out recv rl1 xmit rl0
0200 divert natd all from not 192.168.0.0/16 to 213.85.11.100 recv rl0
65000 allow all from any to any
65535 deny ip from any to any
Пингуем с роутера: ping 192.168.5.1, все ок
Пингуем с клиентской машины ping 192.168.10.1 и ping www.rambler.ru
Туннель установился и работает. Осталось его зашифровать.
В FreeBSD необходимо установить программу raccoon. Можно собрать из
портов:
cd /usr/ports/security/raccoon
make
make install
Либо установить из пакаджей. /stand/sysinstall - configure - packages.
Я предпочел второй вариант.
Прописываем в rc.conf:
ipsec_enable="YES"
Создаем файл /etc/ipsec.conf:
flush;
spdflush;
spdadd 213.85.11.100 80.31.234.98 any -P out ipsec esp/transport/213.85.11.100-80.31.234.98/require;
spdadd 80.31.234.98 213.85.11.100 any -P in ipsec esp/transport/80.31.234.98-213.85.11.100/require;
Заходим в /usr /local/etc/raccoon. Видим там несколько файлов примеров
конфигурации.
Создаем новый файл psk.txt в котором всего одна строка:
80.31.234.98 secret_phrase
Делаем файл конфигурации cp raccoon.conf.dist raccoon.conf
Редактируем его:
path include "/usr/local/etc/racoon" ;
path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;
log notify;
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 202.249.11.124 [500];
#admin [7002]; # administrative's port by kmpstat.
#strict_address; # required all addresses must be bound.
}
timer
{
counter 5; # maximum trying count to send.
interval 20 sec;# maximum interval to resend.
persend 1; # the number of packets per a send.
phase1 30 sec;
phase2 15 sec;
}
remote anonymous
{
exchange_mode main,aggressive;
doi ipsec_doi;
situation identity_only;
my_identifier user_fqdn "sakane@kame.net";
peers_identifier user_fqdn "sakane@kame.net";
nonce_size 16;
lifetime time 1 min; # sec,min,hour
initial_contact on;
support_mip6 on;
proposal_check obey; # obey, strict or claim
proposal {
lifetime time 3600 sec; # sec,min,hour
encryption_algorithm des;
hash_algorithm md5;
authentication_method pre_shared_key ;
dh_group 1 ;
}
}
sainfo anonymous
{
pfs_group 1;
lifetime time 3600 sec;
encryption_algorithm des ;
authentication_algorithm non_auth;
compression_algorithm deflate ;
}
запускаем raccoon строкой:
raccoon -v -f /usr/local/etc/raccoon/raccoon.conf -l /var/log/raccoon.log
Просматриваем лог на предмет подозрительностей. Если таковых нет,
прописывем эту команду в автозапуске /etc/ rc .local (можно убрать
ключ -v, чтобы уменьшить количество сообщений от демона)
Конфигурация ipsec на cisco:
crypto isakmp policy 1 (или другой номер)
hash md5
authentication pre-share
lifetime 3600
crypto isakmp key secret_phrase address 213.85.11.100
crypto ipsec transform-set test_trans esp-des esp-md5-mac
mode transport
crypto map test_map 1 (или другой номер) ipsec-isakmp
set peer 213.85.11.100
set transform-set test_trans
set pfs group1
match address 133
access-list 133 permit ip host 80.31.234.98 host 213.85.11.100
Interface tunnel 70
crypto map test_map
Interface FastEthernet 0/0.9
crypto map test_map
Проверяем работу туннеля и НАТа обычными способами: ping, tracert в
сторону офиса и Интернета.