Настройка OpenVPN : OpenVPN, ключ, key, firewall


В большинстве Internet-источников рассказано, как настроить OpenVPN с X.509. Это процедура, сложность которой далеко не всегда оправдана. Но есть и более простой способ, который нигде толком не описан (я нашёл хорошее HOWTO только на английском языке). Вот его-то я и хочу описать.

Все рецепты опробованы на FreeBSD, но у меня нет никаких сомнений в том, что всё это точно так же заработает и под Linux.
Достоинства и недостатки статического ключа

Достоинства:
• Настройка очень проста.

Недостатки:
• Ограничение на масштаб системы: для каждого клиента нужен отдельный сервер.
• Ключ должен находиться и на клиенте и на сервере, что требует наличия защищённого канала ещё до поднятия VPN.

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

Генерация статического ключа

Создаём ключ:

openvpn —genkey —secret openvpn.key

Этот ключ надо поместить и на клиента и на сервер.

Не забудьте поставить на него какие-нибудь, достаточно злые, права:

chown 0:0 openvpn.key
chmod 400 openvpn.key

Создаём VPN-туннель

Как минимум
На сервере:

openvpn —remote xx.xx.xx.xx \
—dev tun1 \
—ifconfig 192.168.254.1 192.168.254.2 \
—verb 9 \
—secret openvpn.key

Где xx.xx.xx.xx — адрес клиента от которого мы ждём подключения.

На клиенте:

openvpn —remote yy.yy.yy.yy \
—dev tun1 \
—ifconfig 192.168.254.2 192.168.254.1 \
—verb 9 \
—secret openvpn.key

Где yy.yy.yy.yy — адрес сервера.

Адрес клиента на сервере (xx.xx.xx.xx) указывать не обязательно.
В реальности

В реальной жизни часто приходится поднимать VPN для преодоления firewall, NAT и других препятствий. Я использую такой набор опций:

На клиенте:

openvpn —remote $ip \
—dev tun1 \
—ifconfig 192.168.2.1 192.168.2.2 \
—verb 1 \
—secret /root/VPN/openvpn.key \
—ping 3 \
—ping-exit 30

Здесь 192.168.2.1 — адрес клиента, а 192.168.2.2 — адрес сервера. Опция —ping 3 заставляет клиента принудительно посылать пакеты серверу каждые три секунды, чтобы stateful-firewall, находящийся между клиентом и сервером, не удалил канал по тайм-ауту. Опция —ping-exit 30 — если сервер не пингуется тридцать раз подряд, то клиент завершает работу.

На сервере настройки таковы:

openvpn —dev tun1 \
—ifconfig 192.168.2.2 192.168.2.1 \
—verb 5 \
—secret openvpn.key \
—ping 3

В опции —ifconfig адреса указаны наоборот; кроме того, я использую другой уровень отладки, но это уже кому как нравится.

Настройка firewall

Не забывайте настроить firewall.

Если вы используете ipfw, то самые простые правила, разрешающие весь трафик в свежесозданной сети, могут выглядеть так:

00200 allow ip from 192.168.0.0/16 to 192.168.0.0/16

или

00200 allow ip from any to any via tun1

Номера правил следует задавать такими, чтобы новые правила не вступили в конфликт с уже имеющимися.


Комментарии запрещены.




Статистика