Инструменты пользователя

Инструменты сайта


linux:openvpn:2office

Это старая версия документа!


Объединение офисов через интернет по VPN

Объединение центрального офиса с филиалами, складами и т.д. в единую сеть - это то, с чем приходится довольно часто сталкиваться администратору сети. Объединять сети можно «хардвардным» способом на железяках (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 интерфейс. Далее в конфигурационных файлах я его упоминать не стал.

Устанавливаем сервер (serv1)

После нетривиальной установки, которую не буду описывать, конфигурируем сетевые интерфейсы:

      # 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:

      # cd /usr/share/doc/openvpn/examples/easy-rsa/2,0

Заполняем шаблонный файл с пременными vars. Я заполнил только последнюю часть с данными о фирме, городе и т.п., плюс изменил директорию с ключами:

      export KEY_DIR="/etc/openvpn/keys"

Генерируем сертификаты:

      # ./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/keys/dh1024.pem
      ca /etc/openvpn/keys/ca.crt
      cert /etc/openvpn/keys/server.crt
      key /etc/openvpn/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

Установка клиента (serv2)

В плане установки и настройки системы проделываем то же самое, что и с предыдущем сервером.

      # 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/keys/dh1024.pem
      ca /etc/openvpn/keys/ca.crt
      cert /etc/openvpn/keys/client.crt
      key /etc/openvpn/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.

linux/openvpn/2office.1329811629.txt.gz · Последнее изменение: 2012/02/21 12:07 — linko22@gmail.com