Iptables

如何使用 conntrack 允許 SIP 流量

  • May 3, 2021

我有以下問題:

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;

它有效。

引用自:https://serverfault.com/questions/707012