Уже полгода меня доставала проблема, что во время разрыва соединения ADSL-модем сбрасывал таблицу трансляции адресов. Это выражалось хорошим таким, минут на пять, лагом открытых на клиенте соединений. Например, та же аська jabber держит постоянное соединение.
Когда провайдер рвет связь раз в сутки - оно строить и жить не мешает, но в сибирь пришел сезон дождей и колодцы с телекомуникациями (лапшой до АТС) залило - разрывы участились раз в пять.
Решение проблемы относительно простое. В модеме (Acorp W400G) внутри linux, соединение поднимается стандартным pppd и можно написать свой скрипт ip-up, закинув его в модем.
NAT в модеме сделан через MASQUERADE, которое при переподключении сбросит таблицу NAT, поэтому в скрипте ip-up правило с MASQUERADE удаляем и заменяем его на SNAT, благо, у webstream внешний IP за последний год у меня не менялся ни разу.
Ну а в случае, если внешний IP сменится, получим лаг минут на 20, но вероятность этого ничтожна.
# cat /var/tmp/mycfg/pppup.sh
#!/bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/var/tmp/mycfg
export PATH
# $1 $2 $3 $4 $5 $6
# interface-name tty-device speed local-IP-address remote-IP-address ipparam
action="-A"
if [ ! -z "$CONNECT_TIME" ]; then
action="-D"
fi
# this rules is placed before the script is called
$ipt -t nat -D POSTROUTING --out-interface "$1" -j MASQUERADE
$ipt -t nat $action POSTROUTING --out-interface "$1" -j SNAT --to-source "$4"
#