最近老是收到腾讯云的服务器安全警告,说开放了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,将前面的注释去掉
保存配置
应用修改后的配置生效
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
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
下载后双击安装,安装完成后默认打开如下:
2.2.2 新建空隧道/配置
如上图所示,选中新建空隧道。
新建后默认会生成密钥对。服务端新增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 启动客户端
配置完成后点连接启动客户端
2.2.6 验证
ping 172.16.0.1
版权所有 © 【代码谷】 欢迎非商用转载,转载请按下面格式注明出处,商业转载请联系授权,违者必究。(提示:点击下方内容复制出处)
源文: Wireguard 网络搭建让你的服务更安全 ,链接:https://www.daimagu.com/article/2602090931227326.html,来源:代码谷
评论