Networking

Wireguard 路由

  • November 20, 2020

我已經設置了一個wireguard連接,但是我在路由方面遇到了一些問題。我有兩個位置,其中建立 VPN 的線衛電腦位於網際網路提供商的路由器後面。我可以在一個或另一個位置。這意味著我需要遠端訪問另一個站點才能設置 VPN。VPN 建立成功,但它壞了。由於我無法登錄到遠端位置,我無法再次設置它。我必須等待才能到達另一個位置。由於下述問題,我無法登錄到遠端位置。

我已經設置了對這些電腦的遠端 SSH 訪問,因此我可以通過將 NAT 輸入路由器來通過網際網路訪問它們。我登錄到路由器地址,路由器將 SSH 轉發到內部地址,SSH 訪問工作正常,但有一個問題。

一旦我打開wg0界面並嘗試建立 VPN,SSH 訪問就不再起作用了。我已經分析了流量,並且發生了以下情況。當我啟動 SSH 時,路由器轉發它,wireguard 電腦在介面上接收SYN數據包。eth0但是,當處於活動狀態時,SYN, ACK數據包不是通過eth0,而是通過wg0介面發回wg0的。沒有wg0介面 SSH 工作正常。192.168.1.0/24無論wg0介面如何, SSH 也可以在本地網路中工作。

如何同時保持我的 SSH 連接和使用wireguard VPN 連接?我lan0在那台電腦上有另一個介面,現在沒有連接。我是否lan0也應該連接到 Intranet 並將其用於 SSH?我猜想wireguard的問題仍然存在於lan0介面上,因為它將連接到與eth0.

以下是有關連接、路線等的一些附加資訊。

沒有 wg0 介面:

wg-quick down wg0輸出:

[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0
[#] nft -f /dev/fd/63

ip -4 地址:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
   link/ether 8e:b7:6b:c9:08:7d brd ff:ff:ff:ff:ff:ff
   inet 192.168.1.250/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
      valid_lft 84256sec preferred_lft 84256sec
3: lan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
   link/ether 8e:b7:6b:c9:08:9d brd ff:ff:ff:ff:ff:ff

ip路由:

default via 192.168.1.1 dev eth0 
default via 192.168.1.1 dev eth0 proto dhcp metric 100 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.250 metric 100

ip規則:

0:  from all lookup local
32766:  from all lookup main
32767:  from all lookup default

使用 wg0 介面:

wg-quick up wg0輸出:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.2/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] nft -f /dev/fd/63

ip -4 地址:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
   link/ether 8e:b7:6b:c9:08:7d brd ff:ff:ff:ff:ff:ff
   inet 192.168.1.250/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
      valid_lft 84320sec preferred_lft 84320sec
3: lan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group 
default qlen 1000
   link/ether 8e:b7:6b:c9:08:9d brd ff:ff:ff:ff:ff:ff
14: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
   link/none 
   inet 10.0.0.2/24 scope global wg0
      valid_lft forever preferred_lft forever

ip路由:

default via 192.168.1.1 dev eth0 
default via 192.168.1.1 dev eth0 proto dhcp metric 100 
10.0.0.0/24 dev wg0 proto kernel scope link src 10.0.0.2 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.250 metric 100 

ip規則:

0:  from all lookup local
32764:  from all lookup main suppress_prefixlength 0
32765:  not from all fwmark 0xca6c lookup 51820
32766:  from all lookup main
32767:  from all lookup default

更新: 經過更多測試,我發現 wg-quick 設置了一些 ip 路由和規則。我懷疑這些會破壞 SSH 連接。如果我嘗試以下命令,SSH 仍然有效。

ip link add dev wg0 type wireguard
ip address add dev wg0 10.0.0.2/24
wg set wg0 private-key /root/wgprivate.key
wg set wg0 listen-port 37723
ip link set wg0 up
wg set wg0 peer <key> allowed-ips 0.0.0.0/0 persistent-keepalive 25 endpoint <remote hostname>:<remote port>

由於直到週末我才能訪問遠端站點,因此我將嘗試找出 wg-quick 中的哪些命令導致了不穩定的行為。當我可以訪問遠端站點時,我將在沒有 wg-quick 的情況下再次建立 VPN。我之前已經這樣做了,但想用 wg-quick 自動化它。

經過一番研究,我發現我不希望 wg-quick 在建立連接後進行路由。因此,解決方案非常簡單。放一條線

Table = off

[Interface]部分。這指示 wg-quick 不要製定 ip 規則和路由。

看看這裡,但讓它歸結為你的問題:

您可以使用 iptables 將包標記到目標埠 22

iptables -t mangle -A PREROUTING -i eth0 -p tcp -m tcp --dport 22 -j MARK --set-mark 22

所以你可以插入一個高優先級規則來通過 eth0 路由這些包

ip rule add priority 32000 fwmark 22 table 22
ip route flush table 22
ip route add table 22 default dev eth0

還沒有測試過,可能的副作用是您不再能夠通過 VPN 連接埠 22

引用自:https://unix.stackexchange.com/questions/607313