我有以下问题:
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;
并且它有效。