文章目录
{ .ImgAlt }}

WireGuard 是一个使用 state-of-the-art 加密的现代 VPN (Virtual Private Network) 技术。和其他类似的方案相比,例如:IPsec 和 OpenVPN。 WireGuard 更快,更容易配置,并且性能更好。它是一个跨平台产品,并且几乎可以在任何地方运行,包括:Linux,Windows,Android 和 macOS。Wireguard 是一个 P2P VPN;它不使用客户端/服务端模式。依赖于它的配置,一个节点即可以作为服务器,或者客户端。

WireGuard通过在每一个节点设备上创建一个网络接口作为一个隧道。节点之间授权通过交换和验证公钥,像 SSH 模式一样。公钥被映射到在隧道中允许的 IP 地址列表上。VPN 流量通过 UDP 协议封装。

在这个指南中,我们将会在 Ubuntu 18.04 机器上设置 WireGuard 作为 VPN 服务器。我们也会向你展示如何配置 WireGuard 作为一个客户端。客户端的流量将会通过 Ubuntu 18.04 服务器。

这个设置可以用来防止中间人攻击,匿名上网,突破地理限制,或者允许远程协作。

一、前提条件

你将需要一台 Ubuntu 18.04 服务器,你可以以 root 或者 其他拥有 sudo 权限用户身份登录。

二、设置 WireGuard 服务器

在这个章节中,我们将会在 Ubuntu 机器上安装 WireGuard 并且设置它作为一个服务器。我们将会配置系统来引导客户端的流量通过它。

2.1 在 Ubuntu 18.04 上安装 WireGuard

WireGuard 维护了自己的 APT 源仓库。通过这个仓库,我们可以安装软件包,并且在升级包可用的时候,进行升级。

更新软件包列表,并且安装必要的工具来管理你的系统软件源。很可能你的机器上已经有这些软件包:

sudo apt update
sudo apt install software-properties-common

添加 WireGuard 软件源:

sudo add-apt-repository ppa:wireguard/wireguard

当被提示时,输入Enter继续。add-apt-repository将会自动升级软件包列表。

安装 WireGuard 软件包:

sudo apt install wireguard

WireGuard 作为一个内核模块运行,它被编译成一个 DKMS 模块。在成功的时候,你将看到下面的输出:

wireguard:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.15.0-88-generic/updates/dkms/

depmod...

DKMS: install completed.

当你升级内核,WireGuard 模块将会针对新内核进行编译。

2.2 配置 WireGuard

WireGuard 包含两个工具,名为wgwg-quick,它允许你配置和管理 WireGuard 接口。

运行下面的命令,生成公钥和私钥:

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

文件将会被生成在/etc/wireguard目录。你可以通过使用cat或者less来查看文件。私钥永远不要共享给任何人。

现在密钥已经被生成好了,我们需要配置隧道设备,用来引导 VPN 流量。

这个设备可以通过命令行使用ipwg或者通过文本编辑器创建配置文件来设置。

创建一个名为wg0.conf的文件,并且添加下面的内容:

sudo nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

这个接口可以被命名为任何东西。不管怎么样,我们推荐使用类似wg0或者wgvpn0进行命名。这个接口中的设置意义如下:

  • Address - 一个使用逗号分隔的 v4 或者 v6 IP 地址列表,用于wg0接口。使用 局域网 IP 范围(10.0.0.0/8, 172.16.0.0/12 or 192.168.0.0/16)。
  • ListenPort - WireGuard 将会接受进入连接的端口
  • PrivateKey - 一个由wg genkey命令生成的私钥。(想要查看文件内容:sudo cat /etc/wireguard/privatekey
  • SaveConfig - 当设置为 true 时,在关机时,当前接口状态将会被保存到配置文件中。
  • PostUp - 在接口启动时执行的命令或者脚本。在这个例子中,我们使用 iptables 来启用 伪装。 这将允许流量离开服务器,使得 VPN 客户端可以访问网络。 确保替换 -A POSTROUTING 后面的 ens3 为你的公开网络接口名称。你可以通过下面的命令很容易地找到这个接口:
ip -o -4 route show to default | awk '{print $5}'
  • PostDown - 在接口停用之前执行的命令或者脚本。一旦接口停止,iptables 规则将会被移除。

wg0.confprivatekey文件不应该对普通用户可读。使用 chmod 将权限修改为 600

sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}

一旦完成,使用配置文件中的指定配置,将wg0接口启用:

阿里云: 爆款云服务器低至1折,1核1G 1M 仅17月/月
sudo wg-quick up wg0

这个命令将会产生类似下面的输出:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

运行wg show wg0来检查接口状态和配置:

sudo wg show wg0

输出:

interface: wg0
  public key: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
  private key: (hidden)
  listening port: 51820

你也可以运行ip a show wg0来验证接口状态:

ip a show wg0

输出:

4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.0.0.1/24 scope global wg0
       valid_lft forever preferred_lft forever

启用 WireGuard 开机启动,运行下面的命令:

sudo systemctl enable wg-quick@wg0

2.3 服务器网络和防火墙配置

想要 NAT 运行,我们需要启用 IP 转发。打开/etc/sysctl.conf文件,并且添加或者取消下面行的注释:

sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1

保存文件,并且应用修改:

sudo sysctl -p

输出:

net.ipv4.ip_forward = 1

如果你正在使用UFW来管理你的防火墙,你需要打开 UDP 流量端口 51820:

sudo ufw allow 51820/udp

就这些。 作为服务器的 Ubuntu 节点已经设置好了。

三、Linux 和 macOS 客户端设置

所有支持平台的安装指南都在https://wireguard.com/install/。在 Linux 系统中,你可以通过使用发行版的软件包管理工具进行安装,在 macOS 上可以使用brew。一旦你安装好 WireGuard,按照下面的步骤去配置客户端设备。

设置 Linux 和 macOS 客户端的过程和服务器的非常相似。开始生成公钥和私钥:

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

创建文件wg0.conf并且添加下面的内容:

sudo nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24


[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0

在接口段和服务器上的意思是一样的:

  • Address - 一个使用逗号分隔的 v4 或者 v6 IP 地址列表,用于wg0接口。
  • PrivateKey - 想要查看客户端文件内容运行:sudo cat /etc/wireguard/privatekey

在节点段,包含下面的字段:

  • PublicKey - 你想要连接的节点上的公钥。(服务器/etc/wireguard/publickey文件内容)。
  • Endpoint - 你想要连接的节点的 IP 地址或者主机名,加上分号,再加上远程节点监听的端口号。
  • AllowedIPs - 一个以逗号分隔的 v4 或者 v6 IP 地址列表。我们使用0.0.0.0/0 因为我们需要引导流量,并且希望服务器节点发送任何源 IP 的包。

如果你需要配置其他的客户端,仅仅需要重复同样的步骤,使用不同的私有 IP 地址。

四、Windows 客户端设置

WireGuard 官网下载 Windows msi 软件安装包。

一旦安装好,打开 WireGuard 应用,并且点击 “Add Tunnel” -> “Add empty tunnel…”。如下图所示:

一个公钥被自动创建,并且显示在屏幕上。

输入隧道名字,并且编辑配置文件如下:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24


[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0

在接口端,添加一个新行来定义客户端隧道地址。

在节点段添加下面字段:

  • PublicKey - Ubuntu 服务器上的公钥(/etc/wireguard/publickey文件)。
  • Endpoint - Ubuntu 服务器,加上分号,再加上 WireGuard 端口(51820)。
  • AllowedIPs - 0.0.0.0/0

一旦完成,点击"Save"按钮。

五、将节点添加到服务器

最后一步就是将客户端的公钥和 IP 地址添加到服务器:

sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

确保修改CLIENT_PUBLIC_KEY为你在客户端机器上修改的公钥(sudo cat /etc/wireguard/publickey),并且调整客户端 IP 地址。Windows 用户可以从 WireGuard 应用中拷贝公钥。

一旦完成,返回客户端机器,并且使隧道接口上线。

5.1 Linux 和 macOS 客户端

在 Linux 客户端上,运行下面的命令,将接口上线:

sudo wg-quick up wg0

现在你将被连接到 Ubuntu 服务器,并且从你客户端机器的流量将会通过这个服务器。你可以检查连接:

sudo wg

输出:

interface: wg0
  public key: sZThYo/0oECwzUsIKTa6LYXLhk+Jb/nqK4kCCP2pyFg=
  private key: (hidden)
  listening port: 48052
  fwmark: 0xca6c

peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
  endpoint: XXX.XXX.XXX.XXX:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 1 minute, 22 seconds ago
  transfer: 58.43 KiB received, 70.82 KiB sent

你可以打开你的浏览器,并且输入"what is my ip",并且你可以看到你的 Ubuntu 服务器地址。

想要停止隧道,将wg0接口下线:

sudo wg-quick down wg0

5.2 Windows 客户端

如果你在 Windows 上安装了 WireGuard。点击"Activate"按钮。一旦节点连接,隧道状态,将会变成 Active:

六、总结

我们已经展示了如何在 Ubuntu 18.04 机器上安装 WireGuard 并且配置为一个 VPN 服务器。这个设置允许你匿名上网,保证流量数据私有。




如果你有任何疑问,请通过以下方式联系我们:

微信:

微信群: 加上面的微信,备注微信群

QQ: 3217680847

QQ 群: 82695646 雪梦科技交流群

原文 :https://linuxize.com/post/how-to-set-up-wireguard-vpn-on-ubuntu-18-04

    版权声明:本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。知识共享许可协议
腾讯云:新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。

相关推荐