使用 WireGuard VPN 加密连接服务器
第一部分:在服务器上安装和配置 WireGuard (服务端)
步骤 1: 安装 WireGuard
# Ubuntu/Debian
sudo apt update && sudo apt install wireguard
# CentOS/RHEL/Fedora
sudo dnf install wireguard-tools # 或 sudo yum install epel-release && sudo yum install wireguard-tools
步骤 2: 生成服务器密钥对
# 生成私钥和公钥
cd /etc/wireguard/
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
步骤 3: 创建服务器配置文件
创建配置文件 /etc/wireguard/wg0.conf:
[Interface]
# 服务器自身的地址
Address = 10.0.0.1/24
# 监听端口
ListenPort = 51820
# 步骤2生成的服务器私钥
PrivateKey = <SERVER_PRIVATE_KEY>
# 可选:设置流量转发(如果你还想让客户端通过服务器上网则需要)
#PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# 这是为你的客户端配置
# 客户端的公钥 (待会会在客户端生成)
PublicKey = <CLIENT_PUBLIC_KEY>
# 允许该客户端使用的IP地址
AllowedIPs = 10.0.0.2/32
请将 <SERVER_PRIVATE_KEY> 和 <CLIENT_PUBLIC_KEY> 替换为实际密钥。 先保留 CLIENT_PUBLIC_KEY,等客户端生成后再来填写。
步骤 4: 启用 IP 转发(可选但推荐)
如果你希望客户端能通过服务器访问互联网(流量转发),需要启用内核IP转发。
编辑 /etc/sysctl.conf,取消注释或添加:
net.ipv4.ip_forward=1
然后生效配置:
sudo sysctl -p
步骤 5: 启动并启用开机自启
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
# 检查状态
sudo systemctl status wg-quick@wg0
sudo wg show
第二部分:在客户端安装和配置 WireGuard (例如你的电脑)
步骤 1: 安装 WireGuard
- Linux:安装方法同服务器。
- Windows:从 官网 下载安装程序。
- macOS:
brew install wireguard-tools或从官网下载。 - Android/iOS:在应用商店搜索 “WireGuard” 并安装。
步骤 2: 生成客户端密钥对
在你的电脑上操作:
# 如果是Linux/macOS客户端
wg genkey | tee client_private.key | wg pubkey > client_public.key
# Windows/移动端通常可以在GUI内点击“生成密钥对”
记下生成的 client_public.key 和 client_private.key。
步骤 3: 创建客户端配置文件
创建文件 home-pc.conf (名字自定):
[Interface]
# 客户端在VPN中的地址,必须和服务器配置中的AllowedIPs一致
Address = 10.0.0.2/24
# 客户端的私钥
PrivateKey = <CLIENT_PRIVATE_KEY>
# 可选:如果你想所有流量都走VPN服务器(全局代理),取消下面这行的注释
#DNS = 1.1.1.1
[Peer]
# 服务器的公钥
PublicKey = <SERVER_PUBLIC_KEY>
# 服务器的公网IP和端口
Endpoint = <YOUR_SERVER_IP>:51820
# 允许通过VPN发送哪些流量:
# 0.0.0.0/0 表示所有流量都走VPN(全局代理)
# 10.0.0.0/24 表示只有访问VPN局域网的流量才走VPN(分割隧道)
AllowedIPs = 10.0.0.0/24
# 可选:保持连接,每25秒发送一次心跳包
PersistentKeepalive = 25
请替换以下内容:
<CLIENT_PRIVATE_KEY>:你在客户端生成的私钥。<SERVER_PUBLIC_KEY>:服务器上/etc/wireguard/server_public.key的内容。<YOUR_SERVER_IP>:你的服务器的公网 IP 地址或域名。
步骤 4: 回填客户端公钥到服务器
现在回到服务器,将客户端的公钥 (client_public.key 的内容) 填入之前预留的 /etc/wireguard/wg0.conf 中的 <CLIENT_PUBLIC_KEY> 位置。
然后重启服务器的 WireGuard 服务以加载新配置:
sudo systemctl restart wg-quick@wg0
步骤 5: 在客户端导入并连接
- Linux:将
home-pc.conf复制到/etc/wireguard/,然后使用sudo wg-quick up home-pc连接。 - Windows/macOS:打开 WireGuard GUI,导入配置文件 (
Import tunnel from file),然后点击 “Activate”。 - 手机:使用应用内的“扫描二维码”或“从文件/档案导入”功能导入配置,然后拨动开关连接。
第三部分:测试和连接 SSH
-
测试连通性:在客户端连接上 WireGuard 后,打开终端/命令提示符。
ping 10.0.0.1如果能够 ping 通,说明 WireGuard 隧道已成功建立。
-
连接 SSH:
# 注意:这里使用的是服务器的私有IP(WireGuard网络内的IP),而不是公网IP! ssh username@10.0.0.1 # 如果你的服务器SSH监听了其他端口(非22),可以使用-p参数 # ssh username@10.0.0.1 -p 2222现在你的 SSH 连接已经在 WireGuard 的加密隧道之中了。
-
重要安全加固:
- 现在你可以关闭服务器上直接对公网暴露的 SSH 端口(或只允许通过防火墙仅限你的IP访问,作为备用连接方式)。
- 修改服务器的 SSH 配置文件
/etc/ssh/sshd_config,将ListenAddress设置为只在 VPN IP 上监听,这样公网就无法直接访问了:
(谨慎操作!确保WireGuard连接稳定后再做此步,否则可能把自己锁在外面!建议先保留公网监听,测试无误后再修改)ListenAddress 10.0.0.1 - 重启 SSH 服务:
sudo systemctl restart sshd
重启 WireGuard 接口进行配置重载
这种方法会先关闭再重新启动整个 WireGuard 隧道,会导致所有活跃的连接短暂中断。如果方法一不生效,或者你进行了一些复杂的接口更改,可以使用这个方法。
使用 wg-quick 工具来 down 再 up 接口:
sudo wg-quick down wg0
sudo wg-quick up wg0
或者使用 systemctl 重启服务(效果相同):
sudo systemctl restart wg-quick@wg0
总结
你现在已经成功创建了一个安全的点对点 VPN。访问 SSH 的流程变成了:
- 在你的电脑上启动 WireGuard 客户端并连接。
- 你的电脑获得了
10.0.0.2的地址,并可以与服务器的10.0.0.1通信。 - 使用
ssh user@10.0.0.1通过加密隧道安全地连接到服务器。
许可协议:
CC BY 4.0