云网牛站
所在位置:首页 > Linux云服务器 > 在Linux系统中安装及使用Wireguard建立虚拟专用网络

在Linux系统中安装及使用Wireguard建立虚拟专用网络

2019-11-05 15:22:39作者:戴进稿源:云网牛站

本文介绍在Linux操作系统中使用Wireguard建立虚拟专用网络的方法,以Fedora发行版为例,步骤为:设置时区、安装Wireguard、生成密钥对、配置Wireguard服务器和客户端、测试Wireguard。

在Linux系统中安装及使用Wireguard建立虚拟专用网络

 

前言

Wireguard是一种新的VPN,旨在替代IPSec和OpenVPN,它的设计目标是简单和安全,并且利用了诸如噪声协议框架之类的最新技术,有些人认为Wireguard的配置简便性类似于OpenSSH,本文向你展示了如何部署和使用它。

它目前正在积极开发中,因此对于生产机器而言可能不是最好的,但是,正在考虑将Wireguard包含在Linux内核中,该设计已经过正式验证*,并被证明可抵御多种威胁。

部署Wireguard时,请确保Fedora Linux操作系统更新为最新版本,因为Wireguard的发行不稳。

 

设置时区

要检查并设置你的时区,请首先显示当前时间信息:

timedatectl

然后,请设置正确的时区,例如欧洲/伦敦,请设置你所在地区的时区:

timedatectl set-timezone Europe/London

请注意,系统的实时时钟(RTC)可能会继续设置为UTC或其他时区。

参考:在RHEL 8系统上设置主机名和时区

 

安装Wireguard

要安装,请为项目启用COPR存储库,然后使用sudo使用dnf进行安装:

$ sudo dnf copr enable jdoss/wireguard

$ sudo dnf install wireguard-dkms wireguard-tools

安装后,将有两个新命令以及对systemd的支持:

1、wg:Wireguard接口的配置。

2、wg-quick:建立VPN隧道。

创建Wireguard的配置目录,并应用umask077,umask 077允许文件所有者(根)的读取,写入和执行权限,但禁止其他所有人的读取、写入和执行权限:

mkdir /etc/wireguard

cd /etc/wireguard

umask 077

 

生成密钥对

生成私钥,然后从中派生公钥:

$ wg genkey > /etc/wireguard/privkey

$ wg pubkey < /etc/wireguard/privkey > /etc/wireguard/publickey

另外,也可以一次性完成此操作:

wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey

你还可以生成预共享密钥以提供一定程度的量子保护:

wg genpsk > psk

对于服务器和客户端,这将是相同的值,因此你只需要运行一次命令。

 

配置Wireguard服务器和客户端

客户端和服务器都有[Interface]选项,用于指定分配给接口的IP地址以及私钥。

每个对等方(服务器和客户端)都有一个[Peer]部分,其中包含其各自的PublicKey以及PresharedKey,此外,此块可以列出允许使用隧道的IP地址。

1、Server

界面启动时会添加防火墙规则,并启用伪装,确保注意接口中的/24 IPv4地址范围,该范围与客户端不同,如下编辑/etc/wireguard/wg0.conf文件,将服务器的IP地址用作地址,并将客户机IP地址用作AllowedIPs:

[Interface]

Address    = 192.168.2.1/24, fd00:7::1/48

PrivateKey = <SERVER_PRIVATE_KEY>

PostUp     = firewall-cmd --zone=public --add-port 51820/udp && firewall-cmd --zone=public --add-masquerade

PostDown   = firewall-cmd --zone=public --remove-port 51820/udp && firewall-cmd --zone=public --remove-masquerade

ListenPort = 51820

[Peer]

PublicKey    = <CLIENT_PUBLIC_KEY>

PresharedKey = LpI+UivLx1ZqbzjyRaWR2rWN20tbBsOroNdNnjKLMQ=

AllowedIPs   = 192.168.2.2/32, fd00:7::2/48

通过将以下内容添加到/etc/sysctl.conf中,允许转发IP数据包:

net.ipv4.ip_forward=1

net.ipv6.conf.all.forwarding=1

加载新设置:

$ sysctl -p

重新启动后将保留转发。

2、Client

客户端与服务器配置非常相似,但是有一个可选的PersistentKeepalive附加条目设置为30秒,这是为了防止NAT引起问题,并且可能不需要设置,将AllowedIPs设置为0.0.0.0/0将通过隧道转发所有流量,如下编辑客户端的/etc/wireguard/wg0.conf文件,使用客户端的IP地址作为地址,并使用端点上的服务器IP地址:

[Interface]

Address    = 192.168.2.2/32, fd00:7::2/48

PrivateKey = <CLIENT_PRIVATE_KEY>

[Peer]

PublicKey    = <SERVER_PUBLIC_KEY>

PresharedKey = LpI+UivLx1ZqbzjyRaWR2rWN20tbBsOroNdNnjWKLM=

AllowedIPs   = 0.0.0.0/0, ::/0

Endpoint     = <SERVER_IP>:51820

PersistentKeepalive = 30

 

测试Wireguard

启动并检查服务器和客户端上的隧道状态:

$ systemctl start wg-quick@wg0

$ systemctl status wg-quick@wg0

要测试连接,请尝试ping、ping6操作,如:

在Linux系统中安装及使用Wireguard建立虚拟专用网络

然后检查外部IP地址:

dig +short myip.opendns.com @resolver1.opendns.com

dig +short -6 myip.opendns.com aaaa @resolver1.ipv6-sandbox.opendns.com

注:在这种意义上,“Formally verified”表示已证明该设计具有数学上正确的消息和密钥保密性,正向保密性,相互认证,会话唯一性,通道绑定以及密钥泄露模拟和拒绝服务器攻击。

 

相关主题

搭建VPN工具Algo,Streisand,OpenVPN,StrongSwan,SoftEther,WireGuard

精选文章
热门文章