本文章已收录至本站专栏
服务器集群系列
1、前言
1.1、服务器介绍
云厂商 | 地域 | 公网IP | WireGuard虚拟IP | 操作系统 | 内核版本 |
---|---|---|---|---|---|
腾讯云 | 中国上海 | 1.x.x.x | 192.168.100.1 | CentOS 7.9.2009 | Kernel 5.18.15-1.el7.elrepo.x86_64 |
腾讯云 | 中国上海 | 121.x.x.x | 192.168.100.2 | Ubuntu 20.04.4 LTS x86_64 | Kernel 5.4.0-123-generic |
腾讯云 | 中国香港 | 150.x.x.x | 192.168.100.3 | CentOS 7.9.2009 | Kernel 5.18.15-1.el7.elrepo.x86_64 |
腾讯云 | 美国硅谷 | 23.x.x.x | 192.168.100.4 | CentOS 7.9.2009 | Kernel 5.18.15-1.el7.elrepo.x86_64 |
腾讯云 | 美国硅谷 | 49.x.x.x | 192.168.100.5 | Ubuntu 20.04.4 LTS x86_64 | Kernel 5.4.0-123-generic |
1.2、WireGuard介绍
WireGuard是由Jason A. Donenfeld开发的开放源代码VPN程序及协议,基于Linux内核实现,利用Curve25519进行密钥交换,ChaCha20用于加密,Poly1305用于数据认证,BLAKE2用于散列函数运算,支持IPv4和IPv6的第3层。
——维基百科
2、升级内核
WireGuard需要Kernel 5.x及以上内核。
CentOS:
1 | yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm yum install --enablerepo=elrepo-kernel kernel-ml |
Ubuntu:
1 | sudo apt-get upgrade linux-image-generic |
完成后,执行:
1 | cat /boot/grub2/grub.cfg | grep -v rescue | grep ^menuentry |
查看安装的内核,以Kernel 5.18.15为例,执行:
1 | grub2-set-default 'CentOS Linux (5.18.15-1.el7.elrepo.x86_64) 7 (Core)' |
并重启。
3、防火墙设置
先执行
1 | route -n |
记录返回的网段。
执行
1 | echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf sysctl -p /etc/sysctl.conf iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i wg0 -o wg0 -m conntrack --ctstate NEW -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.100.1/24 -o eth0 -j MASQUERADE |
注意:
- 请把
192.168.100.1/24
替换为你想要的虚拟网段,不可和上一步返回的网段重复。 - 可能重复的网段:
192.168.x.0/24,10.0.x.0/24,172.x.0.0/16
- 请把
wg0
替换你想要的虚拟网卡名称,此处可以自定义,但是需要注意把下文中的wg0
全部替换掉。
建议:
在各节点对其他节点开放
1 | TCP 1-65535 UDP 1-65535 |
必需:
在各节点对其他节点开放
1 | UDP 5418 |
注意:5418为WireGuard监听端口,可以自定义。
4、安装WireGuard
CentOS:
1 | yum install epel-release https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm yum install yum-plugin-elrepo kmod-wireguard wireguard-tools -y |
Ubuntu:
1 | sudo apt install wireguard |
5、配置WireGuard
执行
1 | mkdir /etc/wireguard/ cd /etc/wireguard/ wg genkey | tee privatekey | wg pubkey > publickey |
创建密钥,查看密钥:
1 | cat privatekey publickey |
返回类似:
1 | EMWcI01iqM4zkb7xfbaaxxxxxxxxDo2GJUA= 0ay8WfGOIHndWklSIVBqrsp5LDWxxxxxxxxxxxxxxQ= |
即代表创建成功。
5.1、自动配置
配置文件较复杂,这里提供一个PHP脚本:
此处内容需要评论回复(自动审核)或加入 QQ 技术交流群(立即获得内容)后方可阅读。赞助(二维码在文章下方)后联系作者可一次性解锁所有(包括之后的新文章)。
放在某网站下,例如https://example.com/wireguard/config.php
。
在
/etc/wireguard/wan
/etc/wireguard/lan
分别填入该服务器的公网IP和WireGuard虚拟IP
即可执行
1 | cd /etc/wireguard/ wget -O --no-check-certificate https://example.com/wireguard/config.php?ip=$(cat /etc/wireguard/lan) && wg-quick up wg0 |
5.2、手动配置
每个配置文件都为
/etc/wireguard/wg0.conf
需要填入一个:
1 | [Interface] PrivateKey = EMWcI01iqM4zkb7xfbaaxxxxxxxxDo2GJUA= Address = 192.168.100.1 ListenPort = 5418 |
即本机的私钥,虚拟IP,绑定端口。
和若干个
1 | [Peer] PublicKey = 3izpVbZgPhlM+S5szOogTDTxxxxxxxxxuKuDGn4= EndPoint = x.x.x.x:5418 AllowedIPs = 192.168.100.x/32 |
即集群内其他机器的公钥,公网IP:绑定端口,虚拟IP。
5.3、错误排查
如果提示
1 | [#] ip link add wg0 type wireguard RTNETLINK answers: Operation not supported Unable to access interface: Protocol not supported [#] ip link delete dev wg0 Cannot find device "wg0" |
就代表内核版本过低,请检查是否已升级,或是否设置为默认启动内核。
如果没有报错,就组网完成了。
6、调试
1 | wg-quick up wg0 # 启动 wg-quick down wg0 # 关闭 systemctl enable wg-quick@wg0 # 开启开机自启动 systemctl disable wg-quick@wg0 # 关闭开机自启动 wg syncconf wg0 <(wg-quick strip wg0) # 热重载 不影响已有连接 wg # 查看当前配置 |
完成后,可以通过
1 | telnet 192.168.100.x 22 telnet 192.168.100.x 3306 curl 192.168.100.x curl https://192.168.100.x |
等方式检测连通性。检测时,测试的端口无需在外网开放,因为通过WireGuard连接。
另外,也可以通过
1 | route -n |
列出的路由表检测是否已完成组网。
7、参考
多云搭建 K3S 集群
https://www.cnsre.cn/posts/211119132529/
服务器集群(二)WireGuard组网
评论