我有两台服务器,我们称之为ROUTER和NODE。 NODE是在专有networking172.27.1.64/28,有IP地址172.27.1.69。 路由器也在该专用networking上,IP地址为172.27.1.71。 路由器有一个公共IP地址,我们将在这个例子中调用192.168.50.100。 在ROUTER上,通过接口eth1访问专用networking,通过eth0访问公用networking。 在NODE上,只有eth0连接到专用networking。 还有一个私有子网出现在下面的路由表中,但不应该是相关的(我希望)这个问题。
我想要做的就是把ROUTER当作一个使用NAT的路由器。 NODE应该能够通过ROUTER连接到一般的互联网,但是不能连接到相反的方向。
这里有很多指南,我试图去关注它们,但是我一直无法通过NODE的IP地址或名称来ping或者访问主机。
这是我在configuration方面的:
公共接口位于“公共”区域,私人接口位于“内部”区域。
NODE路由表:
default via 172.27.1.71 dev eth0 unreachable 169.254.169.254 scope host 172.27.1.64/28 dev eth0 proto kernel scope link src 172.27.1.69 172.27.9.192/28 dev eth0 scope link
路由器上的路由表:
default via 192.168.50.1 dev eth0 192.168.50.0/24 dev eth0 proto kernel scope link src 192.168.50.100 unreachable 169.254.169.254 scope host 172.27.1.64/28 dev eth1 proto kernel scope link src 172.27.1.71 172.27.9.192/28 dev eth1 scope link
ROUTER上的FirewallD规则:
# firewall-cmd --direct --get-all-rules ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE
我在ROUTER上另外有了这些规则,因为对每个方向都有特定的规则来接受数据包是有意义的,但是他们的存在或不存在没有任何区别 – 既不ping也不curl也不ssh工作:
ipv4 filter FORWARD 0 -i eth1 -o eth0 -j ACCEPT ipv4 filter FORWARD 0 -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
我通常用firewalld启用伪装:
# firewall-cmd --zone public --query-masquerade yes
而且我已经在内核中转发了IP:
# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1
我试着通过ping 8.8.8.8。 它从ROUTER工作正常,但它不能从NODE工作。 100%的数据包丢失。 使用curl反对google.com的IP地址具有相同的结果:从ROUTER,而不是从NODE。
当然,问题最终变成完全不同的地方。 我需要禁用专用networking接口上的OpenStack的反欺骗。
我可以validation这三条规则在防火墙中是必须的。