резервный маршрут для отбрасывания пакетов, если выходной интерфейс, подключенный к NAT, выходит из строя?

Справочная информация:

Я устанавливаю соединение со сторонней VPN и пакетами NAT, помеченными как часть определенной контрольной группы (чтобы выборочно запускать процессы через VPN или нет), к стороннему устройству Tun VPN (tun2 в этом примере) и использую сценарий маршрутизации устанавливает в качестве шлюза по умолчанию VPN для отдельной таблицы маршрутизации, называемой «vpn». Все это работает со следующим (некоторые мелкие детали опущены).

запускается при загрузке:

iptables -t mangle -A OUTPUT -m cgroup --cgroup 0x00110011 -j MARK --set-mark 11
iptables -t nat -A POSTROUTING -m cgroup --cgroup 0x00110011 -o tun2 -j MASQUERADE
ip rule add fwmark 11 table vpn

содержится в openvpn client.conf:

route-noexec
route-up /etc/openvpn/3rdparty/routeup.sh

и routeup.sh для установки шлюза по умолчанию для таблицы маршрутов vpn

#!/bin/bash

/sbin/ip route replace default via $route_vpn_gateway dev $dev table vpn

Проблема: s для отдельной таблицы маршрутов с именем vpn. Все это работает со следующим (некоторые мелкие детали опущены).

запускается при загрузке:

iptables -t mangle -A OUTPUT -m cgroup --cgroup 0x00110011 -j MARK --set-mark 11
iptables -t nat -A POSTROUTING -m cgroup --cgroup 0x00110011 -o tun2 -j MASQUERADE
ip rule add fwmark 11 table vpn

содержится в openvpn client.conf:

route-noexec
route-up /etc/openvpn/3rdparty/routeup.sh

и routeup.sh для установки шлюза по умолчанию для таблицы маршрутов vpn

#!/bin/bash

/sbin/ip route replace default via $route_vpn_gateway dev $dev table vpn

Проблема: s для отдельной таблицы маршрутов с именем vpn. Все это работает со следующим (некоторые мелкие детали опущены).

запускается при загрузке:

iptables -t mangle -A OUTPUT -m cgroup --cgroup 0x00110011 -j MARK --set-mark 11
iptables -t nat -A POSTROUTING -m cgroup --cgroup 0x00110011 -o tun2 -j MASQUERADE
ip rule add fwmark 11 table vpn

содержится в openvpn client.conf:

route-noexec
route-up /etc/openvpn/3rdparty/routeup.sh

и routeup.sh для установки шлюза по умолчанию для таблицы маршрутов vpn

#!/bin/bash

/sbin/ip route replace default via $route_vpn_gateway dev $dev table vpn

Проблема: Если интерфейс стороннего VPN (tun2) выходит из строя (например, происходит сбой openvpn), в таблице маршрутов «vpn» больше нет маршрута по умолчанию, и весь трафик (даже тот, который выполняется в моей отдельной контрольной группе) маршрутизируется через основную table и через интерфейс eth0 по умолчанию. Поэтому мне нужно установить резервный маршрут либо в iptables, либо в отдельной таблице маршрутов vpn. Если я использую что-то вроде,

iptables -A OUTPUT -m cgroup --cgroup 0x00110011 -o eth0 -j REJECT

, он просто отбрасывает все пакеты, поэтому очевидно, что это обрабатывается до записи nat. Точно так же я не могу найти способ использовать «ip route» для изменения таблицы маршрутов для «vpn», чтобы после удаления записи шлюза по умолчанию после удаления интерфейса tun2 он блокировал весь трафик. Вместо этого нет никакой записи, и кажется, что весь трафик просто идет в следующую таблицу маршрутизации, которая должна быть основной.

ОБНОВЛЕНИЕ: I ' Теперь мы предлагаем полное решение проблемы выборочного запуска процесса через VPN.

https://serverfault.com/a/766290/345463

3
задан 13 April 2017 в 15:14
1 ответ

Мне удалось заставить это работать, используя параметр метрики с iproute2. Итак, мой сценарий маршрутизации был изменен на следующий

#!/bin/bash

/sbin/ip route add default via $route_vpn_gateway dev $dev metric 1 table vpn

, и я обязательно включил резервную черную дыру с более высоким значением метрики (более низкие значения имеют приоритет), чтобы заблокировать весь трафик. Это может быть выполнено при загрузке с другими строками, которые я указал в моем вопросе.

ip route add blackhole default metric 2 table vpn

Это отлично работает

3
ответ дан 3 December 2019 в 06:29

Теги

Похожие вопросы