Сконфигурируем сервер, подключим клиенты, разберемся с ip, решим одну проблемку с docker.

Конфигурация сервера

TODO


Подключение клиентов

Нужно сгенерировать конфигурационный файл. Т.к. я использовал образ докера kylemanna/docker-openvpn, вызываю команду на машине с контейнером сервера, предварительно заменив ${client_name} на имя (название) для клиента:

docker-compose run --rm openvpn easyrsa build-client-full ${client_name} nopass

Произойдет генерация сертификатов. Имя любое. Теперь нужно экспортировать сертификаты в файл

docker-compose run --rm openvpn ovpn_getclient {client_name} > certificate.ovpn 

и закидывать на машину клиента.

Во всех инструкциях и видео, для подключения клиентов по статическим ip, не было объяснений какие ip доступны. Они просто указывали какие ip использовать. И я писал те значения которые мне предлагали. Но попытки подключения клиента не были удачными. И тогда начал искать какие ip я могу присваивать. В итоге, нашел информацию про таблицу для присвоения ip адресов

first download ip subnet calculator you use 10.3.0.16 network with 255.255.255.240 mask

это прописано в файле конфигурации, ip и маска может отличаться, в общем виде строка выглядит так:

server 10.3.0.16 255.255.255.240

that means for the second segment the network portion is 10.3.0.16 and 10.3.0.31 is broadcast
the usuable ips are 17-to-30 ,ok so far?

from the above range you give ips to openvpn clients,
if you use tun mode the default subnetting is /30 networks
means the following

network – ip1 – ip2 – broadcast
10.3.0.16 - 10.3.0.17 - 10.3.0.18 - 10.3.0.19
10.3.0.20 - 10.3.0.21 - 10.3.0.22 - 10.3.0.23
10.3.0.24 - 10.3.0.25 - 10.3.0.26 - 10.3.0.27
10.3.0.28 - 10.3.0.29 - 10.3.0.30 - 10.3.0.31

только потом увидел такую таблицу

из документации OpenVPN

Specifically, the last octet in the IP address of each endpoint pair must be taken from this set:

[  1,  2] [  5,  6] [  9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]

Клиент на Windows

Тут особо нечего расписывать. Скачиваем, устанавливаем, запускаем. Закидываем конфигурационный файл *.ovpn. Через иконку в трее жмем подключиться.


Клиент на Android

Тут аналогично windows.


Клиент на Linux

В интернете, в целом, много источников. Большая часть из которых или бесполезна, или копирование одного и того-же материала. Полезных, работающих мануалов не так много. Один из них лежит тут. Там подробно описано сработавшее у меня решение. И описано про добавление в автозагрузку, а это важно если клиент для OpenVpn должен работать постоянно.

Если по простому, то закидываем файл *.ovpn c конфигурацией и сертификатами по расположению /etc/openvpn/client/client.conf

запуск sudosystemctl start openvpn-client@client.service добавление в автозагрузку sudo systemctl enable openvpn-client@client.service проверка sudo systemctl status openvpn-client@client.service


Решение проблемы работы клиента и Docker

Столкнулся с тем что контейнеры в docker не хотели запускаться, а запущенные остановились. На другом сервере, во время попытки использования docker-compose, была ошибка

ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network 

Связал это именно с запущенным клиентом OpenVPN немного позднее, после поиска причин в интернете. Одна из рекомендаций была остановить запущенный клиент. Меня это не устроило и почитал ту рекомендацию дальше и там была ссылка на решение. Нужно создать файл /etc/openvpn/fix-routes.sh с содержимым

#!/bin/sh

echo "Adding default route to $route_vpn_gateway with /0 mask..."
ip route add default via $route_vpn_gateway

echo "Removing /1 routes..."
ip route del 0.0.0.0/1 via $route_vpn_gateway
ip route del 128.0.0.0/1 via $route_vpn_gateway

Сделать его исполняемым: chmod o+x /etc/openvpn/fix-routes.sh Изменить владельца этого файла на root: chown root:root /etc/openvpn/fix-routes.sh.

Добавить строки в конфигурационный файл:

 script-security 2
 route-up  /etc/openvpn/fix-routes.sh

Я их добавил в файл client.ovpn.

Там-же есть описание причины проблемы:

Openvpn adds routes that for following networks: 0.0.0.0/1 and 128.0.0.0/1 (these routes cover entire IP range), and docker can’t find range of IP addresses to create it’s own private network. You need to add a default route (to route everything through openvpn) and disable these two specific routes. fix-routes script does that. This script is called after openvpn adds its own routes. To execute scripts you’ll need to set script-security to 2 which allows execution of bash scripts from openvpn context. Thanks I’d like to thank author of this comment on github, also thanks to ovpn support. - Автор ответа на вопрос Paolo Tagliaferri


Как исключить проброс исходящего трафика через сеть openvpn

удалось найти ответ на этой странице

Коротко: в файле конфигурации клиента /etc/openvpn/client/client.conf закоментировать\удалить строку

redirect-gateway def1

и добавить следующие:

pull-filter ignore redirect-gateway
route 0.0.0.0 192.0.0.0 net_gateway
route 128.0.0.0 192.0.0.0 net_gateway

похожая информация тут чуть более развернутая тут

Метки: ,

Дата изменения: