Настройка 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
получила уведомления о обновление Porto и номера для сервера как это все делается?
Спасибо за пост. Еще интересует настройка мобильных клиентов, типа как здесь — http://sysadm.pp.ua/linux/shifrovanie/openvpn-client-server.html . Посоветуйте, пожалуйста, хорошый и удобный мобильный OpenVPN клиент ?