antiCisco blogs


блоги по технологиям и оборудованию cisco от инструкторов

Опубликовано 30 Январь , 2011

Сегодня мы поговорим о хорошо широко применяемой UNIXоидами, но сравнительно малоизвестной цисководам технологии построения виртуальных частных сетей: OpenVPN.

Что собой представляет?

Представляет собой протокол и его реализацию, которую добывают на openvpn.net. Реализация распространяется под свободной лицензией.

Есть еще коммерческая версия с рядом дополнительных возможностей (в частности, автонастройка клиентов), но здесь мы ее не рассматриваем.

Работает на почти любом UNIX (Linux, *BSD, Mac OS X) и Windows. Встроен во Vyatta.

Что умеет?

Протокол работает на сеансовом уровне и использует TCP или UDP. Аутентификация происходит с помощью TLS, шифрование с помощью SSL.

Преимущества:

  • Может использовать любой порт TCP или UDP, благодаря чему легко проходит через МСЭ и NAT.
  • Может инкапсулировать как сетевой, так и канальный уровень. В последнем случае может быть объединен в мост с другими интерфейсами.
  • Может работать как в site-to-site, так и клиент-серверном режиме.
  • Site-to-site позволяет одной из сторон иметь динамический внешний адрес.
  • В режиме сервера умеет устанавливать клиенту маршруты до своих сетей.
  • Поддерживает различные механизмы аутентификации (Pre-shared key, x.509; по логину и паролю в RADIUS, LDAP или системных аккаунтах).
  • Сравнительно просто настраивается и отлаживается.

Недостатки:

  • Протокол до сих пор не имеет своего RFC или иного стандарта.
  • Не поддерживается распространенными аппаратными маршрутизаторами (Cisco, Juniper etc.).
  • Требует установки дополнительного ПО на клиентов (установка тривиальна, но все таки).

Пример 1: site-to-site с pre-shared key

Начнем с простого примера: настроим туннель между Vyatta и машиной с RedHat Linux со статическим ключом.

Vyatta

Сгенерируем ключ:

vyatta@vyatta# run vpn openvpn-key generate /etc/tunnel.key     
Generating OpenVPN key to /etc/tunnel.key
Your new local OpenVPN key has been generated

Создаем интерфейс. У OpenVPN на каждый туннель создается отдельный виртуальный интерфейс (что, в общем, удобно с позиции применения на него МСЭ).

edit interfaces openvpn vtun0
set mode site-to-site
set local-address 192.168.64.1    # Адрес виртуального интерфейса туннеля на нашей стороне
set remote-address 192.168.64.2 # Адрес виртуального интерфейса на другой стороне
set local-host 10.91.17.240          # Адрес, на который принимать соединения
set protocol tcp-passive               # Считаем себя принимающей стороной TCP-соединения
set local-port 5555                        # Порт, на котором слушать соединения
set shared-secret-key-file /etc/tunnel.key # Указываем путь к файлу с ключом

Несколько слов об опции protocol. Она может быть tcp-passive (ждать TCP-соединений), tcp-active (инициировать TCP-соединение) или UDP. В случае с UDP должны быть указаны обе опции local-host и remote-host. Сторона типа tcp-active может иметь только remote-host, сторона tcp-passive только local-host.

Если опция port не установлена, то по умолчанию используется порт 1194. Сторона типа tcp-passive не может иметь remote-port.

Linux

Перемещаем файл с ключом каким-нибудь безопасным методом, например, по SCP. Хотя можно просто прочитать (cat /etc/tunnel.key) и вставить в редактор на удаленной машине, файлы ключей текстовые.

sudo scp /etc/tunnel.key root@10.91.17.10:/etc/openvpn

Теперь пишем конфиг клиента:

dev-type tun   # Указывает инкапсуляцию сетевого уровня, на Vyatta так по умолчанию
dev tun0         # Указываем имя интерфейса
ping 10           # Посылать echo-запрос каждые десять секунд
ping-restart 60 # Переподключаться, если не проходит в течение минуты
ifconfig 192.168.64.2 192.168.64.1 # Первый адрес локальный, второй удаленный
rport 5555       # Порт на удаленной стороне
proto tcp-client
remote 10.91.17.240
secret /etc/openvpn/tunnel.key


В конфиг можно добавить опцию daemon, в этом случае процесс уйдет в фоновый режим. На этапе настройки и отладки можно ее не включать и видеть весь вывод прямо в консоли.

openvpn /etc/openvpn/tunnel.conf 
Sun Jan 30 02:49:59 2011 OpenVPN 2.1.1 i386-redhat-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] built on Jan 26 2010
Sun Jan 30 02:49:59 2011 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Sun Jan 30 02:50:00 2011 TUN/TAP device tun0 opened
Sun Jan 30 02:50:00 2011 /sbin/ip link set dev tun0 up mtu 1500
Sun Jan 30 02:50:00 2011 /sbin/ip addr add dev tun0 local 192.168.64.2 peer 192.168.64.1
Sun Jan 30 02:50:00 2011 Attempting to establish TCP connection with 10.91.17.240:5555 [nonblock]
Sun Jan 30 02:50:01 2011 TCP connection established with 10.91.17.240:5555
Sun Jan 30 02:50:01 2011 TCPv4_CLIENT link local: [undef]
Sun Jan 30 02:50:01 2011 TCPv4_CLIENT link remote: 10.91.17.240:5555
Sun Jan 30 02:50:01 2011 Peer Connection Initiated with 10.91.17.240:5555
Sun Jan 30 02:50:02 2011 Initialization Sequence Completed

Соединение поднялось, и ему теперь соответствует интерфейс tun0. Можно убедиться в том, что трафик по нему ходит:

# ping 192.168.64.1
PING 192.168.64.1 (192.168.64.1) 56(84) bytes of data.
64 bytes from 192.168.64.1: icmp_seq=1 ttl=64 time=50.4 ms
64 bytes from 192.168.64.1: icmp_seq=2 ttl=64 time=1.21 ms

На другой стороне логи подключения можно увидеть в «show log|match openvpn».

Заключение

OpenVPN представляет собой достаточно удобный и гибкий протокол. Его можно применять как для дешевых VPN между сетями, так и для вполне серьезных случаев удаленного доступа.

Дальше, надеюсь, рассмотрим клиент-серверный режим и VPN канального уровня.

 

Метки: ,
Опубликовано: Vyatta

 

3 комментария “OpenVPN, часть 1”

comment rss - Trackback

  1. Ты закрыл мой пробел:) Я про OpenVPN кроме порта 1194 ничего и не знал 🙂

    Теперь жду конфига с L2 туннелированием 🙂

  2. zubastiy:

    добр день.

    openVPN классный. Учитывая что встроен в vyatta — классный дважды. Учитывая что в vyatta есть quagga и можно гонять ospf — трижды ура.

    интересно было бы попробовать сеть офис + много удаленных филиалов на vyatta. компрессия (для openVPN)опять же, позволит более эффективно использовать каналы. прямо кандидат в аналоги cisco + dmvpn

    сайт то мультисайт — такая конфигурация на openVPN возможна?

    не тестировали компрессию траффика на предмет производительности (потреблению проца)?

  3. zubastiy: Да, в режиме сервера он может терминировать на себе много туннелей. В том числе гонять трафик между клиентами. С DMVPN у такой конфигурации, правда, мало общего.

    Насчет сжатия — если честно, то ни разу не пробовал. Вроде оно должно быть проще шифрования для проца.

» Оставить комментарий

Вы должны войти чтобы прокомментировать.