附:好用的 WireGuard Web Interface
https://github.com/ngoduykhanh/wireguard-ui
来自我的突发奇想
某天训练时没有事干,看着树莓派,逛着淘宝,想买一个M.2拓展板,随后看了看银行卡,笑死,根本没有钱。
于是放弃了。
接着想了又想,突然想起个几年前自己多人联机(指游戏)时用过的蒲公英,所以想搞个和蒲公英差不多的。
解决方案:WireGuard
为什么选WireGuard呢?
听说很好用,所以我也选了,结果真的好用。
总之,是简单,真的简单,真的真的非常简单。
只不过WireGuard是通过UDP通信的,可能会被运营商QoS限速。(不过是基于UDP的那是不是改个端口也能绕过校园网呢?)
本文章的所有资料收集于互联网并整合本人经验撰写而成,且不会提供客户端的下载直链。
服务器配置
WireGuard好像添加到Linux 5.6内核中了,但是这不代表你不需要安装。
安装相关软件
我这里选择Ubuntu 20.04的服务器,无需添加ppa源(你也添加不上),直接apt安装即可
apt install wireguard wireguard-tools resolvconf -y
modprobe wireguard
如果你安装时在dkms那边报错了,试试升级系统或者内核吧。
公私钥生成
先执行一段命令,生成公私钥。From Github Gist
// 生成私钥
wg genkey
// 生成后复制它,然后生成公钥
echo '你的私钥' | wg pubkey
// 随后保存私钥和公钥
撰写配置文件
随后,切换到WireGuard目录(/etc/wireguard),创建一个配置文件,这里我命名为:wg0.conf
[Interface]
PrivateKey = 你的私钥
Address = 10.0.0.1/24 # 本机IP,24代表着255.255.255.0,当然这IP不能乱填哈
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 2083
# 监听端口
[Peer]
# 这是客户端的配置
PublicKey = 客户端公钥
AllowedIPs = 10.0.0.2/32 # 客户端的IP,不要冲突。我不是很理解/32是什么意思
打开内核IP转发
为什么要这步呢?这东西不开Peer之间是不能互通的。
来源:Linux下启用IP转发功能(主要针对Ubuntu的使用)
echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
/etc/init.d/procps restart
设置开启启动
如果你不需要开机自启,可以忽略这一步。
systemctl enable wg-quick@wg0 // wg0是你的配置文件名称,本文中是wg0
启动WireGuard
systemctl start wg-quick@wg0 // wg0是你的配置文件名称,本文中是wg0
顺便一提,WirdGuard似乎不支持reload (热加载),实测每次重启后,客户端都会断连一会儿
客户端配置
生成公私钥
客户端生成公私钥也可以执行下面的命令。Windows客户端会自动生成公私钥,其余客户端没有试过。
// 生成私钥
wp genkey
// 生成后复制它,然后生成公钥
echo '你的私钥' | wg pubkey
// 随后保存私钥和公钥
配置文件
创建一个conf文件,名称随意,这里我用Windows当作客户端。你可以在客户端内新建空白配置文件(隧道)。
PublicKey是公钥,需要填到服务器的Peer中,PrivateKey是私钥,不用给任何人,也不要修改。
然后参考一下格式修补配置文件
[Interface]
PrivateKey = 4ML2bxeApulYMfV24DFVr+vivh6ZCZokQSzO5fCBzmU= # 你的私钥
Address = 10.0.0.2/24 # 客户端IP,和在服务端Peer中的IP保持一致
DNS = 114.114.114.114 # 如果你要绕过校园网的话,可能还要再指定一个上游DNS
[Peer]
PublicKey = 1fCduxAW1ilmeQqNzMF13qudRPjbc1aDpOG8GrJ2Bmc= # 服务器的公钥
AllowedIPs = 10.0.0.0/24, ::/1, 8000::/1 # 允许的IP,这里10.0.0.0/24是只允许这个网段的IP走WireGuard,其余的直连。
Endpoint = 服务器IP:端口
多客户端
如果要创建多客户端,则每个客户端公私钥,IP不能相同,然后在服务端上增加Peer即可。只需要修改PublicKey。
下面是服务器端多Peer例子
[Interface]
PrivateKey = 你的私钥
Address = 10.0.0.1/24 # 本机IP,24代表着255.255.255.0,当然这IP不能乱填哈
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 2083
# 监听端口
[Peer]
# 这是客户端的配置
PublicKey = 客户端公钥
AllowedIPs = 10.0.0.2/32 # 客户端的IP,不要冲突。我不是很理解/32是什么意思
[Peer]
# 这是客户端2的配置
PublicKey = 客户端2的公钥
AllowedIPs = 10.0.0.3/32 # 客户端的IP,不要冲突。
可以看到,只需要增加一个Peer即可。增加客户端不需要修改原有客户端的配置。
完成后,重启WireGuard,不过可能会造成其余客户端的几秒钟连接中断。
systemctl restart wg-quick@wg0
Cheers!

此时,多增加一些客户端,来试试能否互相ping通。如果还有一些疑问,欢迎评论。
发表评论