У меня есть приложение UDP, которое отправляет пакеты с номерами входящих исходных портов, равными номерам портов назначения с обеих сторон связи. В документации также говорится, что это приложение не будет работать, если задействована трансляция сетевых адресов и портов (NAPT). Я убедился, что это действительно так, а также что NAT, сохраняющий номера портов назначения И ИСТОЧНИКА, работает правильно, иногда его называют «статическим режимом NAT». Однако я пытаюсь заставить это приложение работать с использованием NAPT, иногда также называемого «скрытым режимом NAT». Я думал, что это будет возможно с использованием iptables следующим образом, на стороне сервера Ubuntu, получая измененные номера исходных кодов UDP:
hercules@pjjs12:~$ sudo iptables -t nat -I POSTROUTING 1 -p udp --dport 12000 -j SNAT --to-source :12000
hercules@pjjs12:~$ sudo iptables -t nat -I POSTROUTING 2 -p udp --dport 12001 -j SNAT --to-source :12001
hercules@pjjs12:~$ sudo iptables -t nat -I POSTROUTING 3 -p udp --dport 12002 -j SNAT --to-source :12002
hercules@pjjs12:~$ sudo iptables -t nat -I POSTROUTING 4 -p udp --dport 12003 -j SNAT --to-source :12003
hercules@pjjs12:~$ sudo iptables -t nat -I POSTROUTING 5 -p udp --dport 12004 -j SNAT --to-source :12004
Когда я запускаю приложение, tcpdump показывает, что это не работает. Также iptables -L
команды показывают, что правила явно не используются:
hercules@pjjs12:~$ sudo iptables -vxnL -t nat --номера строк
Цепочка PREROUTING (политика ACCEPT 0 пакетов, 0 байт)
num pkts bytes target prot opt in out source target
Цепочка INPUT (политика ACCEPT 0 пакетов, 0 байтов)
num pkts bytes target prot opt in out source target
Цепочка OUTPUT (политика ACCEPT 0 пакетов, 0 байт)
num pkts bytes target prot opt in out source target
Цепочка POSTROUTING (политика ACCEPT 0 пакетов, 0 байт)
num pkts bytes target prot opt in out source target
1 0 0 SNAT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:12000 to::12000
2 0 0 SNAT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:12001 to::12001
3 0 0 SNAT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:12002 to::12002
4 0 0 SNAT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:12003 to::12003
5 0 0 SNAT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:12004 to::12004
hercules@pjjs12:~$ sudo iptables -vxnL --номера строк
Цепочка INPUT (политика ACCEPT 542660 пакетов, 30600115 байт)
num pkts bytes target prot opt in out source target
Цепочка FORWARD (политика ACCEPT 1838 пакетов, 100767 байт)
num pkts bytes target prot opt in out source target
Цепочка OUTPUT (политика ACCEPT 562972 пакетов, 888057717 байт)
num pkts bytes target prot opt in out source target
геркулес@pjjs12:~$
Я должен признать, что это моя первая попытка использовать iptables
поэтому я совсем не уверен, возможно ли это, или я упускаю из виду действительно основные вещи. Помощь в этом будет принята с благодарностью.
Спасибо,
Питер