Update README.md
This commit is contained in:
24
README.md
24
README.md
@@ -73,7 +73,6 @@ port 443
|
|||||||
topology subnet
|
topology subnet
|
||||||
server 10.210.0.0 255.255.255.0
|
server 10.210.0.0 255.255.255.0
|
||||||
client-config-dir /usr/local/etc/openvpn/ccd
|
client-config-dir /usr/local/etc/openvpn/ccd
|
||||||
route 0.0.0.0 0.0.0.0
|
|
||||||
push "redirect-gateway def1 bypass-dhcp"
|
push "redirect-gateway def1 bypass-dhcp"
|
||||||
client-to-client
|
client-to-client
|
||||||
cipher AES-128-GCM
|
cipher AES-128-GCM
|
||||||
@@ -91,7 +90,7 @@ EOF
|
|||||||
```
|
```
|
||||||
|
|
||||||
ВАЖНОЕ ЗАМЕЧАНИЕ.
|
ВАЖНОЕ ЗАМЕЧАНИЕ.
|
||||||
Обратите внимание на строку `route 0.0.0.0 0.0.0.0` в конфиге. Это значит, весь трафик будет перенаправлен в интерфейс ovpn0. Поэтому далее будет применена магия FreeBSD - FIBs (таблицы маршрутизации) и PF (фильтрация пакетов), с помощью которых легко и элегантно можно применить policy-based routing.
|
Далее мы сталкиваемся с дилеммой. OpenVPN в режиме DCO не имеет встроенной маршрутизации, а смотрит только системную таблицу маршрутизации (в линуксе - вообще только таблицу main). Значит мы должны направить default gateway в сторону клиента-шлюза. Но тогда сервер перестанет отвечать на запросы с основного (физического) интерфейса. Точнее, отвечать будет, но в интерфейс OpenVPN. Значит для трафика, входящего с физического интерфейса, default gateway должен быть направлен в сторону шлюза провайдера. Поэтому далее будет применена магия FreeBSD - FIBs (таблицы маршрутизации) и PF (фильтрация пакетов), с помощью которых легко и элегантно можно применить policy-based routing.
|
||||||
#### Шаг 1. Настройка ядра FreeBSD на работу с двумя таблицами (FIB)
|
#### Шаг 1. Настройка ядра FreeBSD на работу с двумя таблицами (FIB)
|
||||||
По умолчанию во FreeBSD одна таблица маршрутизации. Добавим вторую:
|
По умолчанию во FreeBSD одна таблица маршрутизации. Добавим вторую:
|
||||||
```
|
```
|
||||||
@@ -120,7 +119,26 @@ sysrc pf_enable="YES"
|
|||||||
```
|
```
|
||||||
service pf start
|
service pf start
|
||||||
```
|
```
|
||||||
#### Шаг 3. Включаем OpenVPN.
|
#### Шаг 3. PostUP-скрипт для добваления маршрутов
|
||||||
|
Поскольку сам процесс OpenVPN ничего не знает об альтернативной таблице маршрутизации, он будет пытаться добавлять маршруты в основную (FIB 0). Значит будем добавлять маршруты скриптом, запускающимсся вместе с туннелем.
|
||||||
|
```
|
||||||
|
echo 'script-security 2' >> /usr/local/etc/openvpn/openvpn.conf
|
||||||
|
echo 'up "/usr/local/etc/openvpn/up.sh"' >> /usr/local/etc/openvpn/openvpn.conf
|
||||||
|
```
|
||||||
|
```
|
||||||
|
cat << 'EOF' > /usr/local/etc/openvpn/up.sh
|
||||||
|
#!/bin/sh
|
||||||
|
# Добавляем локальный маршрут подсети в FIB 1, чтобы ядро понимало интерфейс
|
||||||
|
setfib 1 route add 10.210.0.0/24 -iface ovpn0
|
||||||
|
# Добавляем две половины интернета в FIB 1
|
||||||
|
setfib 1 route add 0.0.0.0/1 -iface ovpn0
|
||||||
|
setfib 1 route add 128.0.0.0/1 -iface ovpn0
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
```
|
||||||
|
chmod +x /usr/local/etc/openvpn/up.sh
|
||||||
|
```
|
||||||
|
#### Шаг 4. Включаем OpenVPN.
|
||||||
```
|
```
|
||||||
service openvpn start
|
service openvpn start
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user