Iptables
如何使用 conntrack 允許 SIP 流量
我有以下問題:
Device (eth0)----> SWITCH(trunk)+VLAN120 ---> (PC1) +VLAN200 ---> (PC2)
我能夠從 PC1 ping 到 PC2,它們位於不同的子網中,如下所示: Using NAT rules in iptables as below because they are in different SUBNETS
iptables -t nat -A POSTROUTING -o eth0.120 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth0.200 -j MASQUERADE iptables -I FORWARD -i eth0.120 -o eth0.200 -p udp -m udp --dport 5060 -j ACCEPT iptables -I FORWARD -i eth0.200 -o eth0.120 -p udp -m udp --dport 5060 -j ACCEPT iptables -A FORWARD -j DROP ---> This drops rest of the traffic.
如果沒有 FORWARD 鏈中的最後一條 DROP 規則,我就能夠建立 SIP 連接。
但是,由於我添加了 DROP 規則以消除其他流量,因此我無法建立 SIP 連接。
這意味著客戶端和伺服器正在通過其他一些埠進行通信。在 tcp 轉儲它說 8000 有時是 5435。這個另一個埠每次都會改變。
所以我讀到應用級網關可以幫助解決這個問題。
如何使用 ALG 和 iptables 來允許動態埠。
所以我設法讓這個工作:
首先,正如邁克爾建議的那樣,不需要 NAT。
現在為了在埠 5060 上允許 SIP,我使用了以下規則:
iptables -D FORWARD -j delegate_forward; iptables -D FORWARD -j DROP iptables -I FORWARD -i eth0.120 -o eth0.200 -m state --state RELATED,ESTABLISHED -j ACCEPT; iptables -I FORWARD -i eth0.200 -o eth0.120 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -I FORWARD -i eth0.120 -o eth0.200 -p tcp --dport 5060 -m state --state NEW -j ACCEPT; iptables -I FORWARD -i eth0.200 -o eth0.120 -p tcp --dport 5060 -m state --state NEW -j ACCEPT; iptables -A FORWARD -i eth0.120 -o eth0.200 -p icmp -j ACCEPT; iptables -A FORWARD -i eth0.200 -o eth0.120 -p icmp -j ACCEPT; iptables -A FORWARD -j DROP;
它有效。