Объединение центрального офиса с филиалами, складами и т.д. в единую сеть - это то, с чем приходится довольно часто сталкиваться администратору сети. Объединять сети можно «хардвардным» способом на железяках (Cisco, D-Link, etc) и «программным» на серваках под разными ОС (Windows, Linux, BSD). При наличии сервера на железяки можно не разоряться, а воспользоваться тем что есть, тем более что функционал в этом случае будет более широкий. В связи с планирующимся расширением фирмы, я решил заранее выбрать и обкатать наиболее подходящую схему объединения офисов. Немного погуглив, остановился на OpenVPN, как на более защищенном и не особо замороченом способе. Дистрибутивом взял Ubuntu Server 8,04 i386 т.к. очень хотелось пощупать Убунту в виде сервера и посмотреть на что она способна. Экспериментировал в виртуальных сетях под VMware Server.
Схема соединения сетей следующая:
192.168.120.0 <serv1> 10.0.0.0 <serv2> 192.168.110.0
На каждом сервере поднят межсетевой экран iptables и nat. Для того, чтобы серверы могли устанавливать ПО из реальной глобальной сети, я подключал к ним третий bridged интерфейс. Далее в конфигурационных файлах я его упоминать не стал.
После нетривиальной установки, которую не буду описывать, конфигурируем сетевые интерфейсы:
# cat /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.0.0.10 netmask 255.255.255.0 auto eth1 iface eth1 inet static address 192.168.120.20 netmask 255.255.255.0
Делаем из него роутер путем добавления в /etc/sysctl.conf строчки:
net.ipv4.ip_forward=1
Настраиваем путь к репозиторям из которых будем устанавливать ПО:
# cat /etc/apt/sources.list deb http://ru.archive.ubuntu.com/ubuntu/ hardy main contrib non-free restricted universe multiverse deb-src http://ru.archive.ubuntu.com/ubuntu/ hardy main contrib non-free restricted universe multiverse deb http://ru.archive.ubuntu.com/ubuntu/ hardy-updates main contrib non-free restricted universe multiverse deb-src http://ru.archive.ubuntu.com/ubuntu/ hardy-updates main contrib non-free restricted universe multiverse deb http://ru.archive.ubuntu.com/ubuntu/ hardy-security main contrib non-free restricted universe multiverse deb-src http://ru.archive.ubuntu.com/ubuntu/ hardy-security main contrib non-free restricted universe multiverse
Дальше устанавливаем дополнительное ПО, предварительно обновившись:
# aptitude update # aptitude upgrade # aptitude install console-cyrillic mc traceroute openvpn vsftpd
Для работы OpenVPN необходимо создать сретификаты и конфигурационный файл openvpn.conf.
Для генерирования сертификатов копируем каталог easy-rsa/2.0/ в /etc/openvpn/2.0/
# cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/
Заполняем шаблонный файл с пременными vars. Я заполнил только последнюю часть с данными о фирме, городе и т.п.
Генерируем сертификаты:
# ./build-dh # ./pkitool --initca # ./pkitool --server server # ./pkitool client
Созданные сертификаты должны появиться в вышеуказанной папке, если конечно вы ее предварительно создали.
Дальше пишем конфиг сервера. Читал разные статьи на эту тему, наступал на грабли, но в итоге плюнул и без проблем все сделал по примерам, которые лежат в папке /usr/share/doc/openvpn/examples/sample-config-files. В итоге получился такой конфиг:
#cat /etc/openvpn/openvpn.conf dev tun tls-server proto udp port 3333 comp-lzo persist-tun persist-key # указываем узловые точки виртуальной сети ifconfig 10.1.0.1 10.1.0.2 # добавляем маршрут к локальной сети филиала route 192.168.110.0 255.255.255.0 dh /etc/openvpn/2.0/keys/dh1024.pem ca /etc/openvpn/2.0/keys/ca.crt cert /etc/openvpn/2.0/keys/server.crt key /etc/openvpn/2.0/keys/server.key log /var/log/openvpn.log verb 3
Все готово, делаем рестарт сервера и убеждаемся в том, что все ОК:
# /etc/init.d/openvpn restart # ps -ely | grep openvpn
Для полного счастья добавляем правила в iptables (приведенный ниже вариант может отличаться, в зависимости от вашей конфигурации):
iptables -A INPUT -p udp -dport 3333 -j ACCEPT iptables -A INPUT -i tun0 -j ACCEPT iptables -A FORWARD -i tun0 -j ACCEPT iptables -A FORWARD -o tun0 -j ACCEPT
В плане установки и настройки системы проделываем то же самое, что и с предыдущем сервером.
# cat /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.0.0.20 netmask 255.255.255.0 auto eth1 iface eth1 inet static address 192.168.110.10 netmask 255.255.255.0
Сертификаты нужно скопировать с центрального сервера. Я для этих целей поднимал там ftp.
dev tun tls-client remote 10.0.0.10 proto udp port 3333 comp-lzo persist-tun persist-key # указываем узловые точки виртуальной сети ifconfig 10.1.0.2 10.1.0.1 # добавляем маршрут к локальной сети офиса route 192.168.120.0 255.255.255.0 dh /etc/openvpn/2.0/keys/dh1024.pem ca /etc/openvpn/2.0/keys/ca.crt cert /etc/openvpn/2.0/keys/client.crt key /etc/openvpn/2.0/keys/client.key log /var/log/openvpn.log verb 3
Запускаем:
# /etc/init.d/openvpn restart
Правим фаервол:
iptables -A INPUT -i tun0 -j ACCEPT iptables -A FORWARD -i tun0 -j ACCEPT iptables -A FORWARD -o tun0 -j ACCEPT
Пингуем хосты противоположных сетей по их внутренним адресам с обоих серверов и с клиентских машин каждой локальной сети.
Итоговые впечатления: все стабильно, секьюрно и удобно, а Ubuntu Server может быть достойной заменой Debian.