diff --git a/README.md b/README.md index ca7277d..82cfaf4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -Схема следующа. OpenVPN-сервер находится в РФ, к нему подключаютсся клиенты, а также шлюз, через который идёт весь трафик. Обязательно использование режима DCO (Data channel offloading) для OpenVPN-интерфейсов клиента и шлюза, т.к. при включении этого режима производительность увеличивается драматически. Поэтому использование готовых скриптов типа github/angristan нам не подходит, будем поднимать всё ручками. Для начала нам нужно два сервера - в РФ и в забугорище. Оба подготавливаем идентично: +Схема следующа. OpenVPN-сервер находится в РФ, к нему подключаютсся клиенты, а также шлюз, через который идёт весь трафик. Обязательно использование режима DCO (Data channel offloading) для OpenVPN-интерфейсов клиента и шлюза, т.к. при включении этого режима производительность увеличивается драматически. Поэтому использование готовых скриптов типа github/angristan нам не подходит, будем поднимать всё ручками. Для начала нам нужно два сервера - в РФ и в забугорище. Оба подготавливаем идентично. +##Подготовка. ``` apt update && apt dist-upgrade -y ``` @@ -19,10 +20,12 @@ modprobe ovpn-dco-v2 lsmod | grep ovpn ``` Если вывод пуст, разбираемся. -Если вывод что-то типа -> ovpn_dco_v2 86016 0 -> ip6_udp_tunnel 16384 1 ovpn_dco_v2 -> udp_tunnel 32768 1 ovpn_dco_v2 +Если вывод что-то типа: +``` +ovpn_dco_v2 86016 0 +ip6_udp_tunnel 16384 1 ovpn_dco_v2 +udp_tunnel 32768 1 ovpn_dco_v2 +``` То всё хорошо, можно примменять на постоянку: ``` echo "ovpn-dco-v2" | sudo tee -a /etc/modules @@ -30,9 +33,9 @@ echo "ovpn-dco-v2" | sudo tee -a /etc/modules ``` update-initramfs -u -k all ``` -Можно ещё раз перезагрузиться и проверить наличие dco-модуля после перезагрузки `lsmod | grep ovpn` +Можно ещё раз перезагрузиться и проверить наличие dco-модуля после перезагрузки. `lsmod | grep ovpn` -Теперь приступим к настройке OpenVPN-сервера. +##Настройка OpenVPN-сервера. Инициализируем инфраструктуру открытых ключей и выпускаем сертификат сервера (без паролей для автозапуска): ``` make-cadir ~/openvpn-ca && cd ~/openvpn-ca @@ -118,7 +121,7 @@ WantedBy=multi-user.target ``` ``` systemctl daemon-reload -systemctl enable vpn-policy-routing.service +systemctl enable --now vpn-policy-routing.service ``` Ну а теперь самое время запустить сервер: ``` @@ -129,8 +132,20 @@ systemctl start openvpn-server@server.service ip -details link show dev tun0 | grep dco ``` Вывод должен быть не пустой. +Проверяем, применился ли policy-based routing: +``` +ip rule show | grep 100 +``` +Мы должны увидеть строчку `from 10.210.0.0/24 lookup 100`. Это значит, что весь трафик из VPN-сети отправляется в таблицу 100. +Далее посмотрим саму таблицу: +``` +ip route show table 100 +``` +Мы должны увидеть 2 строчки: +`default via 10.210.0.254 dev tun0` - маршрут по-умолчанию через шлюз +`10.210.0.0/24 dev tun0 proto kernel scope link` - а где вообще искать нашу внутреннюю впн-подсеть. В дефолтную таблицу маршрутизации эта информация поступает автомматически, а в кастомную нужно добавлять вручную. Можно создавать клиентов с помощью скрипта: `./gen-client.sh user1 user2 user3 ...`. - -Теперь займёмся клиентом, который будет выступать в роли шлюза. \ No newline at end of file +##Настройка клиента-шлюза +Если ещё не сделано, необходимо проделать все шаги из раздела **Подготовка**.