Довольно подробно все обсосано уже до нас вот здесь 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
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
Комментариев нет:
Отправить комментарий