Следующая новость
Предыдущая новость

Неизвестный OpenVPN. Знакомимся со скрытыми возможностями и настройками

23.04.2020 13:32

Содержание статьи

  • Site to site
  • Раздаем разные настройки разным клиентам
  • Подключаем удаленные сети
  • Храним все настройки клиента в одном файле
  • Общаемся с процессом OpenVPN через сокет
  • Заключение

OpenVPN был и остается одним из самых популярных средств для построения виртуальных частных сетей. Он не лишен недостатков: для него нет встроенного клиента в Windows, macOS и мобильных устройствах, а пропускная способность туннелей не слишком высока. Зато способность работать поверх TCP позволяет ему проходить даже через самые безумные сети с многократным NAT и прочим издевательством.

В интернете полно статей о настройке сервера OpenVPN для подключения пользовательских компьютеров к удаленной сети, и создается впечатление, что это его единственное применение. Кто-то даже считает, что с появлением WireGuard он вовсе утратил свою актуальность. Действительно, встроенный роуминг и другие возможности WireGuard создают старым проектам серьезную конкуренцию.

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

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

Site to site

OpenVPN обычно ассоциируется с настройками типа клиент — сервер. Большинство статей посвящены именно этому варианту, и многие сетевые дистрибутивы вроде OpenWRT и OPNSense предоставляют пользовательский интерфейс только для него. Но это большое упущение! OpenVPN — очень простой способ соединить два хоста или сети безопасным туннелем типа точка — точка.

Еще менее известный факт: в этом режиме OpenVPN может работать со статическими ключами (pre-shared key), без сертификатов. Более того, чтобы сгенерировать такой ключ, тебе не понадобится никаких инструментов, кроме самого OpenVPN.

Предположим, что мы хотим постоянное подключение к удаленной машине с адресом 203.0.113.100.

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

$ openvpn --genkey --secret /etc/openvpn/shared.key 

Настроим локальную сторону:

dev-type tun dev tun0  ifconfig 192.168.0.2 192.168.0.1 rport 1194 remote 203.0.113.100 secret /etc/openvpn/shared.key 

Теперь скопируем файл ключа на удаленную машину и напишем там противоположный конфиг:

dev-type tun dev tun0  ifconfig 192.168.0.1 192.168.0.2  lport 1194 local 203.0.113.100 secret /etc/openvpn/shared.key 

По желанию можно добавить туда опции для работы в режиме демона:

daemon openvpn-tun0 writepid /var/run/openvpn-tun0.pid  

Осталось сохранить конфиг в файл вроде /etc/openvpn/s2s.conf и запустить openvpn --config /etc/openvpn/s2s.conf.

Идентификация соединений происходит только по ключу, адреса хостов никак не учитываются. Указать опцию remote нужно только на одной стороне — «клиенте». Сторона без опции remote будет ждать подключения. Из-за этого OpenVPN удобен для соединений site to site с хостами, у которых нет статического адреса, и даже хостами за NAT.

Опция local не обязательна, но полезна для маршрутизаторов с несколькими внешними интерфейсами. Если ее не указывать, OpenVPN будет слушать на 0.0.0.0.

OpenVPN работает поверх UDP, если не указано обратное. Если хочешь использовать TCP, на стороне «клиента» нужно добавить в конфиг proto tcp-client, а на стороне «сервера» — proto tcp-server.

Насколько плохо использование статических ключей? С одной стороны, утечка такого ключа куда более опасна, поскольку злоумышленник сможет расшифровать весь перехваченный трафик, и в прошлом, и в будущем. TLS решает эту проблему использованием сессионных ключей. Но с другой стороны, такой трафик сложнее идентифицировать как зашифрованный туннель.

Режим site to site можно использовать с TLS и сертификатами, но настройка этого сложнее и требует больше времени. Если тебе нужно поднять соединение между двумя машинами с минимальными затратами усилий, OpenVPN site to site со статическим ключом — оптимальный вариант.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

1 год

7690 р.

1 месяц

720 р.

Я уже участник «Xakep.ru»

Источник

Последние новости