我有一台多宿主 Ubuntu 12.04 服务器。我有两个网络接口连接到两个不同的 IP 范围。
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 190.113.X.X/29 brd 190.113.98.183 scope global eth1
(...)
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 10.100.100.21/24 brd 10.100.100.255 scope global eth0
(...)
每当我尝试从不属于该10.100.100.X
网络的另一个子网访问 eth0 链路上的服务器时,我都得不到任何响应。我已经iptables
在服务器中运行(假设它在 eth1 中有一个公共 IP),但我允许 eth0 链路上来自私有网络的所有流量。
如果我tcpdump
在服务器界面上执行此操作,我会得到这个(我的电脑是10.100.102.22
):
18:30:23.813889 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.100.102.22 tell 10.100.100.21, length 28
18:30:24.810691 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.100.102.22 tell 10.100.100.21, length 28
18:30:25.810718 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.100.102.22 tell 10.100.100.21, length 28
我可以从服务器 ping 通我的电脑:
PING 10.100.102.22 (10.100.102.22) 56(84) bytes of data.
64 bytes from 10.100.102.22: icmp_req=1 ttl=63 time=0.273 ms
64 bytes from 10.100.102.22: icmp_req=2 ttl=63 time=0.324 ms
路由表如下:表1:
default via 10.100.100.1 dev eth0
10.0.0.0/8 dev eth0 scope link src 10.100.100.21
表 2:
default via 190.113.X.X dev eth1
190.113.X.X/29 dev eth1 scope link src 190.113.X.X
默认:
default via 10.100.100.1 dev eth0 metric 100
10.100.100.0/24 dev eth0 proto kernel scope link src 10.100.100.21
190.113.X.X/29 dev eth1 proto kernel scope link src 190.113.X.X
答案1
客户端还需要知道到 10.100.100.0/24 网络的路由。
所以你要么需要在客户端添加一条路由
ip r a 10.100.100.0/24 via 10.100.100.1 dev eth0
或者您需要在客户端正在使用的默认网关上添加路由。
您可以这样想:客户端需要知道如何到达 10.100.100.21,如果不知道,它将尝试默认网关,如果网关不知道,那么您就倒霉了。