WireGuard部署
在对安全有更高要求的网络中,一般不会将服务器中各个服务的端口直接暴露在公网上,而是通过VPN的方式来访问内网中的服务。
只需要暴露VPN服务的端口,然后通过VPN连接到内网环境,就可以访问内网中的所有服务。
WireGuard是一款非常轻量级的VPN软件,它使用非对称加密算法,安全性非常高,而且非常容易部署。
本文将介绍如何在Debian服务器上部署WireGuard服务,并在Windows设备上连接WireGuard服务。
安装WireGuard
首先要在Linux服务器上安装WireGuard软件,WireGuard并不区分服务端和客户端,区别只在谁主动连接谁,只要有一方能主动连接上另一方就能组建起这个网络。
注意:由于VPN软件的特殊性,笔主不建议在Docker容器中部署VPN服务,以防止Docker挂掉导致VPN服务不可用。
apt install wireguard
检查是否已加载内核模块,如果出现了wireguard
字样,说明内核模块已经加载。
lsmod | grep --color=auto wireguard
如果没有加载,可以手动加载内核模块。
modprobe wireguard
配置内核参数,开启IP转发功能。
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1
配置WireGuard
生成私钥和公钥
wg genkey | tee privatekey | wg pubkey > publickey
生成的privatekey
和publickey
分别是私钥和公钥,其中privatekey
是服务器的私钥,publickey
是服务器的公钥。
请妥善保管privatekey
,不要将其泄露给其他人。
编写配置文件
WireGuard支持同时开启多个VPN服务,每个服务都需要一个配置文件。
WireGuard的配置文件通常存放在/etc/wireguard
目录下。
通常将第一个配置文件命名为wg0.conf
,后续的配置文件可以命名为wg1.conf
、wg2.conf
等。
以下将展示一个最简单的配置文件内容。
[Interface]
Address = 192.168.4.1/24
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
ListenPort = 51820
PrivateKey = 服务器的私钥
[Peer]
PublicKey = 客户端的公钥
AllowedIPs = 192.168.4.2/32
这样就把服务器的WireGuard服务配置好了,但是你会发现,客户端的公钥
在哪来?
接下来要为客户端也写一份配置文件,这里以Windows为例。 Windows端的WireGuard客户端可以在官网下载。
安装完毕后,可在命令行使用相同命令生成私钥和公钥。
[Interface]
Address = 192.168.4.2/24
DNS = 223.5.5.5
PrivateKey = 客户端的私钥
[Peer]
PublicKey = 服务器的公钥
AllowedIPs = 192.168.4.1/32
Endpoint = 服务器的公网IP:51820
如果你希望理解这两份配置文件,可以阅读以下部分,否则可以直接跳过。
[Interface]
:「使用该配置文件的设备」的网络接口信息。Address
:指定了「使用该配置文件的设备」的IP地址,也就是说,服务器在VPN网络中的IP地址是192.168.4.1
,而客户端的IP地址是192.168.4.2
,他们处于192.168.4.0/24
的网段中。PostUp
:在启动VPN后执行的命令,这里是设置了iptables规则,接受所有VPN接口的数据包,并且将从VPN接口出去的数据包进行NAT转发。PostDown
:在关闭VPN后执行的命令,这里是删除了上面设置的iptables规则。ListenPort
:指定了服务器监听的端口,默认为51820
,其他WireGuard节点可通过这个端口连接到该节点。PrivateKey
:指定了该节点的私钥,用于身份验证。[Peer]
:其他一个节点的信息,可以有多个[Peer]
。PublicKey
:指定了其他节点的公钥,用于身份验证。AllowedIPs
:将「使用该配置文件的设备」产生的到这些IP地址的数据包通过该Peer
转发出去。Endpoint
:指定了该Peer
的公网IP(或域名)和端口,用于连接到该Peer
。DNS
:用于解析Endpoint
的域名。
打开WireGuard客户端,导入client.conf
文件。
配置服务
WireGuard可以很方便地被添加到systemd
中,这样就可以通过systemctl
命令来管理WireGuard服务了。
开机启动还是有必要的,防止什么时候服务器重启了,VPN服务就不可用了。
您好!您的云服务器在北京时间 2024-02-22T06:11:54 因底层宿主机出现非预期的软硬件故障而宕机,阿里云正在对该实例进行重启恢复操作。实例重启通常会在2~5分钟内完成,重启完成后阿里云会第一时间通知您。您也可以访问ECS控制台查看该事件的详情,感谢您的支持与配合。
systemctl enable wg-quick@wg0
systemctl daemon-reload
如果确定不再使用WireGuard服务,可以停止并禁用WireGuard服务。
systemctl stop wg-quick@wg0
systemctl disable wg-quick@wg0
systemctl daemon-reload
连接WireGuard
在服务器上启动WireGuard服务。
systemctl start wg-quick@wg0
查看WireGuard服务状态。
systemctl status wg-quick@wg0
在Windows上打开WireGuard客户端,选择client
配置文件,点击连接
按钮,即可连接到服务器的WireGuard服务。
如果连接成功,WireGuard的Windows客户端会显示节点的上次握手时间
,同时在服务器上执行wg
命令,可以看到客户端的latest handshake
时间。
这时候在两台设备上可以使用192.168.4.1
与192.168.4.2
连接对方。