From 933aa7bdf1a88802fde8eef4c13f88f30a12eed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=91=D0=B0?= =?UTF-8?q?=D0=B4=D0=BE=D0=B2=D1=81=D0=BA=D0=B8=D0=B9?= Date: Fri, 22 May 2026 19:54:08 +0000 Subject: [PATCH] Update README.md --- README.md | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/README.md b/README.md index 7895d1b..f63257a 100644 --- a/README.md +++ b/README.md @@ -54,3 +54,81 @@ easyrsa build-client-full gateway-client nopass cp pki/ca.crt pki/issued/server.crt pki/private/server.key /usr/local/etc/openvpn/ ``` ## Настройка сервера +Создаём конфиг сервера: +``` +cat << 'EOF' > /usr/local/etc/openvpn/openvpn.conf +dev ovpn0 +dev-type tun +proto udp +port 443 +topology subnet +server 10.210.0.0 255.255.255.0 +client-config-dir /usr/local/etc/openvpn/ccd +route 0.0.0.0 0.0.0.0 +push "redirect-gateway def1 bypass-dhcp" +client-to-client +cipher AES-128-GCM +data-ciphers AES-128-GCM +ca /usr/local/etc/openvpn/ca.crt +cert /usr/local/etc/openvpn/server.crt +key /usr/local/etc/openvpn/server.key +dh none +keepalive 10 120 +persist-key +persist-tun +status /var/log/openvpn-status.log +verb 3 +EOF +``` +Также ссоздадим директоррию для индивидуальных настроек клиентов (client specific overrides): +``` +mkdir -p /usr/local/etc/openvpn/ccd +``` +ВАЖНОЕ ЗАМЕЧАНИЕ. +Обратите внимание на строку `route 0.0.0.0 0.0.0.0` в конфиге. Это значит, весь трафик будет перенаправлен в интерфейс ovpn0. Поэтому далее будет применена магия FreeBSD - FIBs (таблицы маршрутизации) и PF (фильтрация пакетов), с помощью которых легко и элегантно можно применить policy-based routing. +#### Шаг 1. Настройка ядра FreeBSD на работу с двумя таблицами (FIB) +По умолчанию во FreeBSD одна таблица маршрутизации. Добавим вторую: +``` +echo 'net.fibs="2"' >> /boot/loader.conf +``` +*Чтобы применить это без перезагрузки всего сервера, выполните команду в консоли:* +``` +sysctl net.fibs=2 +``` +#### Шаг 2. Включаем Packet Filtering: +``` +nano /etc/pf.conf +``` +Если создался новый файл - это нормально. Значит pf на данной системе ещё не применялся. Добавим в файл следующее: +``` +# Разрешаем весь трафик на vpn-интерфейсе и принудительно переключаем его на rtable 1 (FIB 1) +match in on ovpn0 rtable 1 + +# Пропускаем трафик (базовое правило, если у вас нет других ограничений) +pass all +``` +Включаем PF в автозагрузку и запускаем его: +``` +sysrc pf_enable="YES" +``` +``` +service pf start +``` +### Шаг 3. Включаем OpenVPN. +``` +service openvpn restart +``` +SSH-сессия должна остаться активной, так как дефолтная таблица маршрутизации (FIB 0) сервера не изменилась. Проверить, что интерфейс поднялся, можно стандартно: `ifconfig ovpn0` +Проверить, как выглядят маршруты внутри изолированной таблицы, можно командой: +``` +netstat -rn -F 1 +``` +Осталось добавить директивы для нашего клиента-шлюза: +``` +cat << 'EOF' > /usr/local/etc/openvpn/ccd/gateway-client +ifconfig-push 10.210.0.254 255.255.255.0 +iroute 0.0.0.0 0.0.0.0 +push-remove "redirect-gateway def1 bypass-dhcp" +EOF +``` +На этом настройку сервера можно считать завершённой. \ No newline at end of file