|
我用centos7装的全新的系统
安装: https://www.wireguard.com/install/
yum install epel-release elrepo-release
yum install yum-plugin-elrepo
yum install kmod-wireguard wireguard-tools
###############################################################
2025-01-15 用华为云的一台2H4G的轻量,系统选的centos8.2
然后常规方式无法安装
我用这个方式安装的
用wg官网的centos8的第三种方法装好了
yum install epel-release
yum config-manager --set-enabled PowerTools
yum copr enable jdoss/wireguard
yum install wireguard-dkms wireguard-tools
###############################################################
2025-02-12 一台2H4G的Rocky_8.9_x64
yum install elrepo-release epel-release
yum install kmod-wireguard wireguard-tools #这条命令卡住了 ,被云服务器厂家的防火墙阻断了
我大概知道是什么原因了,国内的云服务器商家,因为合规性要求,提供的centos8系统都是魔改过的
只能用上面华为云的安装方式安装
这台服务器即使安装了,也找不到模块,内核版本是4.18的
我估计是底层防火墙就直接删了wireguard的包
配置: https://www.wireguard.com/quickstart/
A:
ip link add dev wg0 type wireguard
ip address add dev wg0 192.168.2.1/32
ip address add dev wg0 192.168.2.1 peer 192.168.2.2
ip address add dev wg0 192.168.2.1 peer 192.168.2.3 #这里有几个peer这里就要弄几条 不然的话对方能连上,但是网络是不通的 我观察过,添加了这个peer就是添加了一条路由表 这条命令是我最后做三角形网络的时候额外输入的 前期AB互联不需要这个
生成conf文件
cd /etc/wireguard/
wg genkey | tee privatekey | wg pubkey > publickey
vi custom.conf #这里需要新建配置文件
[Interface]
PrivateKey = MIWUc1ptjwoJqH1b/gij7tbNhA8bDLwy1vqMs4A/UlQ= #私钥填自己的
ListenPort = 51820
[Peer]
PublicKey = 8bsgsg0hOPFGOIwMzTb5oVTb37YKA0aE+adImV06ajY= #公钥填对方的
Endpoint = 192.168.11.160:51820 #这里的IP填对方的公网IP,比如用的阿里云要填公网IP,我这里演示用的内网所以就直接填网卡的IP了
AllowedIPs = 192.168.2.2/32 #这个表示发往这个地址的数据包走wireguard
wg setconf wg0 custom.conf
ip link set up dev wg0
firewall-cmd --permanent --zone=public --add-port=51820/udp
firewall-cmd --zone=public --add-port=51820/udp
B:
ip link add dev wg0 type wireguard
ip address add dev wg0 192.168.2.2/32
ip address add dev wg0 192.168.2.2 peer 192.168.2.1
ip address add dev wg0 192.168.2.2 peer 192.168.2.3 #不同的节点之间注意IP 这条命令是我最后做三角形网络的时候额外输入的 前期AB互联不需要这个
生成conf文件
cd /etc/wireguard/
wg genkey | tee privatekey | wg pubkey > publickey
vi custom.conf #这里需要新建配置文件
[Interface]
PrivateKey = IA2r48tVzUT8Z6bOvdv9VRW4QlrWPZKnSjJx6sBeDWk=
ListenPort = 51820
[Peer]
PublicKey = ffqjR7FR8Ki0nwXWPgw/Q83Wb4TluIH//VRyZNxongA=
Endpoint = 192.168.11.159:51820
AllowedIPs = 192.168.2.1/32
wg setconf wg0 custom.conf
ip link set up dev wg0
firewall-cmd --permanent --zone=public --add-port=51820/udp
firewall-cmd --zone=public --add-port=51820/udp
ping测试
ping 192.168.11.160 延迟0.4毫秒
ping 192.168.2.2 延迟0.8毫秒 说明是通过wireguard访问的
然后再A上开启转发
firewall-cmd --permanent --zone=public --add-masquerade
firewall-cmd --zone=public --add-masquerade
用一台虚拟机,把网关设置为A
然后这台虚拟机ping 192.168.2.2 成功了
然后用traceroute 192.168.0.1(这个是我光猫的IP)命令,查看,走的是正常出口,因为上面的配置文件allowedips只有对面的IP
现在测试把allowedips增加0.0.0.0/0,试试效果
首先需要把B也开启转发(我ping的是光猫的IP,如果B不开转发,数据包到B的时候就会被丢弃了,就看不到效果了)
然后修改A的配置文件里面的allowedips为AllowedIPs = 192.168.2.2/32,0.0.0.0/0
修改完毕重新加载配置
wg syncconf wg0 custom.conf
同时还需要修改路由,让默认路由走wg的接口
默认路由 不用管他 我们手动添加一条路由
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.2.2 metric 1 #注意,metric一定要小于之前的默认路由
再测试traceroute命令,就发现通过wireguard转发了
我怀疑是不是上面的wg0的IP设置错了,这样是不是直接内网交换机转发的? 修改掩码试试 这个测试是因为我最开始用的是/24的掩码,我以为他们互相之间都是可以内网互通的,后来才懂,type限制了
ifconfig wg0 down
ip addr del 192.168.2.1/24 dev wg0
ip addr change 192.168.2.1/32 dev wg0
ifconfig wg0 up
ifconfig wg0 down
ip addr del 192.168.2.2/24 dev wg0
ip addr change 192.168.2.2/32 dev wg0
ifconfig wg0 up
还不死心就reboot一下
额,原来重启配置都没了,那更好了
直接重新配置,除了不需要重新生成密钥,把子网掩码改为32位的
实测成功
添加了路由表以后确实走另外一台了
再次测试不要0.0.0.0/0试试
实测不要0.0.0.0/0用作测试的虚拟机就上不去网了(这个结论的前提是A添加了路由表所有流量通过wg走B)
然后添加了0.0.0.0/0以后就瞬间好了
最后测试先不启动wg 直接link up 看看能否通
不通
最最后测试 直接用不同网段的IP试试
竟然真的可以
A用192.168.2.1/32
B用10.0.0.2/32
然后他们之间也能建立wg
看了看路由表,有这条
10.0.0.2 dev wg0 proto kernel scope link src 192.168.2.1
然后测试客户端所有流量都走wg 添加路由表route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.0.0.2 metric 1
测试成功
结论:双方的IP完全可以随意填写,不过为了方便管理,建议还是用同网段的吧
测试了用公网IP也是可以的,也就是说这个IP真的就是随便填了
应该是只要不和自己的以及对方的内网冲突就行,因为如果冲突了就不方便组网了 比如A公司内网192.168.0.0/24 然后B公司内网也是192.168.0.0/24 同时他们内部还有的电脑获取了同一个IP,这样组网就不方便了
最最后,学一下link添加一个同网段的IP试试
ip link add dev wg1 type wireguard
ip address add dev wg1 192.168.3.1/24
ip link set up dev wg1
ip link add dev wg1 type wireguard
ip address add dev wg1 192.168.3.2/24
ip link set up dev wg1
ping的时候提示
ping: sendmsg: Required key not available
最后测试删掉type
提示需要指定type
然后查看了一下ip link help
原来可以直接添加这么多种类型的接口
至此,wireguard学习完毕
真的是非常简单啊
写这个教程前我还用docker安装过,实测docker对内核的要求比较高
我用rockylinux8失败 直接就启动不了
然后用rockylinux9也失败了,提示iptables找不到filter,这就是因为最新的linux内核已经不默认用iptables用的是nftables
所以我放弃用docker而是直接安装了
再补充,我今天又用windows测试了 添加了一台windows的wireguard
很简单,安装完毕以后
新建一个连接配置这样填
[Interface]
PrivateKey = 2H6AUo3TKTayvpFdqdSPUpBGlHgCMMxFM7Lz+GrqnFw=
ListenPort = 51820
Address = 192.168.2.3/32
[Peer]
PublicKey = ffqjR7FR8Ki0nwXWPgw/Q83Wb4TluIH//VRyZNxongA=
AllowedIPs = 192.168.2.1/32, 0.0.0.0/1, 128.0.0.0/1
Endpoint = 192.168.11.159:51820
#注意,如果AllowedIPs填0.0.0.0/0的话
软件下面会自动出现"拦截未经隧道的流量",并且已经打勾
这样windows就ping不通自己内网里面的其他电脑了
把勾取消,配置就自动变为目前显示的这样0.0.0.0/1, 128.0.0.0/1
这样的状态就是表示内网直连的不走wg,然后其他所有流量都走wg
(懂了,原来127.0.0.0/8是特殊的网段,然后127的二进制表示是0111 11111 )
(可以看看这个提问https://unix.stackexchange.com/q ... 0-0-0-1-and-default)
一般来说,windows用wg都是仅仅用于家里访问公司的内网,这个AllowedIPs只需要填peer的IP和公司内网的网段就行了
上面的这个配置文件表示这个windows通过peer访问外网
如果公网服务器是windows,只是当作节点用的话
则配置文件看起来是这样的
[Interface]
PrivateKey = 2H6AUo3TKTayvpFdqdSPUpBGlHgCMMxFM7Lz+GrqnFw=
ListenPort = 51820
Address = 192.168.2.3/32
[Peer]
PublicKey = ffqjR7FR8Ki0nwXWPgw/Q83Wb4TluIH//VRyZNxongA=
AllowedIPs = 192.168.2.1/32
Endpoint = 192.168.11.159:51820
[Peer]
PublicKey = 8bsgsg0hOPFGOIwMzTb5oVTb37YKA0aE+adImV06ajY=
AllowedIPs = 192.168.2.2/32
Endpoint = 192.168.11.160:51820
这个配置是最后做了个三角形的网络的
AllowedIPs这里一定要慎重
如果有多个peer,而你在其中一个peer的AllowedIPs那里填了多个网段
那么这个特殊节点连接上以后,你多填的网段也会强制走这个节点,这样可能会导致其他节点无法连接
比如下面这个配置文件
[Interface]
PrivateKey = 2H6AUo3TKTayvpFdqdSPUpBGlHgCMMxFM7Lz+GrqnFw=
ListenPort = 51820
Address = 192.168.2.3/32
[Peer]
PublicKey = ffqjR7FR8Ki0nwXWPgw/Q83Wb4TluIH//VRyZNxongA=
AllowedIPs = 192.168.2.1/32, 0.0.0.0/1, 128.0.0.0/1
Endpoint = 192.168.11.159:51820
[Peer]
PublicKey = 8bsgsg0hOPFGOIwMzTb5oVTb37YKA0aE+adImV06ajY=
AllowedIPs = 192.168.2.2/32
Endpoint = 192.168.11.160:51820
这个就是连接了Endpoint = 192.168.11.159:51820以后 所有的流量就都走这里了,然后下面的那个peer就无法连接了
基本上就是这些了
最后如果把一个linux节点当路由器,需要进行流量分流的时候
可以使用iptables+fwmark 然后配合路由表
最后再补充一点我测试的
断开连接,然后我把这个
PublicKey = ffqjR7FR8Ki0nwXWPgw/Q83Wb4TluIH//VRyZNxongA=
随机修改了一位,把倒数第2位的A改为B结果整条就变红了,然后我保存以后再看他自动变为了A
又测试了一下,大概懂了
我估计=表示终止符,前面最后一位应该是校验,这一串密钥改为F和I也都能校验通过
再前面的就是真的密钥了
但是我也不确定是不是这样,密钥生成是不是有一定规律的
|
|