如何排除 WireGuard 路由的 ssh 连接?

如何排除 WireGuard 路由的 ssh 连接?

我有一个 VPS server2,上面安装了一个像 WireGuard peer 这样的服务器,并且已启动并运行。我从移动设备上对其进行了测试,一切正常。配置文件如下:

#Server2 Configuration
[Interface]
PrivateKey = $wgpk
ListenPort = $wgport
Address = 10.10.213.1/24
SaveConfig = false

[Peer]
PublicKey = $wgpub_peer
AllowedIPs = 10.10.231.3/32
PresharedKey = $preshared_key
PersistentKeepalive = $perkeep

server1现在,我想在另一个 VPS 上server2以客户端身份进行连接。但是server1立即激活 WireGuard 会导致 ssh 连接丢失,并且我无法再 ssh 到我的服务器server1来调查问题。我尝试添加 PostUp 路由,以便可以排除 ssh 端口 22,但并没有解决我的问题。配置server1如下:

#Server1 Configuration
[Interface]
PrivateKey = $wgpk_peer
Address = 10.10.231.3/32
DNS = [1.1.1.1, 8.8.8.8]
SaveConfig = false
PostUp = iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination $SERVER

[Peer]
PublicKey = $wgpub
PresharedKey = $preshared_key
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = $SERVER2_public_ip:$wgport
PersistentKeepalive = $perkeep

我这样做的原因是server1使用 vpn 连接来保护我的 ip 地址和数据。如果您知道如何才能保留我的 ssh 访问权限,请帮忙server1

答案1

正如 Tom Yan 所建议的,使用策略路由或为您的 SSH 连接添加静态路由。

要强制 Server1 始终对所有 SSH 连接使用主路由表(而不是使用 WireGuard 设置的路由表),请在 Server1 上运行以下策略路由命令:

$ sudo ip rule add sport 22 table main priority 123

或者,如果您想强制 Server1 始终使用其当前路由到您的本地计算机(而不是使用 WireGuard 设置的路由表),请执行以下操作为其设置静态路由:

首先,通过在 Server1 上运行以下命令确定当前 SSH 会话的 IP 地址:

$ ss -n sport 22
Netid  State   Recv-Q  Send-Q   Local Address:Port   Peer Address:Port Process
tcp    ESTAB   0       0       10.200.200.123:22   198.51.100.234:12345

上面的例子中,该Peer Address列显示的是198.51.100.234从 Server1 的角度来看您的本地计算机的 IP 地址。

接下来,通过在 Server1 上运行以下命令确定 SSH 连接当前正在使用的网关:

$ ip route get 198.51.100.234 sport 22
198.51.100.234 via 10.200.200.1 dev eth0 src 10.200.200.123 uid 1000
    cache

在上面的例子中,via 10.200.200.1 dev eth0输出的一部分显示您的 SSH 连接正在用作10.200.200.1来自 Server1 的网关,通过 Server1 的eth0网络接口。

然后,为了强制 Server1 始终使用此网关来连接来自当前 IP 地址的所有连接,请在 Server1 上运行以下命令:

$ sudo ip route add 198.51.100.234 via 10.200.200.1 dev eth0

请注意,如果您重新启动 Server1,则必须重新运行上述ip route add命令ip rule add(因此您可能希望将它们放在 Server1 启动完成后运行的脚本中)。

相关内容