在我正在设置的私有云上,我有几个 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)。