我已经设置了wireguard 连接,但路由遇到一些问题。我有两个位置,建立 VPN 的wireguard 计算机位于互联网提供商的路由器后面。我可以在一个或另一个地点。这意味着我需要远程访问其他站点才能设置 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
无论接口如何,SSH 也可以在本地网络中工作wg0
。
如何同时保持 SSH 连接和使用wireguard VPN 连接?我lan0
在那台计算机上有另一个接口,但目前尚未连接。我lan0
也应该连接到 Intranet 并将其用于 SSH 吗?我猜想wireguard的问题仍然存在于lan0
接口上,因为它将连接到与.net相同的网络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 使其自动化。
答案1
经过一番研究,我发现我不想要 wg-quick 在建立连接后进行的路由。所以,解决方案非常简单。放一条线
Table = off
在[Interface]
部分。这指示 wg-quick 不要制定 ip 规则和路由。
答案2
看一看这里,但让它归结为你的问题:
您可以使用 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