Intereting Posts
Scientific Linux 6.3 зависает при приостановке, если используется доля samba Чистая замена всех вхождений двух строк с помощью sed Uvcvideo пытается загрузить камеру дважды Есть ли способ кикнуть kswapd и заставить его обмениваться страницами? Вставьте пробел перед первой запятой в файл csv Компиляция пакета для проблем с debian 8 Как установить заголовки Linux 3.2.40 на Synology DS214 с DSM 6.1? Как использовать результат последнего расчета в новом расчете в wcalc? Как использовать команду cut для получения первого и последнего элементов строки? В чем разница между консолью, оболочкой, терминалом, эмулятором терминала, терминальным мультиплексором и диспетчером окон? Понимание / etc / aliases и что он делает Настройте локальную точку доступа Wi-Fi на компьютере Подключение по беспроводной сети к сети WPA2-Enterprise через оболочку Не могу играть в полноэкранный режим, видеть только черные, но слышать их Сообщение об ошибке: grub2 устаревает grub2

iptables DNAT + SNAT: нежелательное умножение одной и той же дейтаграммы udp (и сбоя)

пытаясь выяснить мою ошибку в следующем очень простом сценарии:

|peerA|(Aip:Aport) <--> (Bdev:Bip:Bport)|NatNode|(Cdev:Cip:Cport) <--> (Dip:Dport)| peerD 

(peer A испускает дейтаграммы для Bip: Bport, NatNode переводит их как отправленные Cip: Cport и предназначенные для Dip: Dport и наоборот)

то, что я сделал, с пустыми iptables и «ванильной» таблицей маршрутизации:

 iptables -p udp -t nat -A PREROUTING -s Aip -d Bip -i Bdev --destination-port Bport -j DNAT --to-destination Dip:Dport iptables -p udp -t nat -A POSTROUTING -s Aip -d Dip -o Cdev --destination-port Dport -j DNAT --to-source Cip:Cport 

(плюс правила для обратного направления и одна цель LOG для каждого -t nat и -t основных целей фильтра)

то, что я ожидал, было: – правильное переписывание (и это нормально, как показано wirehark) – каждый входящий пакет входит из PREROUTING (решение маршрутизации, возможно, в Cdev), пересекает FORWARD один раз (решение о маршрутизации, возможно, Cdev), затем ПОСТРОЕНИЕ один раз , затем он идет в сеть.

то, что у меня есть (проверка регистрации): 1. первый пакетный траверс PREROUTING один раз, фильтр / FORWARD – тонна раз (yep, тот же идентификатор пакета), затем ПОСТРОЕНИЕ много раз, затем выдается в сеть один раз, а удаленные узлы получают его. 2. со второй датаграммы и далее все, кажется, происходит, но переведенная датаграмма не выбрасывается на устройстве. 3. Если я подожду достаточно (скажем> 15 секунд) и повторюсь, опять же, головная датаграмма новой последовательности ведет себя как 1., начиная с второй, как 2.

Также попытался удалить опции -i и -o, но, похоже, ничего не изменил.

Что я здесь делаю неправильно?

Я не могу определить проблему, мне кажется, что я сделал «как предполагалось», инстинктивно подозреваю, что что-то идет не так в точках решения маршрутизации, и, может быть, пакеты, подобные в 2., не испускаются каким-то защитным поведением Linux tcp / ip stack …

Я почти уверен, что это моя собственная ошибка, но не могу найти, где.

спасибо за помощь!

Если вы хотите сделать классический NAT для Dip и реализовать переадресацию портов для своего Dport, тогда вам не нужны какие-либо специально разработанные правила POSTROUTING, просто добавьте общий -j MASQUERADE.

И .. DNAT в ПОСТРОЕНИИ? Вы сделали опечатку?

Обычно я использую классический NAT (при условии, что установлен блокирующий брандмауэр, а conntrack возвращает все «ответные» пакеты):

iptables -I POSTROUTING -o ppp0 -j MASQUERADE

iptables -I FORWARD -i eth0 -o ppp0 -j ACCEPT

iptables -I PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to local_ip:80

Здесь eth0 является локальным iface в той же подсети, что и local_ip, ppp0 – интернет iface.