![iptables FORWARD 规则](https://linux22.com/image/1381981/iptables%20FORWARD%20%E8%A7%84%E5%88%99.png)
我正在运行 3 个装有 Fedora 19 的虚拟机。机器 B 设置了两个网络适配器,并在机器 A 和机器 C 之间提供队列通道。
机器 A 的 IP 设置为192.168.1.1
,机器 C 的 IP 设置为172.16.1.1
。机器 BI 上有一个适配器的 IP 为192.168.1.254
,另一个适配器的 IP 为172.16.1.254
。
我在机器 B(它作为路由器工作)上创建了此规则:
iptables -P 输入删除
iptables -A 输入 -p icmp -j 接受
PING
因此,除非允许机器 A 和 B 之间的通信,否则机器之间不会建立任何连接。
现在我想在路由器中创建一个规则,允许HTTPS
外部网络(机器C)和内部网络(机器A)之间的通信
我在机器B中添加了这条规则:
iptables -A FORWARD -o p7p1 -p tcp --dport 443 -d 192.168.1.1 -j ACCEPT
p7p1
机器B上连接机器A的接口在哪里。我也试过:
iptables -A FORWARD -i p8p1 -o p7p1 -p tcp --dport 443 -d 192.168.1.1 -j ACCEPT
p8p1
机器 B 上连接机器 C 的接口在哪里。
现在,在机器 AI 上nc -l 443
和在机器 C 上,nc 192.168.1.1 443
但我得到了Ncat: Connection timed out
我的规则有什么问题?
答案1
您缺少一条允许答案通过防火墙的规则。
我信任 netfilter 的代码及其强大的state
模块,因此我会使用它iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
,这样其他方向的数据包也是被允许的。
在您的规则集中,从 192.168.1.1 到 172.16.1.1 的另一台机器的应答被阻止。
另请参阅有关 iptables 故障排除的文档,例如linuxhomenetworking.com 上有这个并在出现问题时添加日志记录规则。
iptables -A FORWARD -j LOG