ssh 透過多個介面 eth0 wlan0 到互聯網

ssh 透過多個介面 eth0 wlan0 到互聯網

我試圖透過不同的介面(在帶有 raspbian strech 的樹莓派上)打開多個反向 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

就是這樣,現在您先前的命令將按預期工作,當您使用 option 聲明來源 IP 時,兩條路由可以同時工作-b

如果您不指定來源 IP,系統將不會立即符合附加規則和路由表,並且將預設為使用主表時所做的選擇:第一個符合的路由將獲勝,從而192.168.1.200在目前設定中選擇來源。

再說一遍,如果你沒有明確指出來源 IP(通常是這種情況),你的主路由仍然會選擇預設預設路由和相應的預設來源 IP,然後規則3276432765確保它在任何情況下都能正常運作。因此,您可以使用指標來選擇優先的路由和 IP。

例如,wlan0在未指定來源 IP 的情況下,現在優先選擇 to have ,增加to have的預設路由202的度量,以便先選擇 IP。明確指定來源 IP 仍將直接符合規則或.先前建立的連線算是“聲明來源IP”,因此不會受到干擾。eth01000wlan03276432765

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

一些附加說明:

  • 請勿嘗試刪除(常用)表中的所有預設路由,否則如果應用程式未聲明來源 IP(「 」),main您的連線將不再建立。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

相關內容