bgp 路由的同一子网中的 IP 没有到主机的路由

网络工程 路由 bgp arp 感知
2021-08-01 02:30:03

我已经设置 BGP 为 192.168.1.0/24 范围内的地址子集执行一些自定义路由。

在此处输入图片说明

我已经通过在不同子网(在 192.168.2.0/24 范围内)的不同主机上测试 ping/curl 来验证 BGP 是否正常工作,因此我认为路由配置工作正常。我还验证了可以从 pfsense 访问 IP。

但是,no route to host当尝试从同一子网中的主机访问 IP 时,ping 和 curl 会失败并显示一条消息。

curl -v http://192.168.1.11
* Rebuilt URL to: http://192.168.1.11/
*   Trying 192.168.1.11...
* connect to 192.168.1.11 port 80 failed: No route to host
* Failed to connect to 192.168.1.11 port 80: No route to host
* Closing connection 0
curl: (7) Failed to connect to 192.168.1.11 port 80: No route to host

Arp 显示(incomplete)路由到的 IP,我虽然很奇怪,但也许是正常的?

arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.1.1              ether   40:62:31:00:52:40   C                     eth0
...
192.168.1.11                     (incomplete)                              eth0

这是子网中主机的路由。

ip route
default via 192.168.1.1 dev eth0
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1 linkdown
172.18.0.0/16 dev br-f1b94ce4ec9c  proto kernel  scope link  src 172.18.0.1 linkdown
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.154

我偶然发现了一篇我认为是在描述我的情况的帖子,其中 IP 重定向导致主机不使用路由,但在更新net.inet.ip.redirectnet.inet6.ip6.redirect值(并重新启动 pfsense)后,我仍然遇到同样的问题。有没有办法强制同一子网中的 IP 使用正确的路由?

编辑:更新网络拓扑

在此处输入图片说明

2个回答

问题是因为目标与客户端为目标 IP 解析的同一子网中,而不是您的 pfsense 框的 IP。默认情况下,您的 pfsense 框不会响应对该 IP 的 arp 请求,因此流量永远不会到达 pfsense 框。

通常的做法是在不同网络的不同子网中使用 IP,但有时您会遇到无法更改的 IP。

我本人不是 pfsense 用户,但我相信,如果您确实需要保留当前地址,解决方法是将 IP 添加到 pfsense 框上的接口中作为“代理 arp”IP。这会将流量带入 /32 路由可以路由它的 pfsense 框。

http://pfsensesetup.com/tag/proxy-arp/

PS 请注意,“没有到主机的路由”至少可以出现在两种不同的场景中。一种是路由表中没有路由的地方。另一个是从路由表确定的“下一跳”IP 没有 arp 响应。

路由器和 BGP 与源和目标在同一网络上的问题无关。与源位于同一网络中的目标不使用路由器,它们通过第 2 层协议直接从主机到主机传送。ICMP 消息和 ARP 表中缺少条目意味着目标主机没有响应 ARP 请求来告诉源主机目标 MAC 地址是什么,并且 ARP 请求超时,因此源主机中的网络堆栈生成并将 ICMP 错误返回给应用程序。

您没有正确描述网络或提供图表或其他信息以提供进一步帮助。


编辑您的图表:

问题是您不了解网络层,不了解路由器与交换机的不同之处,以及主机如何处理第 2 层帧。路由器在网络之间路由,而不是从一个网络返回到同一个网络,因此每个路由器接口必须在不同的网络中。路由器剥离第 2 层帧以到达第 3 层数据包,并查看路由表以确定将数据包发送到何处。路由器不转发广播,这是 ARP 使用的。

主机将屏蔽目标地址以查看目标是否在同一网络上。如果是,则尝试使用 ARP 查找 MAC 地址并将第 2 层帧直接发送到目的地。只有当目的地在不同的网络上时,主机才会将帧寻址到配置的网关(路由器)。您遇到的问题是第 2 层帧永远不会发送,因为目标主机没有响应,因为它位于路由器的另一侧。


此外,路由协议不路由数据包路由协议只是与邻居路由器交换路由信息。路由器使用它们的路由表来路由数据包。路由协议是填充路由表的一种方式。直接连接的网络是另一种方式,它优先于路由协议学习的等效路由。路由器将自动在其直接连接的网络之间路由流量,即使它不运行路由协议。