понедельник, 12 июля 2010 г.

Настройка OpenVPN в Ubuntu

Довольно подробно все обсосано уже до нас вот здесь http://forum.ixbt.com/topic.cgi?id=14:40906 (большое спасибо vinni). Решил вынести ключевые моменты.

Собсна ставим openvpn:

$sudo apt-get install openvpn

Апосля установки настраиваем server.
OpenVPN умеет работать в двух режимах tun = L3-туннель, tap = L2-туннель. При использование tap - сервер работает в режиме бриджа

Рисуем конфиг сервера в режиме tun:

$sudo mcedit /etc/openvpn/server.conf:

и внего пишим следующее:

port 1194
proto udp  
dev tun
dev-node tun0
ca                   /etc/openvpn/cert/ca.crt
cert                 /etc/openvpn/cert/mmarket.crt
key                  /etc/openvpn/cert/mmarket.key
dh                   /etc/openvpn/cert/dh1024.pem

server                  10.7.0.0 255.255.255.0
route-method        exe
client-config-dir    "/etc/openvpn/ccd"
push                   "route 192.168.10.0 255.255.255.0"
route                  192.168.1.0 255.255.255.0

#ifconfig-pool-persist ipp
client-to-client
duplicate-cn
keepalive 10 120
comp-lzo
persist-key
persist-tun
status               /etc/openvpn/log/openvpn-status.log
log                  /etc/openvpn/log/openvpn.log
verb 5
mute 20

разберем подробнее:

port 1194 - порт, который слушает сервер (можно выбирать любой)
proto udp - протокол передачи данных (tcp/udp)
dev tun - режим работы openvpn сервера (tun/tap)
dev-node tun0 - явное указание интерфейса (имя интерфейса на котором поднимать сервер, необязательный параметр)

ca, cert, key, dh - сертификаты и ключи (генерируются отдельно, см. ниже)

server 10.7.0.0 255.255.255.0 - этот параметр задает подсеть, в которой работает openvpn сервер

route-method exe - добавление маршрута делать не через API, а через route.exe

client-config-dir "/etc/openvpn/ccd" - директория настроек для клиентов (удобно если много клиентов и каждому из них нужно передать разные параметры), в этой директории нужно создать файл с именем клиента, в который записать необходимые параметры

push "route 192.168.10.0 255.255.255.0" - передать клиентам маршрут на подсеть, которая находится за интерфейсом tun0

route 192.168.1.0 255.255.255.0 - добавить маршрут на сервере; указывает что за клиентом есть подсеть 192.168.1.0/8

ifconfig-pool-persist ipp - назначение клиентам статических ip адресов. т.е. в файл ipp необходимо вписать <имя_клиента (его CN)>,<ip клиента>

client-to-client - разрешает обмен трафиком между клиентами для режима dev tun

duplicate-cn - разрешает подключение нескольких клиентов с одинаковыми именами. опция не поддерживается, если есть маршрутизация в локальные подсети клиентов

keepalive 10 120 - макрокоманда "пинговать" противоположную сторону туннеля с указанным периодом 10 сек, при отсутствии встречных пингов в течение 120 сек считать туннель упавшим и запускать пересоединение

comp-lzo - сжатие трафика
persist-key - поддерживать ключ
persist-tun - поддерживать туннель

status /etc/openvpn/openvpn-status.log - писать статус и состояние в файл
log /etc/openvpn/openvpn.log - вести лог сервера в файл
verb 5 - глубина каментов в логах
mute 20 - писать в лог каждые 20 сек


Как я уже говорил выше, создаем ключи и сертификаты для шифрования и авторизации.
Соответствующие скрипты для этого находятся в папке /usr/share/doc/openvpn/examples/easy-rsa/2.0

Создаем CA (авторитетный сертификат):

$cd  /usr/share/doc/openvpn/examples/easy-rsa/2.0
$. ./vars
$./clean-all
$./build-ca

Теперь создадим сертификат и приватный ключ для сервера: 

$./build-key-server mmarket


Примечание: mmarket - имя ключа для сервера (можно использовать любое)

Создаем ключ для клиента (если клиентов несколько, процедуру придётся повторить):

$./build-key client1

Примечание: для каждого клиента должно быть указано своё уникальное имя (в данном случае client1).

Примечание: если новый клиент создаётся спустя некоторое время, процедура будет выглядеть следующим образом:

$cd  /usr/share/doc/openvpn/examples/easy-rsa/2.0
$source ./vars
$./build-key client2

Генерируем параметры Диффи-Хеллмана:

$./build-dh

Помещаем следующие файлы в директорию /etc/openvpn/cert:
ca.crt
mmarket.crt
dh1024.pem
mmarket.key




Теперь переходим к конфигам клиента...
Схема построения похожа на конфиг сервера


Рисуем конфиг клиента:

sudo mcedit /etc/openvpn/client.conf

и внего пишим следующее:


client
dev tun
proto udp
remote            1.2.3.4          1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca                   /etc/openvpn/cert/ca.crt
cert                 /etc/openvpn/cert/client1.crt
key                  /etc/openvpn/cert/client1.key
comp-lzo

log                  /etc/openvpn/log/openvpn.log
verb 5
mute 20

Разберем конфиг подробнее:


client - явное указание, что это клиент
dev tun - работаем через L3-туннель
proto udp - протокол udp


remote  1.2.3.4 1194 --- 1.2.3.4 - внешний ip сервера, порт 1194

resolv-retry infinite - пытаться бесконечно определить адрес сервера (при
указании его по имени), чтобы "обойти" проблему с завершением попытки установления соединения при отказе DNS или сбое внешних соединений

nobind - указание использовать динамический порт на клиенте, актуально только для udp, т.к. для tcp на клиенте всегда используется динамический порт

persist-key - поддерживать ключ
persist-tun - поддерживать туннель

ca /etc/openvpn/cert/ca.crt - сертификат СА (скопировать с сервера)

cert /etc/openvpn/cert/client1.crt - сертификат клиента
key /etc/openvpn/cert/client1.key - ключ клиента


comp-lzo - разрешить сжатие

log /etc/openvpn/openvpn.log - писать лог в файл
verb 5 - глубина каментов в логах
mute 20 - писать в лог каждые 20 сек


Чтобы отозвать неиспользуемые сертификаты, необходимо выполнить:


$cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
$source ./vars
$./revoke-full client1

Комментариев нет:

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