通过WireGuard解决ssh和RustDesk被阻断问题
目录
通过WireGuard解决ssh和RustDesk被阻断问题
最近ssh和ruskdesk突然不可用,分别报错kex_exchange_identification: read: Connection reset和os error 10054,可能是被防火墙或者DPI(Deep Packet Inspection 深度包检测)阻断了。尝试配置WireGuard作为VPN加密来解决问题。
服务端配置
首先安装wireguard:
# Ubuntu/Debian
sudo apt update
sudo apt install wireguard wireguard-tools -y生成服务端密钥对:
# 创建WireGuard配置目录
sudo mkdir -p /etc/wireguard
cd /etc/wireguard
# 生成私钥(服务器的私钥)
wg genkey | sudo tee server_private.key
sudo chmod 600 server_private.key
# 生成公钥
sudo cat server_private.key | wg pubkey | sudo tee server_public.key
# 查看并保存公钥(需要给客户端配置用)
sudo cat server_public.key然后创建配置文件wg0.conf:
[Interface]
# 服务器的私钥(从server_private.key复制)
PrivateKey = <服务器私钥>
# 服务器的WireGuard内网IP(选择10.0.0.x网段)
Address = 10.0.0.2/24
# 监听端口(UDP)
ListenPort = 51820
# 可选:MTU设置(避免分片问题)
MTU = 1420
[Peer]
# 客户端的公钥(需要从客户端获取)
PublicKey = <客户端公钥>
# 允许客户端使用的内网IP(分配给它10.0.0.1)
AllowedIPs = 10.0.0.1/32
# 保持连接(对于NAT后的客户端很重要)
PersistentKeepalive = 25在防火墙开放端口51820的udp协议。如果服务商有安全组配置,在安全组也开放端口。
最后设置服务为开机自启并启动服务:
# 设置为开机自启
sudo systemctl enable wg-quick@wg0
# 启动WireGuard接口
sudo wg-quick up wg0
# 查看状态
sudo wg show
# 停止WireGuard接口
# sudo wg-quick down wg0客户端配置
在官网下载客户端,安装后打开,选择 新建隧道 -> 新建空隧道,就会自动生成密钥对,将公钥填入服务器配置。
客户端配置如下:
[Interface]
# 客户端的私钥(自动生成)
PrivateKey = <客户端私钥>
# 客户端的WireGuard内网IP(选择10.0.0.x网段)
Address = 10.0.0.1/24
[Peer]
# 服务器的公钥(从服务器获取)
PublicKey = <服务器的公钥>
# 服务器的公网IP和端口
Endpoint = <服务器的公网IP>:51820
# 允许的IP段(让发往RustDesk的流量走隧道)
AllowedIPs = 10.0.0.0/24
# 保持连接
PersistentKeepalive = 25配置完成后,确保服务端启动了wg服务,然后就可以连接测试。此时ssh服务应该已经可用。
# 测试网络是否联通
ping 10.0.0.2
## 测试ssh服务是否可用
ssh root@10.0.0.2RustDesk配置
此时虽然ssh可用,但RustDesk仍不可用,需要进行额外配置。
打开客户端设置,在网络 -> ID/中继服务器中,修改ID服务器地址。
理论上这里修改为内网ip10.0.0.2就可用,但我测试时失败。我的解决方法是使用用一个域名rustdesk.example.com,配置DNS解析指向服务器的公网ip,同时在客户端修改host文件指向内网ip:
notepad C:\Windows\System32\drivers\etc\hosts# 在文件末尾添加
10.0.0.2 rustdesk.example.com然后修改客户端的ID服务器地址为rustdesk.example.com后连接成功。如果还是不行,也可以尝试在客户端显示指定中继服务器,或者服务端的hbbs通过-r选项指定中继。
故障排查清单
- 服务端
sudo wg show显示latest handshake - 云服务商安全组开放
UDP 51820 - 客户端能
ping 10.0.0.2 - RustDesk 服务端运行:
docker logs rustdesk-hbbs - 防火墙开放
21115-21119/tcp和21116/udp