我有一台配置为路由器的服务器(Debian 7 Stable)。eth0 连接到我的电缆调制解调器,eth1 连接到 24 端口交换机。DHCP、DNS、路由、流量都正常工作。我似乎唯一无法正常工作的是端口转发。我想将流量从端口 65010 转发到 172.16.254.10,但超时了。以下是我编写的脚本:
#!/bin/bash
# init
## Flush current configuration:
iptables -F
iptables -t nat -F
iptables -t mangle -F
## Delete current chains:
iptables -X
iptables -t nat -X
iptables -t mangle -X
## Set policy
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
## Allow routing between eth0 and eth1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -j ACCEPT
## Allow internal SSH:
iptables -A INPUT -s 172.16.254.0/24 -m state --state NEW \
-p tcp -m multiport --dports 65001,65010 -j ACCEPT
## Allow external SSH:
iptables -A INPUT -p tcp -m multiport --dports 65001,65010 -j ACCEPT
## Allow port forwarding for SSH:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 65010 \
-j DNAT --to-destination 172.16.254.10
## Required for internal host name resolution to function:
iptables -I INPUT -s 172.16.254.0/24 -p udp --dport 53 -j ACCEPT
iptables -I INPUT -s 172.16.254.0/24 -p tcp --dport 53 -j ACCEPT
## Required for Samba to function:
iptables -A INPUT -s 172.16.254.0/24 -m state --state NEW -p tcp \
-m multiport --dports 137,138,139,445 -j ACCEPT
iptables-save > /etc/iptables.rules
答案1
尝试使用:
iptables -A FORWARD -i eth0 -p tcp --dport 65010 -d 172.16.254.10 -j ACCEPT
另一方面,您没有设置任何默认策略来 DROP,也没有在任何链中添加任何“-j DROP”规则来捕获不匹配的流量,因此一切都是允许的。
最后,您可能需要在 DNAT 规则中添加目标的端口号:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 65010 -j DNAT \
--to-destination 172.16.254.10:65010
尝试运行 tcpdump 或 wireshark 之类的程序,以确保数据包正确转发到内部目的地。