Неизвестный 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 со статическим ключом — оптимальный вариант.

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

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

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

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Даниил Батурин: Координатор проекта VyOS (https://vyos.io), «языковед», функциональщик, иногда сетевой администратор

Комментарии (3)

  • Спасибо за статью. Расскажите что ещё можно настроить интересного. Жесть скучно... Если можно про dns (((
    Я в полном... Я ставлю правила... Локальной политики... Мне комп убивают... Я не знаю как Windows защитить.

  • Автор, спасибо за статью.
    Есть еще ccd, которыми можно регулировать маршруты каждого клиента.
    ipush и iroute можно дать доступ к тачке, к которой у тебя нет доступа, но ты знаешь у кого есть. Срадни stunnel, только постоянно.

  • Большое спасибо, действительно узнал кое-что новое. Но вот все эти адреса и маршруты, имхо, очень тяжело представлять без схематики. Вот не получается у меня пока я себе схему не нарисую...

Похожие материалы