默认路由不在 LAN 上

默认路由不在 LAN 上

我有一个原则上如下所示的网络:

H1---\           /----Inet1
H2---->---GW1---<
H3---/           \----GW2-----Inet2
  • H1 和 H2 = 需要通过 GW1 访问互联网的主机
  • Inet1 = 通过 3G 连接进行互联网链接
  • Inet2 = 5GHz 互联网连接(并非始终在线)
  • GW1 = 作为路由器工作,自动选择 Inet1 和 Inet2 之间的“最佳”连接(后者通过 GW2)。
  • GW2 = 5GHz wifi 路由器

问题如下: 仅当 Inet2 启动时,H3 才需要互联网访问。我当时想做的是制作一个如下所示的路由表:

  • 通过 GW1 路由到 GW2
  • 默认路由是通过 GW2

我首先设置了通过 GW1 到 GW2 的路线,没有任何问题。但是当我尝试

路由添加默认网关 1.2.3.4

(1.2.3.4 是 GW2 的 IP),它抱怨“SIOCADDRT:没有这样的设备”问题是否在于我尝试设置的默认 gw 无法直接访问?有没有其他方法可以让我实现这一点?

另一种(假设的)方法:由于 H3 将使用静态 IP,是否可以使用 GW1 上的 iptables 做一些神奇的事情,将任何数据包从 H3 转发到 GW3,从而“欺骗” H3 使用 GW2 作为其默认路由器?

附言:这个问题这是这个问题的后续问题。

答案1

您可以使用基于策略的路由来实现替代方法。类似于以下内容(应在 GW1 上执行命令):

# Create rule for matching the source address in route table 999
ip rule add from 1.2.3.4/32 table 999
# Add default router to the table
ip route add default via <GW2> table 999

我没有机会测试这些命令,但它们应该是正确的。表 999 中的路由规则在正常情况下不可见$ ip route show- 您需要附加表 id: $ ip route show table 999

答案2

由于您的问题不够具体,答案也不会太具体:

  1. 将 H3 的默认网关设置为 GW1。
  2. 让 GW1 始终将流量从 H3 路由到 GW2。

如何路由数据包的“智能”必须存在于路由器中,而不是终端设备中。因此,您的默认网关必须是可在同一子网上直接访问的网关;该网关必须弄清楚如何处理数据包,以便将它们送到应该去的地方。

相关内容