默认路由不在LAN上

我有一个networking,原则上是这样的:

H1---\ /----Inet1 H2---->---GW1---< H3---/ \----GW2-----Inet2 
  • H1和H2 =需要使用GW1访问互联网的主机
  • Inet1 =通过3G连接的互联网链接
  • Inet2 = 5GHz链接到互联网(并不总是)
  • GW1 =作为路由器,自动selectInet1和Inet2(后者通过GW2)之间的“最佳”连接。
  • GW2 = 5GHz无线路由器

而这里的问题是:当Inet2启动时,H3只需要上网。 我在做的是一个路由表,看起来像这样:

  • 通过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上执行):

 # 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 

我没有可能testing命令,但他们应该是正确的。 表999中的路由规则在正常的$ ip route show中不可见 – 您需要附加表id: $ ip route show table 999

既然你的问题是关于细节的,那么答案也会很明确:

  1. 将H3的默认网关设置为GW1。
  2. GW1总是将stream量从H3路由到GW2。

如何路由数据包的“智能”必须驻留在路由器中,而不是terminal盒中。 所以你的默认网关必须是一个可以在同一个子网上直接访问的网关。 那么网关必须弄清楚如何处理数据包,以便将数据包传送到任何地方。