我有一个实例/虚拟机,有以下 3 个接口
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9000
inet 10.34.154.3x netmask 255.255.254.0 broadcast 10.34.155.255
inet6 fe80::f816:3eff:feaa:7ced prefixlen 64 scopeid 0x20<link>
ether fa:16:3e:aa:7c:ed txqueuelen 1000 (Ethernet)
RX packets 33670 bytes 22184129 (21.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 30600 bytes 6280478 (5.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9000
inet 10.34.148.5x netmask 255.255.254.0 broadcast 10.34.149.255
inet6 fe80::f816:3eff:feb8:83ac prefixlen 64 scopeid 0x20<link>
ether fa:16:3e:b8:83:ac txqueuelen 1000 (Ethernet)
RX packets 1712 bytes 106586 (104.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 86 bytes 6172 (6.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9000
inet 10.34.150.1x netmask 255.255.254.0 broadcast 10.34.151.255
inet6 fe80::f816:3eff:fee2:5a68 prefixlen 64 scopeid 0x20<link>
ether fa:16:3e:e2:5a:68 txqueuelen 1000 (Ethernet)
RX packets 131 bytes 9929 (9.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 74 bytes 5432 (5.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我的路由表创建如下
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.34.154.1 0.0.0.0 UG 0 0 0 eth0
10.34.148.0 0.0.0.0 255.255.254.0 U 0 0 0 eth1
10.34.148.59 10.34.148.1 255.255.255.255 UGH 0 0 0 eth1
10.34.150.0 0.0.0.0 255.255.254.0 U 0 0 0 eth2
10.34.154.0 0.0.0.0 255.255.254.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1004 0 0 eth2
我的问题是我只能从配置的接口 ping 通网关 IP,例如:1. 我可以从 eth1 ping 通网关 IP 10.34.148.1,但不能从 eth0 或 eth2 ping 通 2. 我可以从 eth2 ping 通网关 IP 10.34.150.1,但不能从 eth0 或 eth1 ping 通
另外,我只能从外部网络访问 eth0 IP(10.34.154.3x),但无法访问 eth1 和 eth2 IP
在询问网络管理员时,他认为问题出在上面的路由表上。路由表不应该有如下条目
10.34.148.59 10.34.148.1 255.255.255.255 UGH 0 0 0 eth1
因为,我们不应该使用网关访问本地接口。
为了解决这个问题,他建议创建/定义一个新的路由表条目,如下所示
cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
200 dnstraf
201 rt1 //creating new definition
创建新规则
cat rule-eth1
from 10.34.148.157 table rt1
并在 /etc/sysctl.conf 中为 arp 添加此行
net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.default.arp_filter = 1
因此新的路由表应如下所示
ip route show table rt1
default via 10.34.148.1 dev eth1
10.34.148.0/23 dev eth1 scope link
经过这些改变,ping 开始正常工作。
所以我的问题是,我的路由表出了什么问题?建议的解决方法是解决问题的正确方法吗?还是操作系统中有什么我应该注意的?
答案1
如果您在尝试 PING 的子网中有一个本地接口(IP 地址),则可以使用该接口。如果您将接口指定为源以 ping 不同子网中的网关,则路由器需要能够相互访问。如果它们无法相互访问,则它们会将您的请求转发到其(路由器的)默认网关,直到达到 PING 的 TTL 并丢弃。如果网关/路由实例位于防火墙系统上,则策略可能会阻止/丢弃 ICMP(PING)。其中一个原因可能是您无法 PING 网关的原因。
此外,路由表缺少条目。每个接口都应该有一个255.255.255.255
带有网络掩码/genmask 的条目(此条目将本地接口绑定到相应的 IP)。这使得很难真正了解您的配置中存在什么问题。