我住在一栋楼里,网络位于 NAT 后面。我有一台 Linux 台式电脑和一台笔记本电脑。为了通过 ssh 访问我的桌面,我在台式机、笔记本电脑和 VPS 上运行了 Wireguard VPN。问题是我的桌面和 VPS 之间的连接中断了。
这是 VPS 配置:
[Interface]
Address = 10.9.0.1/24
SaveConfig = false
#PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -$
#PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING$
ListenPort = 51820
PrivateKey = **SERVER PRIVATE KEY**
[Peer]
PublicKey = **LINUX DESKTOP PUBLIC KEY**
AllowedIPs = 10.9.0.2/32
PersistentKeepalive = 5
[Peer]
PublicKey = **LAPTOP PUBLIC KEY**
AllowedIPs = 10.9.0.3/32
PersistentKeepalive = 20
这是 Linux 桌面的配置:
[Interface]
PrivateKey = **LINUX DESKTOP PRIVATE KEY**
Address = 10.9.0.2/24
[Peer]
PublicKey = **SERVER PUBLIC KEY**
Endpoint = *MY ENDPOING IP*
AllowedIPs = 10.9.0.1/32, 10.9.0.3/32
从上面的配置中,您可以看到我不允许0.0.0.0\0
任何客户端。我只想通过 VPS 隧道传输 SSH 流量。如果我只允许来自 SSH 的流量,我的笔记本电脑和 Linux 桌面之间的连接会在一两分钟内断开。要恢复连接,我必须从桌面 ping VPS。
如果我将所有流量都路由到 VPS,就不会发生此问题。但是,我不想这样做(Google Captcha 很烦人,而且我的 VPS 上没有足够的带宽)。
对于如何调试这个问题有什么想法吗?
答案1
尝试将PersistentKeepalive
设置从 VPS WireGuard 配置移至台式机和笔记本电脑 WireGuard 配置。通常,您需要PersistentKeepalive
在 NAT 后面的连接侧,因为它会自动发送保持活动数据包以在 NAT 中“打开一个漏洞”,从而允许非 NAT 侧通过 WireGuard 隧道发起新连接(或重新建立失效的连接)。当您从台式机 ping VPS 时,您正在手动执行相同的操作。