День, добрый.
Есть такая вот задачка.
1. У нас есть доступ по VPN к неким ресурсам.
2. Основной шлюз офиса выполняет маршрутизацию IP которые доступны по VPN на CentOS.
2. VPN поднимается на 15 часов и затем принудительно сбрасывается на стороне шлюза, не считая проблем со связью.
3. Данные для VPN аутентификации изменяются
раз в минуту, посему нет возможности автоматически поднимать тунель.
3. VPN поднят на CentOS, а iptables выполняет маскарадинг трафика по тунелю.
4.
Схема подключенияКак работает сейчас1. Заходим на CentOS через браузер и выполняем VPN подключение.
2. Теперь весь офис может работать с ресурсами доступными через VPN.
3. Если туннель падает, то у пользователя браузер долго крутит колёсики и не открываются некоторые сайты. Он понимает, что нужно пойти и поднять VPN.
Чего хочется добиться1. Что бы при падении VPN(tun0) пользователя переадресовывало сразу на страничку установления VPN соединения.
Варианты решения1. Средствами только iptables насколько я понимаю это не решить потому как из nat POSTROUTING пакет уже не достать, или может я ошибаюсь ?
2. По событиям ifup/down изменяем правила в iptables - таким образом проблема решается, осталось лишь смочь отследить эти события по интерфейсу tun0.
3. Запуск скрипта при старте, который сам будет следить за tun0 и править iptables правила.
4. DNS не хотелось бы для этого использовать из-за кеша.
Для перенаправления пользователя на страничку подклчюения VPN, добавляем правило в iptables
iptables --table nat --append PREROUTING -i eth0 -p tcp -j DNAT -to-destination 10.0.4.2:80
Дополнительные материалы1.
Netfilter-diagram-rus2.
Iptables Tutorial 1.2.23.
How Do I Run a Firewall Script As Soon As eth0 Interface Brings Up?4.
13.3. Interface Control Scripts5.
Dynamic network configuration on Linux ...6.
How to configure `eth0` to retry `dhclient` when unplugged and replugged?Вопросы собственно такие:1. Можно ли всё же при помощи iptables забрать пакеты после nat POSTROUTING и выполнить редирект на IP ?
2. Если 1 не работает, то как отследить событие ifup/down и выполнить скрипт при этих событиях ?
Спасибо.