Asuswrt/Ubuntu 18.04 通过终端获取所有网络接口的网关



我在编写用于路由家庭网络的脚本中遇到了问题。基本上在我的路由器上,我有 3 个接口(WAN 和 2 个 VPN 隧道(,客户端应该在 sourceIP 的基础上通过这些接口之一进行路由。

实际上,该脚本在运行 Asuswrt-merlin 的华硕路由器(wan 和 1 vpn(上运行,但我正在尝试为 1 个 wan 和 2 个 vpn 编写它,它最终甚至可以在 Asuswrt 和 ubuntu 上运行,因此使用基本的 shell 命令(但我想如果它适用于 merlin,它也可以在其他两个上运行(。

测试脚本工作正常,但我不得不对 2 个 tun 接口的网关进行硬编码,因为我没有找到从 ifconfig/ip route/ip a/等 shell 命令中提取此类信息的方法。

更具体地说,这三个接口是基于 dhcp 的。 WAN 接口指向我网络中的另一个路由器,因此网关是已知的。这是默认路由(默认...通过。。。dev eth0(

tun11 和 tun12 连接到 vpn 提供商 (openvpn(,但只有完成连接的第一个接口才会以"0.0.0.0/1...通过 [IP] dev tun1X",从而显示其网关(通过 [IP](。

另一个没有得到,我在其他地方找不到第三个网关 ip。当然,如果我无法动态获取此信息,脚本将变得毫无用处。

编辑:

ip route show table all
192.168.200.200 dev eth0  table wan0  proto kernel  scope link
YYY.YYY.YYY.116 via 192.168.200.200 dev eth0  table wan0
10.12.134.0/25 dev tun12  table wan0  proto kernel  scope link  src     10.12.134.2
192.168.200.0/24 dev eth0  table wan0  proto kernel  scope link  src 192.168.200.254
10.0.0.0/24 dev br0  table wan0  proto kernel  scope link  src 10.0.0.254
127.0.0.0/8 dev lo  table wan0  scope link
default via 192.168.200.200 dev eth0  table wan0
192.168.200.200 dev eth0  proto kernel  scope link
YYY.YYY.YYY.116 via 192.168.200.200 dev eth0
XXX.XXX.XXX.96/27 dev tun11  proto kernel  scope link  src XXX.XXX.XXX.98
10.12.134.0/25 dev tun12  proto kernel  scope link  src 10.12.134.2
192.168.200.0/24 dev eth0  proto kernel  scope link  src 192.168.200.254
10.0.0.0/24 dev br0  proto kernel  scope link  src 10.0.0.254
127.0.0.0/8 dev lo  scope link
0.0.0.0/1 via XXX.XXX.XXX.97 dev tun11
128.0.0.0/1 via XXX.XXX.XXX.97 dev tun11
default via 192.168.200.200 dev eth0
broadcast XXX.XXX.XXX.96 dev tun11  table local  proto kernel  scope link src XXX.XXX.XXX.98
broadcast 192.168.200.0 dev eth0  table local  proto kernel  scope link  src 192.168.200.254
broadcast 127.255.255.255 dev lo  table local  proto kernel  scope link  src 127.0.0.1
local XXX.XXX.XXX.98 dev tun11  table local  proto kernel  scope host  src XXX.XXX.XXX.98
broadcast 10.12.134.127 dev tun12  table local  proto kernel  scope link  src 10.12.134.2
local 10.0.0.254 dev br0  table local  proto kernel  scope host  src 10.0.0.254
local 127.0.1.1 dev lo  table local  proto kernel  scope host  src 127.0.0.1
broadcast 10.0.0.255 dev br0  table local  proto kernel  scope link  src 10.0.0.254
local 192.168.200.254 dev eth0  table local  proto kernel  scope host  src 192.168.200.254
broadcast 192.168.200.255 dev eth0  table local  proto kernel  scope link  src 192.168.200.254
local 10.12.134.2 dev tun12  table local  proto kernel  scope host  src 10.12.134.2
broadcast 10.12.134.0 dev tun12  table local  proto kernel  scope link  src 10.12.134.2
broadcast XXX.XXX.XXX.127 dev tun11  table local  proto kernel  scope link  src XXX.XXX.XXX.98
local 127.0.0.1 dev lo  table local  proto kernel  scope host  src 127.0.0.1
broadcast 10.0.0.0 dev br0  table local  proto kernel  scope link  src 10.0.0.254
local 127.0.0.0/8 dev lo  table local  proto kernel  scope host  src 127.0.0.1
unreachable default dev lo  table 0  proto kernel  metric 4294967295  error -101 hoplimit 255
unreachable default dev lo  table 0  proto kernel  metric 4294967295  error -101 hoplimit 255

从这里我可以获取所有相关信息(子网、ip、网关(,但不能获取 tun12 网关。它不会被添加。

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.200.200 0.0.0.0         255.255.255.255 UH    0      0        0 eth0
YYY.YYY.YYY.116 192.168.200.200 255.255.255.255 UGH   0      0        0 eth0
XXX.XXX.XXX.96  0.0.0.0         255.255.255.224 U     0      0        0 tun11
10.12.134.0     0.0.0.0         255.255.255.128 U     0      0        0 tun12
192.168.200.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 br0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         XXX.XXX.XXX.97  128.0.0.0       UG    0      0        0 tun11
128.0.0.0       XXX.XXX.XXX.97  128.0.0.0       UG    0      0        0 tun11
0.0.0.0         192.168.200.200 0.0.0.0         UG    0      0        0 eth0

也不在这里... 此外,与两个 VPN 关联的特定路由表为空(表 111 和 112(

编辑: 为了进一步澄清这个问题,到目前为止,我可以得到(使用上面的输出(:

WAN IP:      192.168.200.254
WAN subnet:  192.168.200.0/24
WAN gateway: 192.168.200.200
tun11 IP:      XXX.XXX.XXX.98
tun11 subnet:  XXX.XXX.XXX.96/27
tun11 gateway: XXX.XXX.XXX.97
tun12 IP:      10.12.134.2
tun12 subnet:  10.12.134.0/25
tun12 gateway: ???

我需要 tun12 网关使用我的脚本为其正确构建路由规则。 我错过了什么?或者真的无法做到这一点,因为网络似乎缺乏解决方案。 提前感谢!

到目前为止,我无法在asuswrt或ubuntu中找到Windows"ipconfig/all"的相应命令。 我确定我错过了一些东西。在Windows上运行该命令时,您可以随时看到所有网络接口及其当前ip/subnet/gateway/dns的列表。

我想无论如何我都找到了解决这个问题的方法。 只是为了再次总结问题,这就是我的系统中实际发生的情况

  1. 广域网接口出现
  2. 在 IP 路由主表中添加了"默认通过 WANGATEWAYIP 开发 WANINTERFACE"路由
  3. tun11 (VPN1( 接口启动
  4. 在 IP 路由主表中添加了"0.0.0.0/1 通过 VPN1GATEWAYIP dev tun11"路由
  5. tun12 (vpn2( 接口出现
  6. 在 IP 路由主表中没有添加任何内容,因为(我认为(已经有一个"默认"路由和一个"0.0.0.0/1"路由。

这样我就可以获得 wan、tun11 的网关,但不能获得 tun12 的网关。而且由于我没有"ipconfig/all"之类的东西,我没有找到另一种方法来获取此网关 ip。

我发现的解决方法是这样的:

  1. 当 tun11 接口出现时,脚本扫描 IP 路由主表 对于"0.0.0.0/1"路由并保存网关 IP(然后我使用它来 在自定义 IP 路由表中构建适当的默认规则,其中所有 该接口的流量路由到通过标记(
  2. 然后,脚本从 IP 路由表中删除"0.0.0.0/1"路由 主要
  3. 当 tun12 接口出现新的"0.0.0.0/1"路由时 已成功添加(因为前一个已被删除(
  4. 该脚本读取 tun12 网关 IP 并构建默认路由 在另一个表中。

它现在已经工作了大约十天,但我想我迟早会因为不同步而遇到一些问题。 我真的不喜欢这种方法,所以如果有人能提出更好的方法,那就太好

了谢谢

最新更新