Portál AbcLinuxu, 6. května 2025 23:13
iptables -t nat -A PREROUTING -p tcp -d 1.2.3.4 --dport 22023 -j DNAT --to 192.168.40.3:22022 iptables -t nat -A POSTROUTING -p tcp -s 192.168.40.0/22 -d 192.168.40.3 -j SNAT --to 1.2.3.4 iptables -A FORWARD -i br40 -o br40 -j ACCEPTPokud se pokusím připojit na IP 1.2.3.4 port 22023 z IP adresy v segmentu 192.168.40.0/22, tak se spojení nenaváže a pokud si vylistuju všechna pravidla v tabulce nat, tak vidím, že žádné pakety neprocházejí postroutingem. Nutno podotknout, že tato komunikace probíhá v rámci jednoho bridge (br40), ale IP adresa 1.2.3.4 se nachází na interfacu br99. Pokud si však na interfacu br40 pustím tcpdump vše začne záhadně fungovat jako dříve, teda do chvíle než tcpdump ukončím. Po troše laborování jsem přišel na to, že tímto nastavením sysctl -w net.bridge.bridge-nf-call-iptables=1 dosáhnu toho, že to funguje a pakety procházejí posroutingem jako ve staré verzi kernelu/iptables. Jestli jsem pochopil nastavení tohoto parametru správně, tak se s ním vypíná/zapíná netfilter na všech bridgích a předpokládám, že z nějakého důvodu je defaultně zapnutý. V Debianu Squeeze takový přepínač nebyl. Tak si říkám, jestli dělám něco špatně. Zda bych ten nat neměl dělat jinak. Co myslíte?
iptables -d 1.2.3.4 -p tcp --dport 1234 -j MARK --set-mark 1234 echo 1234 presmerovani >>/etc/iproute2/rt_tables ip rule add fwmark 1234 table presmerovani ip route add 1.2.3.4/32 via 192.168.40.3 table presmerovani
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.