我有一个奇怪的networking拓扑,我试图转发端口失败。
事情是,我有一个公共服务器,所有的端口必须从路由器转发到同一个服务器(DMZ)。
我的拓扑:
internet | router | /----+--+------\ | | | pc1 server etc
服务器使用iptables运行linux(ubuntu)。 防火墙configuration非常像这样:
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT # for every port I accept on the server (this part works perfectly) iptables -A INPUT -p tcp --dport xxxx -j ACCEPT # for every port I want to forward to pc1 (this is the part that doesn't work) iptables -A FORWARD -p tcp --dport xxxx -j ACCEPT iptables -t nat -P PREROUTING -p tcp --dport xxxx -j DNAT --to $PC1_IP # I've also tried with the following line: iptables -t nat -P POSTROUTING -p tcp --sport xxxx -j SNAT --to $PC1_IP
但转发似乎并没有工作。
当我启用转发时,连接可以连接(或似乎可以)但不传输数据。 也许他们只是超时。
当我不启用所述转发时,连接立即被拒绝。
目标电脑已被检查,它可以接受连接。
我也试过在两台机器上用Wireshark嗅探一下。 在服务器上,数据包被接受,但没有find外出的数据包(我想如果实际发生DNAT重新路由,应该有一个数据包)。 在pc1 ,没有收到数据包。
任何人都可以build议一个修复 我一直在Google上search几天,我已经尝试了几个设置这个端口 – 他们都没有工作。
尝试添加
echo 1 > /proc/sys/net/ipv4/ip_forward
在linux上启用路由
加
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
否则本地PC的响应将不会被转发回互联网。
你也可以使用:
iptables -t nat -P PREROUTING -p tcp --dport xxxx -d your.public.ip.addr -j DNAT --to $PC1_IP
如果遵守规则 – 从本地networking发送到端口xxxx的stream量将被转发到$ PC1_IP