Open VPN
Сконфигурируем сервер, подключим клиенты, разберемся с 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
только потом увидел такую таблицу
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
and128.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 setscript-security
to2
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