Перейти к содержанию

05.02.2012

2

Настройка OpenVPN сервера и клиента

Это часть серии статей посвященных объединению территориально разделенных локальных сетей при помощи OpenVPN.

Установка и создание ключей и сертификатов для OpenVPN сервера и клиента описана в предыдущей статье Установка OpenVPN сервера. Теперь сервер и клиент готовы к настройке.

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

Создание ключей и сертификатов для OpenVPN сервера было описано в предыдущей статье об установке OpenVPN сервера. Подготовленные ключи и сертификаты были перенесены в каталог /etc/openvpn .

В пакет openvpn включен пример конфигурационного файла для OpenVPN сервера. Он находится в архиве server.conf.gz в каталоге /usr/share/doc/openvpn/examples/sample-config-files . Распакуем и переместим его в директорию /etc/openvpn :

cd /usr/share/doc/openvpn/examples/sample-config-files
gunzip -d server.conf.gz
mv server.conf /etc/openvpn/

Изменений в этот конфигурационный файл будет немного. Необходимо указать файл приватного ключа и сертификата OpenVPN сервера созданного по инструкции установки OpenVPN сервера:

cert router1.example.com.crt
key router1.example.com.key

Указать виртуальную подсеть (описание структуры сетей для этого примера находится в заглавной статье) :

server 192.168.50.0 255.255.255.0

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

push "route 192.168.100.0 255.255.255.0"

Эта строчка заставит OpenVPN клиент при подключении к серверу модифицировать свою таблицу роутинга. В логе клиента OpenVPN при подключении появится строка:

Sat Feb  4 13:21:59 2012 /sbin/route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.50.5

Поскольку все компьютеры в обеих сетях должны видеть друг-друга, то необходимо внести изменения в таблицу роутинга OpenVPN сервера:

client-config-dir ccd
route 192.168.200.0 255.255.255.0

Также нужно создать директорию /etc/openvpn/ccd , в которой создать файл с именем подключающегося клиента. В нашем примере это user_office2. Этот файл будет состоять из единственной строчки:

iroute 192.168.200.0 255.255.255.0

Без этих трех строчек подключивший клиент увидит все компьютеры в сети OpenVPN сервера, но остальные компьютеры в подключающейся сети, подключенную сеть не увидят, как и из сети OpenVPN сервера подключенная сеть останется недоступной.

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

;cipher BF-CBC        # Blowfish (default)
cipher AES-128-CBC    # AES
;cipher DES-EDE3-CBC  # Triple-DES

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

Имеет смысл раскомментировать строчки:

user nobody
group nogroup

чтобы уменьшить привилегии OpenVPN сервера после инициализации. Что впрочем добавит сообщения об ошибках в лог OpenVPN сервера. Например, при остановке OpenVPN сервера в логе появятся сообщения об ошибках в духе:

Feb  4 13:37:08 router ovpn-server[6628]: /sbin/route del -net 192.168.50.0 netmask 255.255.255.0
Feb  4 13:37:08 router ovpn-server[6628]: ERROR: Linux route delete command failed: external program exited with error status: 7
Feb  4 13:37:08 router ovpn-server[6628]: /sbin/route del -net 192.168.200.0 netmask 255.255.255.0
Feb  4 13:37:08 router ovpn-server[6628]: ERROR: Linux route delete command failed: external program exited with error status: 7

что логично, ведь с правами nobody:nogroup вносить изменения в таблицу роутинга нельзя. Впрочем таблица роутинга всё же будет подчищена, так как интерфейс tun будет удален.

По умолчанию текущий статус сохраняется в файл /etc/openvpn/openvpn-status.log . Стоит изменить, например на:

status /var/log/openvpn/status_server.log

Каталог для статусного файла должен существовать, автоматически он не создается. Статусный файл перезаписывается раз в минуту. Если в нем нет необходимости, можно просто закомментировать эту строку.

В результате получится конфигурационный файл для OpenVPN сервера:

port 1194
proto udp
dev tun

ca ca.crt
cert router1.example.com.crt
key router1.example.com.key
dh dh1024.pem

server 192.168.50.0 255.255.255.0

ifconfig-pool-persist ipp.txt

push "route 192.168.100.0 255.255.255.0"

client-config-dir ccd
route 192.168.200.0 255.255.255.0

keepalive 10 120

cipher AES-128-CBC
comp-lzo

user nobody
group nogroup

persist-key
persist-tun

status /var/log/openvpn/status_server.log

verb 3

После конфигурирования OpenVPN сервера, его можно запустить. В Debian это делается так:

/etc/init.d/openvpn start

Поскольку путь и имя лог файла не указаны, OpenVPN будет отправлять свой лог в syslog.

Настройка OpenVPN клиента

Создание ключей и сертификатов для OpenVPN клиента было описано в предыдущей статье об установке OpenVPN клиента. Подготовленные ключи и сертификаты были перенесены в каталог /etc/openvpn .

В пакет openvpn включен пример конфигурационного файла для клиента OpenVPN. Он находится в файле client.conf в каталоге /usr/share/doc/openvpn/examples/sample-config-files . Переместим его в директорию /etc/openvpn :

cd /usr/share/doc/openvpn/examples/sample-config-files
cp client.conf /etc/openvpn/

Изменений в конфигурационный файл клиента будет очень мало. Указываем адрес OpenVPN сервера:

remote router1.example.com 1194

Файл приватного ключа и сертификата OpenVPN клиента созданного по инструкции установки OpenVPN клиента:

cert user_office2.crt
key user_office2.key

Необходимо выбрать тот же механизм шифрования, что и на сервере:

;cipher BF-CBC        # Blowfish (default)
cipher AES-128-CBC    # AES
;cipher DES-EDE3-CBC  # Triple-DES

В этом конфигурационном файле клиента OpenVPN отсутствуют директивы указывающие на расположение лог файла и статусного файла. Можно добавить их:

log-append /var/log/openvpn/openvpn_client.log
status /var/log/openvpn/status_client.log

На время тестирования, директиву log-append можно закомментировать, тогда при тестовом запуске OpenVPN клиента, вывод лог файла пойдет на stdout.

Каталог для статусного файла должен существовать, автоматически он не создается. Статусный файл перезаписывается раз в минуту. Если в нем нет необходимости, можно просто закомментировать эту строку.

В результате получится конфигурационный файл для OpenVPN клиента:

client

dev tun
proto udp
remote router1.example.com 1194

resolv-retry infinite

nobind

user nobody
group nogroup

persist-key
persist-tun

ca ca.crt
cert user_office2.crt
key user_office2.key

ns-cert-type server

cipher AES-128-CBC
comp-lzo

verb 3

log-append /var/log/openvpn/openvpn_client.log
status /var/log/openvpn/status_client.log

Клиент готов к подключению, это можно сразу проверить:

openvpn client.conf

Если директива log-append не была указана, то вывод лога будет производится на stdout.

Проверка соединения

Проверять соединение двух сетей необходимо не с роутеров, а с любых других машин в локальных сетях. Это связано с тем, что если команды изменения роутинга были заданы неверно или не указаны совсем, то клиент и сервер OpenVPN будут видеть друг-друга, а остальные компьютеры в локальных сетях нет.

Предположим, что в первой сети с OpenVPN сервером есть компьютер с IP адресом 192.168.100.2, а во второй сети, с OpenVPN клиентом есть компьютер с IP адресом 192.168.200.2. В этом случае проверка осуществляется на них, простым пингом.

Из первой сети, с компьютера с адресом 192.168.100.2 пингаем адрес 192.168.200.2:

ping 192.168.200.2

Из второй сети, с компьютера с адресом 192.168.200.2 пингаем адрес 192.168.100.2:

ping 192.168.100.2

Оба компьютера должны быть доступны друг для друга.

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

Путь между сетями будет выглядеть приблизительно так:

user@192.168.200.2 ~ # traceroute 192.168.100.2
traceroute to 192.168.100.2 (192.168.100.2), 30 hops max, 60 byte packets
 1  192.168.200.1 (192.168.200.1)  0.133 ms  0.122 ms  0.150 ms
 2  192.168.50.1 (192.168.50.1)  54.832 ms  56.607 ms  58.321 ms
 3  192.168.100.2 (192.168.100.2)  64.376 ms  65.274 ms  65.959 ms
Подробнее Linux
2 комментария Ваш отзыв
  1. Nargiza
    Май 15 2014

    получила уведомления о обновление Porto и номера для сервера как это все делается?

    Ответить
  2. aprog
    Янв 16 2016

    Спасибо за пост. Еще интересует настройка мобильных клиентов, типа как здесь — http://sysadm.pp.ua/linux/shifrovanie/openvpn-client-server.html . Посоветуйте, пожалуйста, хорошый и удобный мобильный OpenVPN клиент ?

    Ответить

Поделитесь своими мыслями, оставьте комментарий.

(required)
(required)

Внимание: HTML допускается. Ваш e-mail никогда не будет опубликован.

Подписка на комментарии

Captcha * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.