众所周知wireguard是基于Linux内核实现的,并且在Linux5.6被合并进主线
KVM或者XEN架构VPS只要升级内核版本并安装wireguard-tools即可使用
但OPENVZ架构的VPS不支持内核版本升级,所以只能使用wireguard-go来替代内核模块的功能,性能自然是不如内核模块的实现,但速度尚可
获取wireguard-go
自行编译或者直接获取二进制文件
考虑到OPENVZ机型普遍的小内存,小硬盘和低性能,建议直接获取二进制可执行文件
编译
git clone https://git.zx2c4.com/wireguard-go
cd wireguard-go
make
二进制
P3TERX/wireguard-go-builder/Releases
wget https://github.com/P3TERX/wireguard-go-builder/releases/download/0.0.20211016/wireguard-go-linux-amd64.tar.gz
tar -xzf wireguard-go-linux-amd64.tar.gz
wireguard-go使用
通过编译或者下载得到wireguard-go这个可执行文件之后要怎么用呢?
wireguard-go只在新建虚拟网卡时起作用,所以还要安装wireguard-tools来运用wireguard
这一步只需要将二进制文件移动到/usr/local/bin,供wg-quick无法调用内核模块时fallback即可
chmod +x wireguard-go
mv wireguard-go /usr/local/bin/
wireguard-tools安装
apt install wireguard-tools
apt可能会自动安装新版本的内核,但因为架构限制,那个内核是无法启用的,无视即可
配置文件
此时wg-quick,wg等命令都可以使用了
下面贴上配置示例
密钥生成
wg genkey | tee privatekey | wg pubkey > publickey
服务器
新建配置文件
nano /etc/wireguard/wg0.conf
将enp0s3
替换成自己的网卡名称,如果是NAT小鸡还要把端口换成商家提供的可使用端口之一
[Interface]
PrivateKey = VPN服务器私钥
Address = fdc9:281f:04d7:9ee9::1,10.0.0.1/32
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -A FORWARD -o %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s3 -j MASQUERADE; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -D FORWARD -o %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o enp0s3 -j MASQUERADE
[Peer]
PublicKey = 客户端公钥
AllowedIPs = fdc9:281f:04d7:9ee9::2,10.0.0.2/32
PresharedKey = 与客户端一致
在/etc/sysctl.conf
添加下面两行启用转发
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
使改动生效
sysctl -p
防火墙端口放行
ufw allow 51820/udp
客户端
[Interface]
PrivateKey = 客户端私钥
Address = fdc9:281f:4d7:9ee9::2/128, 10.0.0.2/32
DNS = 2001:4860:4860::8888, 8.8.8.8
[Peer]
PublicKey = VPN服务器公钥
PresharedKey = 与VPN服务器一致
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 服务器IP:51820
启动
wg-quick up wg0
这样在无法调用内核模块的时候,会自动fallback调用wireguard-go代替内核实现,这样应该能顺利跑起来了
需要作为服务启动的话
systemctl enable wg-quick@wg0