OpenVPN: различия между версиями
(не показано 5 промежуточных версий 2 участников) | |||
Строка 5: | Строка 5: | ||
=== Простая симметричная схема === | === Простая симметричная схема === | ||
С точки зрения организации соединения, клиент и сервер поднимают между собой туннель. Функционально клиент от сервера не отличается. Однако применение дополнительных команд push '...' в конфигурационном файле одной стороны избавляет от явного их написания на другой. Рассмотрим простейший случай с авторизацией по статическому ключу. | С точки зрения организации соединения, клиент и сервер поднимают между собой туннель. Функционально клиент от сервера не отличается. Однако применение дополнительных команд push '...' в конфигурационном файле одной стороны избавляет от явного их написания на другой. Рассмотрим простейший случай с авторизацией по статическому ключу. Рисунок прилагается. [[Файл:OpenVPN.jpg]] | ||
Сначала создадим этот самый ключ: | Сначала создадим этот самый ключ: | ||
Строка 12: | Строка 12: | ||
Полученный в результате файл поместим в нужное место (будет явно указано в конфиге). | Полученный в результате файл поместим в нужное место (будет явно указано в конфиге). | ||
Теперь сам конфиг: | Теперь сам конфиг ( /etc/openvpn/server.conf ): | ||
<pre> | <pre> | ||
Строка 51: | Строка 51: | ||
*Логи - не сильная сторона OpenVPN. Надо попробовать verb 5 в следующий раз. А на 3-м уровне информация кое-какая есть, но о природе ошибок, с которыми столкнулись, судить (особенно с непривычки) трудно. В status обновляется статистика по трафику, а в log'е - успех или неуспех соединения, временные дисконнекты и т.п. | *Логи - не сильная сторона OpenVPN. Надо попробовать verb 5 в следующий раз. А на 3-м уровне информация кое-какая есть, но о природе ошибок, с которыми столкнулись, судить (особенно с непривычки) трудно. В status обновляется статистика по трафику, а в log'е - успех или неуспех соединения, временные дисконнекты и т.п. | ||
Аналогично приведу конфигурационный файл другой стороны: | Аналогично приведу конфигурационный файл другой стороны ( /etc/openvpn/client.conf ): | ||
<pre> | <pre> | ||
Строка 89: | Строка 89: | ||
*Обратите внимание: адреса в ifconfig поменялись порядком. | *Обратите внимание: адреса в ifconfig поменялись порядком. | ||
*Здесь в команде route явно указан шлюз (третий параметр, он необязателен). В данном случае это мало что меняет, но полезно указать случай, когда его явное указание имеет важное значение. | *Здесь в команде route явно указан шлюз (третий параметр, он необязателен). В данном случае это мало что меняет, но полезно указать случай, когда его явное указание имеет важное значение. | ||
===== Особенности OpenVZ ===== | |||
Если мы поднимаем OpenVPN внутри контейнера, то необходимо ему дать возможность [http://openvz.org/VPN_via_the_TUN/TAP_device| работать с tun-устройством]. Кратко (выполнить на стороне хоста): | |||
<pre> | |||
modprobe tun | |||
CTID=250 | |||
vzctl set $CTID --devnodes net/tun:rw --save | |||
vzctl set $CTID --devices c:10:200:rw --save | |||
vzctl set $CTID --capability net_admin:on --save | |||
vzctl exec $CTID mkdir -p /dev/net | |||
vzctl exec $CTID mknod /dev/net/tun c 10 200 | |||
</pre> | |||
===== Проблемы доступа в подсети ===== | |||
После запуска OpenVPN службы при данных настройках машины стали успешно пинговаться. Причем по разным ip: как из адресного пространства tun (10.10.10.x), так и реальных ip: 192.168.x.y. Однако, это касается только случая когда я делал пинги с машины, на которой поднят OpenVPN-клиент, на машину, где тоже поднят OpenVPN-клиент. Что до других машин - то попытка пинговать или подключиться по ssh к другим машинам подсетей (в обоих направлениях) к успеху не привела: молчание в ответ... Причина оказалась в том, что клиенты VPN подняты НЕ НА ШЛЮЗОВЫХ компьютерах подсетей. Это приводит к тому, что когда, машина получает ping, она должна ответить на него, но куда ? Выяснилось, что на tun-адрес 10.10.10.x, но на неклиентских машинах подсетей нет никакой информации о том, где эти ip находятся, поэтому они отсылают ответ на default gateway. Которые тоже ничего о ни не знают. | |||
To be continued... |
Текущая версия на 18:48, 12 октября 2016
OpenVPN
Пришло время описать OpenVPN. Так как эта статья является второй после IPSec, то писать введение считаю необязательным.
Простая симметричная схема
С точки зрения организации соединения, клиент и сервер поднимают между собой туннель. Функционально клиент от сервера не отличается. Однако применение дополнительных команд push '...' в конфигурационном файле одной стороны избавляет от явного их написания на другой. Рассмотрим простейший случай с авторизацией по статическому ключу. Рисунок прилагается.
Сначала создадим этот самый ключ:
# openvpn --genkey --secret static.key
Полученный в результате файл поместим в нужное место (будет явно указано в конфиге).
Теперь сам конфиг ( /etc/openvpn/server.conf ):
dev tun port 1194 ifconfig 10.10.10.1 10.10.10.2 secret /etc/openvpn/static.key # Use compression on the VPN link comp-lzo # Make the link more resistent to connection failures keepalive 10 60 ping-timer-rem persist-tun persist-key # Run OpenVPN as a daemon and drop privileges to user/group nobody user nobody group nobody daemon # Allow client to reach entire server subnet route 192.168.0.0 255.255.255.0 # Set logging log-append /var/log/openvpn.log status /var/log/openvpn-status.log verb 3
Комментарии:
- Некоторые опции являются умолчательными, например порт: 1194 - его можно и не указывать. Кстати, по записям, используется протокол UDP, если указан dev tun, или TCP в случае dev tap. Это важно для правил файерволла, но явно это не проверялось.
- ifconfig поднимает виртуальные интерфейсы в пространстве tun, т.е. виртуальные шлюзы, на которые должны роутиться запросы из соединяемых в vpn подсетей.
- Применяемое сжатие и дополнительные записи для пингования - стандартны. Скопировано не глядя.
- Пользователь nobody должен быть в системе, коль мы его указываем. Обычно, так оно и есть, но можно использовать и другой аккаунт, в чем смысла особого нет.
- Строка route указывает нашему "серверу", какая реальная подсеть доступна на другой стороне. Без этого окажется доступным только непосредственно "клиентский" компьютер, но не другие в его подсети. (Явно не проверялось).
- Логи - не сильная сторона OpenVPN. Надо попробовать verb 5 в следующий раз. А на 3-м уровне информация кое-какая есть, но о природе ошибок, с которыми столкнулись, судить (особенно с непривычки) трудно. В status обновляется статистика по трафику, а в log'е - успех или неуспех соединения, временные дисконнекты и т.п.
Аналогично приведу конфигурационный файл другой стороны ( /etc/openvpn/client.conf ):
#remote de01.eterhost.ru remote 144.76.183.114 port 1194 dev tun ifconfig 10.10.10.2 10.10.10.1 secret /etc/openvpn/static.key # Use compression on the VPN link comp-lzo # Make the link more resistent to connection failures keepalive 10 60 ping-timer-rem persist-tun persist-key # Run OpenVPN as a daemon and drop privileges to user/group nobody user nobody group nobody daemon # Allow client to reach entire server subnet route 192.168.1.0 255.255.255.0 10.10.10.1 # Set logging log-append /var/log/openvpn.log status /var/log/openvpn-status.log verb 3
Отличия минимальны:
- remote - явно указывает к кому подключаемся. Аналогичную команду можно применить и на "сервере", если у обеих сторон внешние фиксированные ip.
- Обратите внимание: адреса в ifconfig поменялись порядком.
- Здесь в команде route явно указан шлюз (третий параметр, он необязателен). В данном случае это мало что меняет, но полезно указать случай, когда его явное указание имеет важное значение.
Особенности OpenVZ
Если мы поднимаем OpenVPN внутри контейнера, то необходимо ему дать возможность работать с tun-устройством. Кратко (выполнить на стороне хоста):
modprobe tun CTID=250 vzctl set $CTID --devnodes net/tun:rw --save vzctl set $CTID --devices c:10:200:rw --save vzctl set $CTID --capability net_admin:on --save vzctl exec $CTID mkdir -p /dev/net vzctl exec $CTID mknod /dev/net/tun c 10 200
Проблемы доступа в подсети
После запуска OpenVPN службы при данных настройках машины стали успешно пинговаться. Причем по разным ip: как из адресного пространства tun (10.10.10.x), так и реальных ip: 192.168.x.y. Однако, это касается только случая когда я делал пинги с машины, на которой поднят OpenVPN-клиент, на машину, где тоже поднят OpenVPN-клиент. Что до других машин - то попытка пинговать или подключиться по ssh к другим машинам подсетей (в обоих направлениях) к успеху не привела: молчание в ответ... Причина оказалась в том, что клиенты VPN подняты НЕ НА ШЛЮЗОВЫХ компьютерах подсетей. Это приводит к тому, что когда, машина получает ping, она должна ответить на него, но куда ? Выяснилось, что на tun-адрес 10.10.10.x, но на неклиентских машинах подсетей нет никакой информации о том, где эти ip находятся, поэтому они отсылают ответ на default gateway. Которые тоже ничего о ни не знают.
To be continued...