Am o aplicație UDP care trimite pachete cu numere de porturi sursă de intrare egale cu numerele de porturi de destinație de pe ambele părți ale comunicației. Documentația mai precizează că această aplicație nu va funcționa în cazul în care este implicată Network Address Port Translation (NAPT). Am verificat că acesta este într-adevăr cazul și, de asemenea, că un NAT, care păstrează numerele de porturi de destinație ȘI SURSA, funcționează corect, uneori denumit „mod static NAT”. Cu toate acestea, încerc să fac această aplicație să funcționeze folosind NAPT, denumit uneori și „modul ascunde NAT”. M-am gândit că acest lucru ar fi posibil folosind iptables după cum urmează, pe partea serverului Ubuntu, primind numerele de piesă sursă UDP modificate:
hercules@pjjs12:~$ sudo iptables -t nat -I POSTRUTING 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 POSTRUTING 5 -p udp --dport 12004 -j SNAT --to-source :12004
Când rulez aplicația, tcpdump arată că aceasta nu funcționează. De asemenea iptables -L
comenzile arată că regulile aparent nu sunt folosite:
hercules@pjjs12:~$ sudo iptables -vxnL -t nat --line-numbers
PRERUTARE în lanț (politica ACCEPT 0 pachete, 0 octeți)
num pkts octeți target prot opt in out sursă destinație
INTRARE în lanț (politica ACCEPT 0 pachete, 0 octeți)
num pkts octeți target prot opt in out sursă destinație
Ieșire în lanț (politica ACCEPT 0 pachete, 0 octeți)
num pkts octeți target prot opt in out sursă destinație
POSTROUTING în lanț (politica ACCEPT 0 pachete, 0 octeți)
num pkts octeți target prot opt in out sursă destinație
1 0 0 SNAT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:12000 la::12000
2 0 0 SNAT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:12001 la::12001
3 0 0 SNAT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:12002 la::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 --line-numbers
INTRARE în lanț (politica ACCEPTĂ 542660 pachete, 30600115 octeți)
num pkts octeți target prot opt in out sursă destinație
Lanț FORWARD (politica ACCEPT 1838 pachete, 100767 octeți)
num pkts octeți target prot opt in out sursă destinație
IEȘIRE în lanț (politica ACCEPTĂ 562972 pachete, 888057717 octeți)
num pkts octeți target prot opt in out sursă destinație
hercules@pjjs12:~$
Trebuie să recunosc că aceasta este prima mea încercare de a folosi iptables
deci nu sunt deloc sigur dacă acest lucru este posibil sau dacă trec cu vederea lucruri de bază. Un ajutor în acest sens va fi foarte apreciat.
Mulțumiri,
Petru