From: one@sysadmins.ru
Newsgroups: email
Date: Mon, 9 Dec 2003 14:31:37 +0000 (UTC)
Subject: Установка и настройка маршрутизатора удаленного филиала компании.
Установка и настройка маршрутизатора удаленного филиала компании на
основе 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 и наблюдать на консоли
отладочную информацию.
Настало время делать туннель.
Убеждаемся, что с роутера пингуется наша циска в центральном офисе:
Я прописываю эту команду в файл /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 в котором всего одна строка:
Просматриваем лог на предмет подозрительностей. Если таковых нет,
прописывем эту команду в автозапуске /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