使用 IPTables 在内部网络上访问互联网

使用 IPTables 在内部网络上访问互联网

在我正在设置的私有云上​​,我有几个 RHEL VM、网络和一个 openstack 路由器。我的路由器连接到公共互联网,网关节点连接到路由器,并通过 eth0 访问互联网。节点通过 eth1 连接到内部网络。我有几个内部 RHEL 节点通过其 eth0 接口连接到内部网络。所有节点都可以 ping 通彼此,我相信每个节点的 ifcfg 文件都设置正确。

使用 IPTables,我尝试通过以下方式让内部节点访问互联网:

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT  
iptables -A FORWARD -i eth0 -o eth1 -m conntrack -ctstate ESTABLISHED,RELATED -j ACCEPT  
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

我还在内核级别启用了 ipv4 转发(默认情况下禁用)。保存配置并通过 SSH 进入内部节点后,我无法 ping 外部地址:

# ping 8.8.8.8
connect: Network is unreachable

我在 openstack 中的路由器有一个静态路由,其中
​​目标 CIDR:我的内部网络
下一跳:我的网关节点

为什么我的内部节点无法访问互联网?我这里遗漏了什么?

答案1

可能是你没有在内核中启用转发 -

尝试

echo 1 > /proc/sys/net/ipv4/forward

如果这样解决了问题,请通过编辑 /etc/sysctl.conf 并添加以下行使其永久生效

net.ipv4.ip_forward = 1

答案2

Network is unreachable表示没有定义到达 8.8.8.8 的路由。这很可能是虚拟机直接返回的问题,问题出在虚拟机上,而不是主机上。

OpenStack 有很多不同的可能的网络配置。您只写了“网络”,而没有提供任何有关虚拟机 IP 的信息。希望没有未知的设置(中间网络和中间 NAT),在每个虚拟机上,您需要通过路由器eth1接口上设置的 IP 添加默认路由。如果此 IP 为 10.0.2.1,则这样做:

ip route add default via 10.0.2.1

对于永久设置,应将其添加到其特定的配置文件中(参见静态路由和默认网关来自 Redhat)。

相关内容