avatar

Text03's Blog

面对生活,记得升龙 →↓↘+👊

  • 首页
  • 链接
  • 关于
主页 使用 WireGuard VPN 加密连接服务器
文章

使用 WireGuard VPN 加密连接服务器

发表于 2025-09-2 更新于 2025-09- 3
作者 text03
13~16 分钟 阅读

第一部分:在服务器上安装和配置 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

  1. 测试连通性:在客户端连接上 WireGuard 后,打开终端/命令提示符。

    ping 10.0.0.1
    

    如果能够 ping 通,说明 WireGuard 隧道已成功建立。

  2. 连接 SSH:

    # 注意:这里使用的是服务器的私有IP(WireGuard网络内的IP),而不是公网IP!
    ssh username@10.0.0.1
    
    # 如果你的服务器SSH监听了其他端口(非22),可以使用-p参数
    # ssh username@10.0.0.1 -p 2222
    

    现在你的 SSH 连接已经在 WireGuard 的加密隧道之中了。

  3. 重要安全加固:

    • 现在你可以关闭服务器上直接对公网暴露的 SSH 端口(或只允许通过防火墙仅限你的IP访问,作为备用连接方式)。
    • 修改服务器的 SSH 配置文件 /etc/ssh/sshd_config,将 ListenAddress 设置为只在 VPN IP 上监听,这样公网就无法直接访问了:
      ListenAddress 10.0.0.1
      
      (谨慎操作!确保WireGuard连接稳定后再做此步,否则可能把自己锁在外面!建议先保留公网监听,测试无误后再修改)
    • 重启 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 的流程变成了:

  1. 在你的电脑上启动 WireGuard 客户端并连接。
  2. 你的电脑获得了 10.0.0.2 的地址,并可以与服务器的 10.0.0.1 通信。
  3. 使用 ssh user@10.0.0.1 通过加密隧道安全地连接到服务器。
许可协议:  CC BY 4.0
分享

相关文章

下一篇

每周考研阅读 2021 Text 1

上一篇

最近更新

  • 使用 WireGuard VPN 加密连接服务器
  • 每周考研阅读 2021 Text 1

热门标签

Halo

目录

©2025 Text03's Blog. 保留部分权利。

使用 Halo 主题 Chirpy