0

如何配置wireguard服务端及客户端

 2 years ago
source link: https://y2k38.github.io/posts/how-to-setup-wireguard-vpn-server/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如何配置wireguard服务端及客户端

发表于

2020-04-05 更新于 2020-04-06

从19年开始,ss流量已经能被gfw识别并屏蔽,原本打算切换到v2ray,但配置混淆需要域名反而会暴露出更多信息,此外,网上一篇文章指出v2ray开发者失联的同时一项v2ray流量识别的专利被注册,因此决定放弃v2ray并转向另一个被linus盛赞的wireguard。

wireguard是非常简单、现代化、快速的vpn,使用最新的加密技术,udp传输,支持ip漫游等。wireguard没有服务端、客户端的区分,每一台设备都是一个peer

添加wireguard的PPA源

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt update
sudo apt install wireguard

wireguard作为linux内核模块方式加载,内核更新wireguard也会自动重新编译,重启系统或使用modprobe开启模块

sudo modprobe wireguard

检查wireguard模块是否成功加载,成功输出与下面类似

vagrant@bionic:~$ lsmod | grep wireguard
wireguard 221184 0
ip6_udp_tunnel 16384 1 wireguard
udp_tunnel 16384 1 wireguard

生成keys

wireguard提供了两个命令行工具wg以及wg-quick,使用wg生成公钥和私钥

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

类似ssh,需要为每台设备生成一对publickey/privatekey

我们需要生成一个虚拟网卡,名称可以按个人喜好选择,这里选择用wg0,IP网段使用10.10.0.1/24,确保该网段没有被你的家庭或公司网络使用,编辑文件/etc/wireguard/wg0.conf

[Interface]
PrivateKey = <your server private key here>
Address = 10.10.0.1/24
Address = fd86:ea04:1111::1/64
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s3 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o enp0s3 -j MASQUERADE
ListenPort = 51820

PrivateKey填上一步生成的私钥,填入你选择的Address,这里配置了两个IP4/6的地址,enp0s3是你服务器主要的网络设备,使用ifconfigip a查看你的主设备名,ListenPort默认为51820,建议修改

要注意的是SaveConfig设置,wireguard配置后不需要restartreload,使用wg命令添加peer即可立即生效。但是,这些操作都是直接写入到内存中而不是磁盘,因此如果你重启系统或服务,那么你就会失去添加的配置,所以这里设置为true,自动保存配置。但这个配置有时候也会让人非常困扰,你可能添加配置后重启服务,然后你发现添加的配置不见了,需要先停止服务再添加配置最后重启。

添加网络配置,使得内核可以正确路由我们的NAT流量

sudo bash -c 'cat << EOF >> /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
EOF'
sudo sysctl -p

运行命令,开启wg0设备

sudo wg-quick up wg0

如果一切顺利,那么运行下面命令你将看到类似的输出

vagrant@bionic:~$ sudo wg
interface: wg0
public key: Td4IBZg2s2bMSjewD0h4oBhlbaJteygxjT83xeM7uTY=
private key: (hidden)
listening port: 51820

客户端配置

客户端配置与服务端类似

[Interface]
Address = 10.10.0.2/32
Address = fd86:ea04:1111::2/128
SaveConfig = true
PrivateKey = <your client private key here>
DNS = 8.8.8.8

[Peer]
PublicKey = <your server public key here>
Endpoint = <your server public ip>:51820
AllowedIPs = 0.0.0.0/0, ::/0

填写服务器的publickey、ip、端口,配置0.0.0.0/0, ::/0将所有流量传输到服务端

在服务端添加客户端配置

sudo wg set wg0 peer <client-public-key> allowed-ips 10.10.0.2/32,fd86:ea04:1111::2/128

以上的操作针对的是linux系统,官方推出了可用的iOS/MacOS/Android/Windows图形界面软件,其中有一个选项要注意的是On-Demand,有EthernetWi-Fi选项,如果勾选,那么会在选中网络中会自动开启vpn

设置开机启动

如果你的系统使用systemd,如ubuntu,设置wireguard开机启动命令如下

systemctl enable wg-quick@wg0

开放防火墙

sudo ufw allow 51820/udp

WireGuard: fast, modern, secure VPN tunnel
How to setup your own VPN server using WireGuard on Ubuntu
Setting Up PiHole, Wireguard VPN server and Client (Ubuntu Server)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK