我尝试在 OpenStack 中托管的虚拟 Ubuntu 16.04 计算机的两个接口之间路由数据包。根据我在互联网上找到的信息,这就是我所做的:
# Enable ip forwarding:
sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward = 1' >> net.ipv4.ip_forward = 1
sysctl -p /etc/sysctl.conf
# Update IP tables:
iptables -A FORWARD -i ens3 -o ens4 -j ACCEPT
iptables -A FORWARD -i ens4 -o ens3 -j ACCEPT
现在,这是我的 Linux 路由器接口和路由表:
ens3: 192.168.217.6/24
ens4: 10.0.0.13/24
ip route
default via 10.0.0.1 dev ens4
10.0.0.0/26 dev ens4 proto kernel scope link src 10.0.0.13
169.254.169.254 via 10.0.0.1 dev ens4
192.168.217.0/24 dev ens3 proto kernel scope link src 192.168.217.6
我在 LAN 10.0.0.0/24 上有一台机器,在 LAN 192.168.217.0/24 上有一台机器。两者都将我的 Linux 路由器作为默认网关,但它们无法互相 ping 通。但是,LAN 10.0.0.0/24 上的计算机可以访问 Internet:
traceroute 1.1.1.1
10.0.0.1
...
1.1.1.1
ip route
default via 10.0.0.13 dev eth0
10.0.0.0/24 dev eth0 10.0.0.14
这很奇怪,因为traceoute不使用10.0.0.13,这是我主机的默认网关。
我究竟做错了什么 ?谢谢。