我有一个原则上看起来像这样的网络:
H1---\ /----Inet1
H2---->---GW1---<
H3---/ \----GW2-----Inet2
- H1 和 H2 = 需要使用 GW1 访问互联网的主机
- Inet1 = 通过 3G 连接的 Internet 链接
- Inet2 = 5GHz 互联网链接(不总是在线)
- GW1 = 作为路由器工作,自动选择 Inet1 和 Inet2 之间的“最佳”连接(后者通过 GW2)。
- GW2 = 5GHz 无线路由器
这就是问题所在: H3 只需要在 Inet2 启动时访问互联网。我想做的是一个看起来像这样的路由表:
- 通过 GW1 到 GW2 的路线
- 默认路由是通过 GW2
我首先毫无问题地通过 GW1 设置了到 GW2 的路由。但是当我尝试
路由添加默认 gw 1.2.3.4
(1.2.3.4 是 GW2 的 IP),它抱怨“SIOCADDRT:没有这样的设备”是我尝试设置的默认 gw 无法直接访问的问题吗?是否有不同的方法可以让我实现这一目标?
另一种(和假设的)方法:由于 H3 将使用静态 IP,是否可以对 GW1 上的 iptables 做一些魔术,将任何数据包从 H3 转发到 GW3,从而“欺骗”H3 使用 GW2 作为其默认路由器?
PS:这个问题是这个问题的后续问题。
您的替代方法可以通过使用基于策略的路由来实现。类似的东西(命令应该在 GW1 上执行):
我无法测试这些命令,但它们应该是正确的。表 999 中的路由规则在正常情况下不可见
$ ip route show
- 您需要附加表 ID$ ip route show table 999
:。由于您的问题很具体,因此答案也很具体:
如何路由数据包的“智能”必须存在于路由器中,而不是终端盒中。所以你的默认网关必须是在同一个子网上可以直接访问的;然后该网关必须弄清楚如何处理这些数据包,以便将它们送到应该去的地方。