Установка и настройка IPSec туннеля на FreeBSD.

Предположим, вам нужно объединить 2 различных сети, находящихся в разных офисах (возможно даже в разных городах), причем так, чтобы была возможность получить доступ к открытым для доступа из сети папкам на рабочих станциях с ОС от Microsoft, сетевым принтерам. Чтобы была возможность полноценно работать с сетевым окружением в системах от Microsoft между двумя офисами за приемлемую цену и с невысокими временными издержками. Помимо этого, допустим, вам нужно иметь web-сервер и почтовый сервер. Этого можно добиться, соединив каждый из офисов с интернет, скажем, по xDSL технологии, что сравнительно не дорого для предлагаемых скоростей в 1-7 Мбит/с.

В каждой из двух сетей установим по одной машине на FreeBSD 4.2-STABLE, которые будут выполнять роль межсетевого экрана (firewall) и шлюза в интернет. Т.к. эти машины будут иметь постоянное соединение с интернет, а также благодаря надежности ОС FreeBSD, на них следует установить почтовые и web-сервера (если необходимо), а также Samba-сервер (см. рис. 1). Шлюз, обозначенный bsd1 будет выполнять роль контроллера домена для Windows, первичного Wins-сервера, а также мастер-браузера для домена MS, который мы назовем scanningcomp.

Машина bsd1 с FreeBSD 4.2 имеет внутренний адрес 192.168.1.254, машина bsd2 с FreeBSD 4.2 имеет внутренний адрес 192.168.2.254. Диапазоны 192.168.x.x предназначены для внутреннего использования и их обычно назначают во внутренних сетях. Внешние IP-адреса будут являться конечными точками для организации VPN. Предположим, что внешние адреса будут 172.16.1.254 и 172.17.1.254 для bsd1 и bsd2 соответственно.

IPSec туннель на FreeBSD

IPSec туннель на FreeBSD

Соединение с Internet.

Предположим, что стоит некий DSL модем (например от Cisco), который передает ваши пакеты по PPP (или любому другому протоколу) провайдеру. Пусть как bsd1, так и bsd2 подсоединены каждый к своему модему через сетевой интерфейс rl0. Соответственно, в файле /etc/rc.conf должен быть прописан для данного интерфейса внешний адрес.

Настройка сети Microsoft.

Для того, чтобы работать с сетью Microsoft, пользоваться открытыми для доступа из сети папкам на рабочих станциях с ОС от Microsoft, сетевыми принтерами между двумя сетями на обе машины с FreeBSD установлена Samba 2.0.7, однако рекомендуем взять последнюю версию пакеты под FreeBSD (например, версию 2.0.10), в основном из-за соображений безопасности. На обеих машинах не создавались никакие открытые по сети ресурсы, они обеспечивают только вход в сеть, сервисы WINS для двух сетей 192.168.1.0 и 192.168.2.0. bsd1 сконфигурирован как основной контроллер домена (primary domain controller) и как WINS сервер для обоих сетей. bsd2 сконфигурирован как мастер-браузер для своей сети и как прокси WINS-сервер с основным сервером bsd1.

Все компьютеры с Windows сконфигурированы получать IP адрес от bsd1 и bsd2 через DHCP сервер, установленный на каждой из FreeBSD-машин. DHCP сервера сконфигурированы обслуживать только внутренние сетевые интерфейсы. Они также помимо адреса выдают свои адреса в качестве шлюза по умолчанию (default gateway), широковещательные адреса и адрес сервера имен netbios — 192.168.1.254.

bsd1 сконфигурирован в качестве почтового сервера, соответственно, на всех машинах с Windows в Microsoft Outlook прописан в качестве SMTP и POP3 сервера его адрес 192.168.1.254. В качестве обслуживающей POP-клиентов программы на bsd1 установлен qpopper (/usr/ports/mail/qpopper).

Заметим, что для того, чтобы нормально функционировала почта, внешний адрес bsd1 должен быть прописан в MX записях зоны, которую он обслуживает.

На обоих машинах также был установлен и настроен named для обслуживания DNS запросов, перенаправляя их к DNS серверу провайдера.

На машину bsd1 установлен Webmin для управления пользователями и сконфигурирован таким образом, что smbpasswd устанавливается равным паролю unix, т.е. оба пароля одинаковы.

Конфигурация ядра FreeBSD 4.2-STABLE

Обе машины с FreeBSD должны быть сконфигурированы в качестве межсетевых экранов (firewalls) для защиты внутренних сетей и должны иметь опции IPSec для организации туннеля. Посему, в конфигурации ядра должны быть следующие опции (конфиг ядра находится в /usr/src/sys/i386/conf/).
# IP security
options IPSEC
options IPSEC_ESP
options IPSEC_DEBUG

# Псевдо-интерфейс для тунеля
pseudo-device gif 4

# Berkeley packet filter для dhcp.
pseudo-device bpf 4

# Firewall
options IPFIREWALL
options IPDIVERT
options IPFILTER
options IPFILTER_LOG

Для запуска firewall должны быть следующие опции в файле /etc/rc.conf:
gateway_enable=»YES»
defaultrouter=»172.x.1.110″ # — выдается провайдером — адрес шлюза в интернет
firewall_enable=»YES»
firewall_type=»open»
natd_enable=»YES»
natd_interface=»rl0″
named_enable=»YES»

Конфигурация туннеля IPSec FreeBSD 4.2-STABLE

Чтобы обеспечить автоматический обмен ключами для работы IPSec между двумя FreeBSD-машинами, загрузим и установим демон raacon, который находится в коллекции потров. Выполните:
#cd /usr/ports/security/racoon ; make all install clean

После установки конфигурационные файлы для racoon находятся в /usr/loca/etc/racoon/. Не будем менять конфигурацию по умолчанию, т.е. оставим файл /usr/local/etc/racoon/racoon.conf как есть. Отредактируем файл ключа (/usr/local/etc/racoon/psk.txt), добавив туда секретные ключи.
# /usr/local/etc/racoon/psk.txt
# IPv4/v6 addresses
#
192.168.1.254 testkey
192.168.2.254 testkey

Файл с ключами следует защитить и установить права 0600:
# chown root.wheel /usr/local/etc/racoon/psk.txt
# chmod 0600 /usr/local/etc/racoon/psk.txt

Для того, чтобы автоматически стартовать racoon при загрузке, создадим скрипт /etc/rc.local:
#!/bin/sh
#
# /etc/rc.local
#
# dhcp server
if [ -x /usr/local/sbin/dhcpd ]; then
echo -n «dhcpd »
/usr/local/sbin/dhcpd -cf /etc/dhcpd.conf rl1
fi
# webmin server
if [ -x /etc/webmin/start ]; then
echo -n «webmin »
/etc/webmin/start
fi
# racoon key exchange server
if [ -x /usr/local/sbin/racoon ]; then
echo -n «racoon »
/usr/local/sbin/racoon -f /usr/local/etc/racoon/racoon.conf
fi

Или же можно создать свои и поместить их /usr/local/etc/rc.d/. Для того, чтобы создать соединение и обеспечить маршрут между двумя сетями, создадим следующий скрипт /usr/local/etc/rc.d/tunnel.sh:
#!/bin/sh
#
BSD1_IP=»192.168.1.254″
BSD1_PUB_IP=»172.16.1.254″
BSD1_NET=»192.168.1.0/24″
BSD2_IP=»192.168.2.254″
BSD2_PUB_IP=»172.17.1.254″
BSD2_NET=»192.168.2.0/24″
GIF0=»gif0 inet»
GIFCONFIG=»/usr/sbin/gifconfig»
IFCONFIG=»/sbin/ifconfig»
HOSTNAME=`/bin/hostname`
NETMASK=»255.255.255.0″

echo «nStarting ipsec tunnel… »

case $HOSTNAME in
bsd1)
$GIFCONFIG $GIF0 $BSD1_PUB_IP $BSD2_PUB_IP
$IFCONFIG $GIF0 $BSD1_IP $BSD2_IP $NETMASK
/usr/sbin/setkey -FP
/usr/sbin/setkey -F
/usr/sbin/setkey -c << EOF
spdadd $BSD1_NET $BSD2_NET any -P out ipsec
esp/tunnel/${BSD1_IP}-${BSD2_IP}/require;
spdadd $BSD2_NET $BSD1_NET any -P in ipsec
esp/tunnel/${BSD2_IP}-${BSD1_IP}/require;
EOF
/sbin/route add $BSD2_NET $BSD1_IP
;;
bsd2)
$GIFCONFIG $GIF0 $BSD2_PUB_IP $BSD1_PUB_IP
$IFCONFIG $GIF0 $BSD2_IP $BSD1_IP $NETMASK
/usr/sbin/setkey -FP
/usr/sbin/setkey -F
/usr/sbin/setkey -c << EOF
spdadd $BSD2_NET $BSD1_NET any -P out ipsec
esp/tunnel/${BSD2_IP}-${BSD1_IP}/require;
spdadd $BSD1_NET $BSD2_NET any -P in ipsec
esp/tunnel/${BSD1_IP}-${BSD2_IP}/require;
EOF
/sbin/route add $BSD1_NET $BSD2_IP
;;
esac

Важно заметить, что конечными точками туннеля являются 192.168.1.254 и 192.168.2.254. Широковещательный трафик не будет проходить между сетями (это следует учесть при настройке Samba, т.к. следует использовать IP адрес сервера, а не широковещательный адрес для remote_announce в другой сети).

После перекомпиляции ядра и перезагрузке шлюзы при первом обращении из одной сети в другую установят шифрованное соединение между собой, по которому будет проходить межсетевой трафик.

Комментарии закрыты.