Wireguard 网络搭建让你的服务更安全

编程 > Softwares (290) 2026-02-09 14:23:01

最近老是收到腾讯云的服务器安全警告,说开放了Jenkins等开发中间件端口,有安全隐患需要关闭。但是实际业务中此服务器为开发服务器,需要对外开放一些开发中间件端口。否则无法进行开发。此时就想到了虚拟网络。这里使用Wireguard搭建一套安全可靠的虚拟网络。

环境说明

  • 一台云服务器Ubuntu系统
  • N台Windows 机器(开发人员)

1. 服务端安装配置

1.1 安装wireguard软件

Ubuntu 安装

sudo apt install wireguard -y

安装完成后可以通过version命令查看版本,参考

wg --version
wireguard-tools v1.0.20210914 - https://git.zx2c4.com/wireguard-tools/

更多系统安装方式参考官方文档:Installation - WireGuard

1.2 生成密钥对(服务端)

sudo chmod 777 /etc/wireguard/
cd /etc/wireguard/
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key

执行上面命令后,会在当前目录生成密钥对文件

  • server_private.key  服务端私钥(保密)
  • server_public.key  服务端公钥(用于客户端配置)

参考:

ubuntu@VM-0-17-ubuntu:/etc/wireguard$ wg genkey | tee server_private.key | wg pubkey > server_public.key
ubuntu@VM-0-17-ubuntu:/etc/wireguard$ ll
total 16
drwxrwxrwx   2 root   root   4096 Feb  9 10:18 ./
drwxr-xr-x 120 root   root   4096 Feb  9 09:27 ../
-rw-------   1 ubuntu ubuntu   45 Feb  9 10:18 server_private.key
-rw-------   1 ubuntu ubuntu   45 Feb  9 10:18 server_public.key
ubuntu@VM-0-17-ubuntu:/etc/wireguard$ 

 

1.3 创建服务端配置文件

创建/编辑 配置文件   /etc/wireguard/wg0.conf

vi /etc/wireguard/wg0.conf

内容参考:

[Interface]
Address = 172.16.0.1/24
ListenPort = 51820
PrivateKey = <服务端私钥内容>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
SaveConfig = false
说明:
  • Address:服务端在 VPN 网络中的 IP。
  • ListenPort:监听端口(建议使用非默认端口提高隐蔽性)。
  • eth0:请替换为你的公网网卡名(可通过 ip a 查看)。
  • PostUp/PostDown:启用 IP 转发和 NAT(必须开启才能让客户端访问外网)。注意:请将配置里面的 eth0  修改为你主机的网卡名称。可通过命令查看主网卡名ip route show default

配置文件权限修改:

sudo chmod 600 /etc/wireguard/wg-client.conf

建议修改为600 否则不安全

1.4 配置启用IP v4 转发

编辑配置文件  /etc/sysctl.conf

sudo vi /etc/sysctl.conf

搜索ipv4 找到下面配置net.ipv4.ip_forward=1,将前面的注释去掉

Wireguard 网络搭建让你的服务更安全_图示-ffafa23bd34746b5863bc089a246643b.png

保存配置

应用修改后的配置生效

sudo sysctl -p

执行记录:

ubuntu@VM-0-17-ubuntu:/etc/wireguard$ sudo sysctl -p
net.ipv4.ip_forward = 1
kernel.sysrq = 1
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
kernel.printk = 5
ubuntu@VM-0-17-ubuntu:/etc/wireguard$ 

1.5 启动 WireGuard 服务

启动命令:

sudo systemctl start wg-quick@wg0

设置开机自启动

sudo systemctl enable wg-quick@wg0

查看状态

sudo wg show
interface: wg0
  public key: jySntMEWp***********S6igiGA=
  private key: (hidden)
  listening port: 51820

 

1.6 端口开放

Ubuntu ufw 端口开放【可选】

sudo ufw allow 51820/udp

安全组开放

云服务器记得安全组开放端口配置

 

 

 

2. 客户端安装配置

 

2.1 【Linux】客户端配置示例

2.1.1 客户端密钥生成

wg genkey | tee client1-private.key | wg pubkey > client1-public.key

2.1.2 在服务端配置添加Peer

将Peer配置追加到服务端配置文件:/etc/wireguard/wg0.conf

[Peer]
PublicKey = <粘贴 client1-publickey 内容>
AllowedIPs = 172.16.0.2/32

说明:

  • wg0 - 配置文件名
  • <客户端公钥> - 客户端的密钥对里面的公钥
  • 172.16.0.2/32 - 客户端的IP

多个客户端则需要在服务端配置多个Peer,参考

[Peer]
PublicKey = <粘贴 client1-publickey 内容>
AllowedIPs = 172.16.0.2/32

[Peer]
PublicKey = <客户端公钥2>
AllowedIPs = 172.16.0.22/32

[Peer]
PublicKey = <客户端公钥3>
AllowedIPs = 172.16.0.23/32

配置完成后重启服务让配置生效

如果 SaveConfig=false 必须重启生效

sudo systemctl restart wg-quick@wg0

2.1.3 安装WireGuard 

安装WireGuard 参考服务端软件安装部分,操作一致。

2.1.4 客户端配置

编辑配置文件 /etc/wireguard/wg-client.conf

[Interface]
PrivateKey = <客户端私钥>
Address = 172.16.0.2/24
ListenPort = 51822   # ← 添加这一行!指定固定端口

[Peer]
PublicKey = <服务端公钥>
Endpoint = your-server-ip:51820
AllowedIPs = 172.16.0.0/24
PersistentKeepalive = 25

说明:

  • ListenPort  固定监听端口 (注意:云服务器客户端建议固定好配合安全组设置开放端口,不配置则随机)
  • Endpoint:服务端公网 IP 和端口。
  • AllowedIPs = 0.0.0.0/0 表示所有流量走 VPN(全隧道);若只访问内网,可设为 172.16.0.0/24
  • your-server-ip  - 特别注意: 如果你的VPN客户端Linux和服务端都在腾讯云,且内网相通,这里必须配置内网IP,配置公网ip会导致能发送包不能接收包。原因是腾讯进行了内部包转换....
  • 注意:客户端的私钥 和 服务端的公钥别配置错了

配置文件权限修改:

sudo chmod 600 /etc/wireguard/wg-client.conf

建议修改为600 否则不安全

2.1.5 启动客户端

手动启动测试

sudo wg-quick up wg-client

如果成功,你会看到类似输出:

sudo wg-quick up wg-client
[#] ip link add wg-client type wireguard
[#] wg setconf wg-client /dev/fd/63
[#] ip -4 address add 172.16.0.2/24 dev wg-client
[#] ip link set mtu 1420 up dev wg-client
[#] resolvconf -a tun.wg-client -m 0 -x

如果失败,会显示具体错误,比如:

  • Invalid private key → 私钥格式错误
  • Permission denied → 权限不对
  • Cannot find device "wg-client" → 内核模块未加载(少见)

手动检查完毕后进行down

sudo wg-quick down wg-client

启动 systemd 服务(确认手动能通后再用)

sudo systemctl enable --now wg-quick@wg-client

2.1.6 验证网络

查看状态

sudo systemctl status wg-quick@wg-client
Wireguard 网络搭建让你的服务更安全_图示-92591530b8bc4c1eb898b650a0e3264c.png

wg 查看客户端状态

sudo wg show wg-client
interface: wg-client
  public key: o9UCs************************************Sxgs=
  private key: (hidden)
  listening port: 51822

peer: jy************************************giGA=
  endpoint: 172.21.0.17:51820
  allowed ips: 172.16.0.0/24
  latest handshake: 1 minute, 8 seconds ago
  transfer: 696 B received, 1.07 KiB sent
  persistent keepalive: every 25 seconds

ping 测试

ping 172.16.0.1
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=0.412 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=64 time=0.294 ms
64 bytes from 172.16.0.1: icmp_seq=3 ttl=64 time=0.364 ms
64 bytes from 172.16.0.1: icmp_seq=4 ttl=64 time=0.354 ms
^C
--- 172.16.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3051ms
rtt min/avg/max/mdev = 0.294/0.356/0.412/0.041 ms

ping测试通过。

 

此时查看服务端信息

sudo wg show
interface: wg0
  public key: jy************************************giGA=
  private key: (hidden)
  listening port: 51820

peer: o9UCs************************************Sxgs=
  endpoint: 172.21.0.5:51822
  allowed ips: 172.16.0.2/32
  latest handshake: 8 seconds ago
  transfer: 3.24 KiB received, 2.29 KiB sent

可以在服务端看到已连接的172.16.0.2信息。

 

 

2.2 【Windows】客户端配置示例

2.2.1 安装WireGuard Windows 客户端

下载地址:WireGuard for Windows Downloads

下载后双击安装,安装完成后默认打开如下:

Wireguard 网络搭建让你的服务更安全_图示-b5df482a76e24087be9c28a110edf85d.png

 

2.2.2 新建空隧道/配置

Wireguard 网络搭建让你的服务更安全_图示-0335522a658141a19a9a8838e3995064.png

如上图所示,选中新建空隧道。

Wireguard 网络搭建让你的服务更安全_图示-e11785673a5740fe8d3b091b83fa3783.png

新建后默认会生成密钥对。服务端新增Peer将客户端的公钥配置上

2.2.3 服务端配置增加Peer

服务端配置

编辑配置文件:/etc/wireguard/wg0.conf

sudo wg set wg0 peer <客户端公钥> allowed-ips 172.16.0.22/32

配置后重启服务端

sudo systemctl restart wg-quick@wg0

2.2.4 客户端配置

[Interface]
PrivateKey = <客户端私钥>
Address = 172.16.0.22/24

[Peer]
PublicKey = <服务端公钥>
Endpoint = <服务端IP>:51820
AllowedIPs = 172.16.0.0/24
PersistentKeepalive = 25

 

2.2.5 启动客户端

配置完成后点连接启动客户端

Wireguard 网络搭建让你的服务更安全_图示-b63009439fa743b6a771006731cfc6b2.png
Wireguard 网络搭建让你的服务更安全_图示-d67b76b8f4464752891820dda1ba8772.png

 

2.2.6 验证

ping 172.16.0.1

Wireguard 网络搭建让你的服务更安全_图示-cc8c8d79372846e4a740f6097c9aec94.png

 

 


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
最近老是收到腾讯云的服务器安全警告,说开放了Jenkins等端口不安全。但是实际业务中此服务器为开发服务器,需要对外开放一些开发中间件端,故此需要wireguard虚拟网络了
在这个 Spring cloud 教程中,学习在 spring boot/cloud 项目中使用 Netflix Ribbon 使用客户端负载平衡
Java编程之spring boot FastDFS Java client使用,Java编程,FastDFS Java客户端
服务Server默认配置server.conf################################################## Sample
获取客户端来源真实ip在很多业务场景都需要,比如微信支付的v2版,要求必须有下单的用户来源IP。下面详解。 从Java代码端获取真实客户端IP源码参考: pub
FastDFS分布式文件系统的下载和安装配置,FastDFS,FastDFS安装配置,分布式文件系统
前言手里有两个机器,一个群晖,一个PVE搞虚拟机玩的,但是UPS只有一个,我通过USB连接到了群晖,然后群晖和PVE主机都在用一个UPS
Nginx 嵌套/多级/多层nginx 代理下真实IP传递。remote_addr代表客户端的IP,但它的值不是由客户端提供的
Linux(centos) nginx安装和nginx入门配置方法1.切换至root用户$su - 2.执行在线安装命令#yum install nginx -y 如果上面提示以下内容[root...
现在zookeeper在分布式上的流行程度不亚于spring在Java中的地位。本文主要讲解zookeeper的入门,即:安装zookeeper以及配置zookeeper集群
windows10如何安装JDK_windows10怎么配置jdk环境变量,windows XP/7/8/10系统配置java运行开发环境即配置jdk环境变量
centos6.8 yum安装和配置ftp server(vsftpd)客服端以及ftp常见问题解决,vsftpd
MySQL 安装,MySQL 安装了5.6版本,修改安装目录下的默认配置文件重启后配置无效。
Windows Server 2025安装语言配置键盘配置安装选项暂时先选即用即付系统版本选择推荐选桌面体验的版本协议许可磁盘选择新机安装,选择你配置的系统盘即
由于某些原因,数据库某个表某个字段可能会很大。大了就会引发一个问题,默认的数据库单子段大小是有限制的。版本不同限制的默认值不同。拿我的MySQL 5.6 来说安装后默认的配置是单子段4MB大小