Есть роутер (CentOS),
сетевые интерфейсы:
-WAN1
-WAN2
-LAN
default gateway WAN1
Маскарадинг включен для обоих WAN
Так же есть OpenVPN клиент, в конфиге которого сервер подключения указан как dns-имя хоста:
netherlands-amsterdam-ca-version-2.expressnetw.com
Задача: подключение OpenVPN сделать через WAN2, и далее некоторые хосты из локальной сети маршрутизировать через VPN-туннель средствами iproute2 (Policy based routing)
------------
Вариант с поиском IP-адреса сервера VPN и добавлением до него static маршрута перед запуском openvpn не подходит, т.к. при подключении DNS вернет один адрес, а при переподключении (reconnect) будет новый запрос адреса от openvpn и он уже может быть другим.
Вариант с поиском IP-адреса сервера VPN и добавлением до него static маршрута перед запуском openvpn не подходит, т.к. при подключении DNS вернет один адрес, а при переподключении (reconnect) будет новый запрос адреса от openvpn и он уже может быть другим.
Ну и пусть будет другим. Резолвите домен, и получившийся айпишник добавляете в маршрут. Пишется в две строчки.
Первая сложность - по доменному имени DNS возвращает ~5 разных ip-адресов, и какой из них получит OpenVPN на стадии подключения не ясно.
Вторая сложность - вопрос времени. Запрос к DNS и добавление статик маршрута происходит до запуска OpenVPN клиента, вероятно из скрипта (rc.local?) и происходит один раз. А OpenVPN клиент может переподключаться самопроизвольно много раз (например разрыв соединения), и вероятно получит IP-адрес, который в статик роуты еще не был добавлен. Можно конечно из cron'a периодически резольвить этот хост, но вероятность, что будет реконнект OpenVPN клиента в промежутке остается.
Никита,
1. Network Manager умеет запускать скрипты после поднятия определенных интерфейсов.
2. Ничто не мешает вызывать в демоне не openvpn напрямую, а скрипт, который будет делать то, что вам надо и затем стартовать openvpn
Alexey Dmitriev, проблема в том, что разрыв подключения OpenVPN может быть вызван не падением локального интерфейса, а перебоем на линии, и тогда скрипт не отработает.
Можно по аналогии с Failover повесить скрипт, который каждую минуту будет пинговать ip-сервера, резольвить новые IP и т.п., но, повторюсь, если переподключение OpenVPN будет в промежутке между запусками этого скрипта - будут проблемы.
Alexey Dmitriev, OpenVPN создает tun0 интерфейс после того, как получил от DNS адрес хоста сервера подключения. Если связь потерена, tun0 будет разрушен и создан заново при повторном подключении. возможно на tun0 можно повесить 'down' или 'post-down' скрипт, и из этого скрипта добавлять нужные маршруты в "статик", но вероятность того, что OpenVPN получит от DNS все равно другой IP адрес сервера остается.
P.S. вопрос подключения клиента через нунжный интерфейс решился без скриптов, средствами iptables и pbr.