Назад | Перейти на главную страницу

Добавление нескольких статических маршрутов для одного хоста на разные шлюзы

У меня есть 2 клиента openvpn, подключенных к 2 разным серверам, на устройствах tun0 и tun1.

Мне нужно добавить 2 статических маршрута для одного и того же IP-адреса хоста и сопоставить их с 2 разными шлюзами и устройствами tun.

Я выполнил эти 2 команды:

route add -host 69.30.217.90 gw 10.197.2.1 dev tun0
route add -host 69.30.217.90 gw 10.197.14.1 dev tun1

Когда я делаю CURL-запрос и указываю устройство для использования, работает только второй маршрут. Как только я удалил его (остановив экземпляр openvpn), первый маршрут заработает.

Есть ли способ заставить оба маршрута работать, в зависимости от того, какое устройство я использую для выполнения запроса?

РЕДАКТИРОВАТЬ:

Добавлю, что это упрощенный пример.

На самом деле мне нужно иметь до 5 туннелей openvpn одновременно, а время жизни маршрута составляет ~ 1 с, достаточно только для выполнения одного запроса curl.

Моя цель сделать это - проверить VPN-серверы, если они работают должным образом, аналогично тому, как клиент будет во время обычного использования, подключившись к серверу, сделав запрос через туннель и сравнив с ожидаемым ответом.

Запуск одного экземпляра демона тестирования работает нормально, однако полный набор тестов занимает ~ 20 секунд, а тестирование сотен серверов займет много времени. Я могу запускать несколько из них параллельно, однако в конечном итоге они наступают на пути друг друга.

У меня возникли проблемы с сопоставлением по oif. Я подозреваю (но не уверен), что это связано с тем, что решение выходного интерфейса принимается после того, как он изначально решает, какую запись маршрута использовать.

Но вы можете сопоставить выходной IP-адрес и выполнить маршрутизацию по политике.

Например:

echo "100 TUN" >> /etc/iproute2/rt_tables
ip route add 10.197.2.0/24 dev tun0 table TUN
ip route add 69.30.217.90 via 10.197.2.1 dev tun0 table TUN 
ip rule add from 10.197.2.8 table TUN

Эхо создает псевдоним для таблицы маршрутизации № 100 (далее TUN), чтобы на нее можно было ссылаться по имени в командах iproute2.

Первая команда маршрута добавляет основную сеть для подключения tun0 к таблице TUN. Это должно быть установлено в той же сети, что и уже существующий маршрут в вашей таблице по умолчанию.

Вторая команда маршрута добавляет конкретный хост и шлюз, связанные с tun0, в таблицу TUN.

Наконец, правило сопоставляет пакеты по IP-адресу источника. Значение здесь следует изменить на адрес локального интерфейса на tun0 или вся неперекрывающаяся сеть также будет работать. Он направляет пакеты, соответствующие этому правилу, на использование таблицы TUN, которая затем будет маршрутизироваться в соответствии с маршрутами, которые мы добавили ранее в эту таблицу.

Вы можете попробовать правило соответствия oif. У меня это никогда не работало, но ymmv:

ip rule add oif tun0 table TUN