如何使用 conntrack 允许 SIP 流量

如何使用 conntrack 允许 SIP 流量

我有以下问题:

Device (eth0)----> SWITCH(trunk)+VLAN120 ---> (PC1)
                                +VLAN200 ---> (PC2)

我能够从 PC1 ping 到 PC2,它们位于不同的子网中,如上所述:使用 iptables 中的 NAT 规则,如下所示,因为它们位于不同的子网中

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 dump 中,有时会显示 8000,有时会显示 5435。这个其他端口每次都会变化。

所以我读到应用程序级网关可以帮助解决这个问题。

如何使用 ALG 和 iptables 来允许动态端口。

答案1

所以我已经设法得到这个工作:

首先,正如 Michael 所建议的,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;

并且它有效。

相关内容