wireguard以其简练和优秀的设计深得Linus Torvalds的夸赞,消息说linux内核5.16版本会集成wireguard模块,不过这不影响我们在老版本的内核下使用。wireguard官网目前已经对所有操作系统的安装都给出了简明扼要的说明,所以正常情况下参考官网就可以了:
地址:https://www.wireguard.com/install/
centos8安装的官方步骤:
$ sudo yum install epel-release
$ sudo yum config-manager --set-enabled PowerTools
$ sudo yum copr enable jdoss/wireguard
$ sudo yum install wireguard-dkms wireguard-tools
正常的情况下这这些操作完成之后就可以顺利安装。下面补充一下不顺利时可能会遇到的问题:
1.内核版本和下载的kernel-header版本不一致
导致这种情况的可能原因是由于仓库上的header版本是最新的,但是本地使用的kernerl还是老版本,遇到这种情况最好先升级系统到当前最新的发布版本,centos操作相对简单:
# yum update
2.安装完成之后创建wg0网卡提示错误:"RTNETLINK answers: Operation not supported"
出现这种情况的根本原因还是由于wireguard内核模块没有加载,通过lsmod | grep wireguard查看,如果没有输出任何内容,说明推测正确
3.通过dkms编译安装wireguard内核模块
ln -s /usr/src/kernels/4.18.0-147.5.1.el8_1.x86_64 /usr/src/kernels/4.18.0-147.el8.x86_64
dkms build wireguard/0.0.20200215
dkms install wireguard/0.0.20200215
modprobe wireguard
上面是本人实际安装过程中遇到的问题,初始安装建议先参考官方步骤,不要急于使用网上的一键安装脚本,因为这些脚本不一定好用,后面解决问题也麻烦。
wireguard默认是通过udp协议进行通信的,在我的vps上实测速度不比原来的ssr好,也可能是线路本身的问题。android版本可以从google play或者从官方给出的这个网站 https://f-droid.org/en/packages/com.wireguard.android/ 直接下载apk安装包, 比较遗憾的是目前的android版本不能支持endpoint也就是对端服务器配置IPv6地址,希望以后会有升级。
最后保留一份基本的配置模板(配置文件路径/etc/wireguard/wg0.conf),以供参考
服务端:
[Interface]
PrivateKey = +JPgnTe20bhbPXcXLCNguVa6ktSNIKYqf8Rzcl/uknk=
Address = 10.0.0.1/24
ListenPort = 1234
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE[Peer]
PublicKey = VjV95hVUz/8C8REwpvIC6l/5hbmuJjg0i3Fi/WatFgE=
AllowedIPs = 10.0.0.2/32
客户端:
[Interface]
PrivateKey = yJxedPLGqB6hf/0hU/xzH+Wk5etoi+si4AjU4gCddGI=
Address = 10.0.0.2/24
[Peer]
PublicKey = HdRhWE9dkqA8z3Ga7ixBUEhQ/AdcqJbtPMEgIlVD2x8=
Endpoint = 68.79.109.211:1234
AllowedIPs = 0.0.0.0/0,::0/0
PersistentKeepalive = 25
最后是启动和查看的方式
wg-quick up wg0
wg