通过多个接口 eth0 wlan0 ssh 到互联网

通过多个接口 eth0 wlan0 ssh 到互联网

我正在尝试通过不同的接口(在带有 raspbian strech 的 raspberry pi 上)打开多个反向 ssh 隧道以实现后备。

话虽如此,我在通过不同接口打开传出的 ssh 连接时确实遇到了问题。目前有:

  • eth0 作为静态 IP(192.168.1.200)
  • wlan0 通过 dhcp(192.168.178.100)

将 ssh 绑定到 IP 地址对“eth0”有效,但对“wlan0”无效:

  • ssh -b 192.168.1.200 user@externalip工作中
  • ssh -b 192.168.178.100 user@externalip不是在职的

除此之外,我可以通过两个接口跟踪到互联网的路由:

  • ssh -b 192.168.1.200 user@externalip工作中

sudo traceroute -i wlan0 google.com

traceroute to google.com (172.217.21.14), 30 hops max, 60 byte packets
 1  192.168.178.1 (192.168.178.1)  12.528 ms  17.229 ms  21.757 ms
 2  192.0.0.1 (192.0.0.1)  26.576 ms  41.445 ms  47.408 ms ...
  ...

sudo traceroute -i eth0 google.com

traceroute to google.com (172.217.21.14), 30 hops max, 60 byte packets
 1  192.168.1.1 (192.168.1.1)  0.537 ms  0.404 ms  0.570 ms
  ...

知道如何让两个接口上的 ssh 都工作吗?

路线-n:

0.0.0.0         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
0.0.0.0         192.168.178.1   0.0.0.0         UG    303    0        0 wlan0
192.168.0.0     0.0.0.0         255.255.252.0   U     202    0        0 eth0
192.168.178.0   0.0.0.0         255.255.255.0   U     303    0        0 wlan0

答案1

默认情况下,仅使用(主)路由表中的第一个匹配条目来确定到目的地的路由。此外,未在此匹配条目上收到的数据包将被丢弃,因为rp_filter

您的设置需要策略路由:现在,路由不仅必须取决于目的地,还必须取决于源,方法是将多条路由存储在多个路由表中,并根据源选择合适的路由表。 前面的陈述仍然正确:将选择表中的第一个匹配路由,但它可能会从(一个)不同的表中选择。

main因此,您首先设置额外的路由表(“任意”选择表值)来补充仅使用该表无法实现的功能:

ip route add table 1921681    default via 192.168.1.1 dev eth0
ip route add table 192168178  default via 192.168.178.1 dev wlan0

然后使用正确的源选择器来选择合适的表ip rule。这里仅添加一条新规则就足够了,但是为了对称,将同时添加两条规则,以便在主路由表上提供更大的灵活性,例如在更改度量标准时(请参阅下文):

ip rule add from 192.168.0.0/22   lookup 1921681
ip rule add from 192.168.178.0/24 lookup 192168178

现在的规则是:

# ip rule
0:  from all lookup local 
32764:  from 192.168.178.0/24 lookup 192168178 
32765:  from 192.168.0.0/22 lookup 1921681 
32766:  from all lookup main 
32767:  from all lookup default 

将条目32764et视为查找通常表的32765条目的例外。32766main

就是这样,现在您之前的命令将按预期工作,当您使用选项声明源 IP 时,两个路由可以同时工作-b

如果您不声明源 IP,系统将不会立即匹配附加规则和路由表,而是默认使用主表时所做的选择:第一个匹配的路由将获胜,从而192.168.1.200在您当前设置中选择源。

再重复一遍,如果你没有明确说明源 IP(通常情况下),你的主路由仍然会选择默认默认路由和相应的默认源 IP,那么规则3276432765将确保它无论在什么情况下都能正常工作。因此,您可以使用指标来选择哪个路由和 IP 优先。

例如,wlan0现在在未声明源 IP 时优先选择 ,将202的度量增加到 ,eth01000使 成为wlan0默认路由,从而优先选择 IP。明确声明源 IP 仍将直接匹配规则3276432765。先前建立的连接计为“声明源 IP”,因此不会受到干扰。

ip route add default via 192.168.1.1 dev eth0 metric 1000
ip route del default via 192.168.1.1 dev eth0 metric 202

一些补充说明:

  • 请勿尝试删除main(通常)表中的所有默认路由,否则如果应用程序未声明源 IP(“ Network is unreachable”),则您的连接将无法再建立。
  • 可能存在更复杂的情况,包括在两个不同的网络上拥有相同的 IP,但这将需要额外的设置,并且可能需要 netfilter 和 的帮助iptables
  • 甚至可以使用以下方法对这些路由进行负载平衡:iptables分数并在 中使用这些标记作为选择器ip rule,但要让它在所有情况下都能正常工作会更加复杂,尤其是在混合使用源 IP 已声明和源 IP 由系统选择的连接时,以及对于 UDP 尤其如此。然后,它可能还需要笨拙地使用 NAT 和放松rp_filter

答案2

确保已启用接口

ip link set dev eth0 up
ip link set dev wlan0 up

相关内容