Update README.md
This commit is contained in:
36
README.md
36
README.md
@@ -92,7 +92,7 @@ EOF
|
|||||||
```
|
```
|
||||||
|
|
||||||
ВАЖНОЕ ЗАМЕЧАНИЕ.
|
ВАЖНОЕ ЗАМЕЧАНИЕ.
|
||||||
Далее мы сталкиваемся с дилеммой. OpenVPN в режиме DCO не имеет встроенной маршрутизации, а смотрит только системную таблицу маршрутизации. Значит мы должны направить default gateway в сторону клиента-шлюза. Но тогда сервер перестанет отвечать на запросы с основного (физического) интерфейса. Точнее, отвечать будет, но в интерфейс OpenVPN. Значит для трафика, входящего с физического интерфейса, default gateway должен быть направлен в сторону шлюза провайдера. Поэтому далее будет применена магия FreeBSD - FIBs (таблицы маршрутизации), в которой будут запущены демоны sshd и openvpn. На линуксе аналогичных возможностей нет, только долшая и мучительная возня с iptables. Лично я убил гору времени, не получив результата.
|
Далее мы сталкиваемся с дилеммой. OpenVPN в режиме DCO не имеет встроенной маршрутизации, а смотрит только системную таблицу маршрутизации. Значит мы должны направить default gateway в сторону клиента-шлюза. Но тогда сервер перестанет отвечать на запросы с основного (физического) интерфейса. Точнее, отвечать будет, но в интерфейс OpenVPN. Значит для трафика, входящего с физического интерфейса, default gateway должен быть направлен в сторону шлюза провайдера. Поэтому далее будет применена магия FreeBSD - FIBs (таблицы маршрутизации), в которой будут запущены демоны sshd и openvpn. На линуксе аналогичных возможностей нет, только долгая и мучительная возня с iptables. Лично я убил гору времени, не получив результата.
|
||||||
#### Шаг 1. Настройка ядра FreeBSD на работу с двумя таблицами (FIB)
|
#### Шаг 1. Настройка ядра FreeBSD на работу с двумя таблицами (FIB)
|
||||||
По умолчанию во FreeBSD одна таблица маршрутизации. Добавим вторую:
|
По умолчанию во FreeBSD одна таблица маршрутизации. Добавим вторую:
|
||||||
```
|
```
|
||||||
@@ -121,8 +121,36 @@ netstat -rn -F 0
|
|||||||
netstat -rn -F 1
|
netstat -rn -F 1
|
||||||
```
|
```
|
||||||
Вторая таблица должна приссутствовать и в ней должны быть два маршрута из */etc/rc.local*
|
Вторая таблица должна приссутствовать и в ней должны быть два маршрута из */etc/rc.local*
|
||||||
#### Шаг 3. PostUP-скрипт для добваления маршрутов
|
#### Шаг 3. Перемещение нужных процессов в FIB 1
|
||||||
Поскольку сам процесс OpenVPN ничего не знает об альтернативной таблице маршрутизации, он будет пытаться добавлять маршруты в основную (FIB 0). Значит будем добавлять маршруты скриптом, запускающимсся вместе с туннелем.
|
Выполним команду:
|
||||||
|
```
|
||||||
|
setfib service sshd restart
|
||||||
|
```
|
||||||
|
Это единоразово переместит ssh в fib 1. **Переподключимся к серверу по ssh**. Проверим, какую таблицу ммаршрутизации использует наш демон.
|
||||||
|
```
|
||||||
|
ps -ax -o pid,fib,command | grep -E 'sshd'
|
||||||
|
```
|
||||||
|
Если во второй колонке мы видим единицы, значит мы вссё сделали правильно, и доступ к серверу через FIB 1 есть. Можно модифицировать FIB 0 под наши цели. Применим изменения перманентно. Для этого добавим в `/etc/rc.conf` следующие строки:
|
||||||
|
```
|
||||||
|
sshd_fib="1"
|
||||||
|
openvpn_fib="1"
|
||||||
|
```
|
||||||
|
Перезагрузимся и проверим, что мы точно имеем доступ к серверу именно благодаря альтернативной таблице.
|
||||||
|
```
|
||||||
|
ps -ax -o pid,fib,command | grep -E 'sshd|openvpn'
|
||||||
|
```
|
||||||
|
Должна показывать единицы во второй колонке, ессли это так, удалим маршрут по-умолчанию в основной таблице:
|
||||||
|
```
|
||||||
|
route del -fib 0 default
|
||||||
|
```
|
||||||
|
И проверим саму таблицу:
|
||||||
|
```
|
||||||
|
netstat -rnF 0
|
||||||
|
```
|
||||||
|
Вывод не должен содержать маршрута по-умолчанию. При этом вывод есть, значит доступ к серверу мы не потеряли.
|
||||||
|
Если потеряли, перезагрузка вернёт маршрут по-умолчанию.
|
||||||
|
|
||||||
|
*Поскольку сам процесс OpenVPN ничего не знает об альтернативной таблице маршрутизации, он будет пытаться добавлять маршруты в основную (FIB 0). Значит будем добавлять маршруты скриптом, запускающимсся вместе с туннелем.
|
||||||
```
|
```
|
||||||
echo 'script-security 2' >> /usr/local/etc/openvpn/openvpn.conf
|
echo 'script-security 2' >> /usr/local/etc/openvpn/openvpn.conf
|
||||||
echo 'up "/usr/local/etc/openvpn/up.sh"' >> /usr/local/etc/openvpn/openvpn.conf
|
echo 'up "/usr/local/etc/openvpn/up.sh"' >> /usr/local/etc/openvpn/openvpn.conf
|
||||||
@@ -139,7 +167,7 @@ EOF
|
|||||||
```
|
```
|
||||||
```
|
```
|
||||||
chmod +x /usr/local/etc/openvpn/up.sh
|
chmod +x /usr/local/etc/openvpn/up.sh
|
||||||
```
|
```*
|
||||||
#### Шаг 4. Включаем OpenVPN.
|
#### Шаг 4. Включаем OpenVPN.
|
||||||
```
|
```
|
||||||
service openvpn start
|
service openvpn start
|
||||||
|
|||||||
Reference in New Issue
Block a user