我有一个多宿主Linux路由器:
- eth0:“普通”单播 IP 地址,全局可达,单一默认路由
- eth1:连接到互联网交换中心,不是全球可达,有大量路由
服务器运行 frr 并从 IX 对等体接收大量路由。默认情况下,当连接到从 IX 接收路由的某个 IP 地址时,该路由的下一跳是通过 eth1,因此 Linux 使用 eth1 IP 地址作为源 IP。这当然行不通,因为 IX IP 地址不是全局可达的。
因此,我需要告诉 Linux,对于传出连接,始终使用 eth0 的 IP 地址,无论使用哪条路由。
我发现https://blog.sdn.clinic/2022/10/influencing-linux-source-address-selection-on-routes-installed-by-bird-and-frr/并在 frr 路线图中尝试了“set src”方法,但无论出于什么原因,这对我来说都不起作用:
route-map from-peer-v4 permit 11
description Mark prefixes from peers or transit to filter them outgoing
set community 1921:0
set src 185.222.xx.xx
exit
Linux 中是否有其他方法可以为所有传出连接全局指定源 IP?
答案1
我现在找到了一种不同的方法:使用 FRR 的路由图选项,将从互联网交换机收到的所有路由存储在专用路由表中set table X
。
服务器有一个用于管理的 IP 地址(嘘……)和一个用于服务的 IP 地址。使用ip rule add from <service-IP> table 2
,来自服务 IP 的流量使用来自 IX 的路由。服务器的正常管理流量现在只能看到默认路由,因此始终使用 eth0 IP 地址作为源 IP。