Tatay
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Всем доброго времени суток! Ещё раз извиняюсь перед модераторами, за создание новой темы после сбоя 6.11.2015, не заметил. И так, проблема: непонятки с iptables и DNAT. В Linux я до сих пор многое не понимаю. Столкнулся со странной проблемой. Система Debian Wheezy i386. Хост является шлюзом пользователей в интернет. Для начала вводные данные: в интернет смотрит - eth0, в локалку - eth1 на интернет интерфейсе внешний ip-адрес, назовём его: xxx.xxx.xxx.xxx на внутреннем интерфейсе адрес: 192.168.1.1 В локалке есть АТС, у которой ip-адрес управляющего модуля: 192.168.5.55, адрес voip-платы: 192.168.5.56 В области интернета есть некий ip: www.www.www.www, который является voip-шлюзом провайдера телефонии. Для корректного выхода в город, АТС использует UDP порт 5588 и ещё целую кучу разных UDP портов + небольшая пачка TCP портов. В iptables было прописано DNAT правило: iptables -t nat -I PREROUTING -i eth0 -s www.www.www.www -d xxx.xxx.xxx.xxx -p udp -m multiport --dport 5588 -j DNAT --to-destination 192.168.5.56 iptables -I FORWARD -i eth0 -s www.www.www.www -d 192.168.5.56 -p udp -m multiport --dport 5588 -j ACCEPT iptables -I FORWARD -i eth1 -s 192.168.5.56 -d www.www.www.www -p udp -m multiport --sport 5588 -j ACCEPT Всё работало хорошо, пока в один прекрасный момент, в офисе не отрубился выход в город. В ходе разбирательств, провайдер попросил перенаправить порт 5588 с 192.168.5.56 на 192.168.5.55 В связи с чем, было удалено предыдущее правило с помощью "iptables -t nat -D PREROUTING <номер_правила>" и вместо него было написано: iptables -t nat -I PREROUTING -i eth0 -s www.www.www.www -d xxx.xxx.xxx.xxx -p udp -m multiport --dport 5588 -j DNAT --to-destination 192.168.5.55 а так же были добавлены соответствующие форвардинги. И случилась очень странная штука: Делаю "tcpdump -i eth1 -n port 5588", и вижу постоянные повторения следующей картины: 13:51:25.722436 IP www.www.www.www.5588 > 192.168.5.56.5588: UDP, length 36 13:51:25.962251 IP 192.168.5.56.5588 > www.www.www.www.5588: UDP, length 36 посмотрел "netstat-nat -Nn | grep 5588": udp www.www.www.www:5588 xxx.xxx.xxx.xxx:5588 192.168.5.56:5588 ASSURED очень странно, до сих пор 5.56... посмотрел "cat /proc/net/ip_conntrack | grep 5588": udp 17 177 src=www.www.www.www dst=xxx.xxx.xxx.xxx sport=5588 dport=5588 src=192.168.5.56 dst=www.www.www.www sport=5588 dport=5588 [ASSURED] mark=0 use=2 Почему на 5.56, когда уже прописано на 5.55? перепроверил себя, посмотрел "iptables -t nat -L -n -v | grep 5588": 0 0 DNAT udp -- eth0 * www.www.www.www xxx.xxx.xxx.xxx multiport dports 5588 to:192.168.5.55 Всё правильно в таблице iptables, стоит нужный нам 5.55, других правил DNAT с портом 5588 или с перекрывающими диапазонами адресов или портов в таблице нет. Гуглил на тему: "Как удалить залипший DNAT маппинг портов?", но что-то пока ничего не нашёл. Всё везде указывает на то, что при применении правил iptables, всё само где надо отваливается и всё самое где надо добавляется. Банальное echo 0 > /proc/net/ip_conntrack пишет "write error: Input/output error" Как делать специально Flush для этой таблицы - не знаю к сожалению. Инет-шлюзу ребут сделать проблематично, т.к. очень много людей через него работают. В общем, вопрос: Залип DNAT-маппинг? Как такое может быть? Как уничтожить в памяти этот залипший маппинг? Или я чего-то не понимаю? Может это баги ядра в Debian 7.1 i386? Система давно не обновлялась. |