wireguard的搭建过程比较简单,首先需要确保你的Linux内核版本是否 ≥ 5.6,在此之后版本的Linux已经把wireguard合并到了内核,使用uname -a
命令可以查看
$ uname -a
Linux **** 5.15.0-130-generic #140~20.04.1-Ubuntu SMP Wed Dec 18 21:35:34 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
如果内核版本低于5.6的这里自寻STFW,过程会比较麻烦
简单展开介绍一下,Linux上的wireguard可以认为分为两部分
第一部分是用户层,用于对wireguard接口基本参数进行配置的
wg tools
,这仅仅是一个应用层的工具另一部分是内核层面,用于提供
wireguard
核心的比如数据加密,IP允许通过规则控制,握手处理等功能,这部已经合并到了内核代码,其代码目录位于wireguard-linux/drivers/net/wireguard/
下面是对应两个部分在github的源码:
两者之间通过send-recv
机制,wg-tools
将获取到的参数通过send
函数发送到内核,内核接收后,wg-tools
再通过recv
函数接收处理后的数据,这部分如果感兴趣的人比较多的话后面也可以再专门更新一下wireguard
的代码处理过程
废话就说到这里,下面介绍如何搭建两个HOST之间使用wireguard
建立连接的过程
首先要准备两个主机,推荐
ubuntu 20.04
版本及以上,因为我在18.04
遇到了下面这个Numerical result out of range
问题(具体不知道什么原因,我也没解决)
tu@oooo:~/software/1.wireguard$ sudo wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
Unable to modify interface: Numerical result out of range
[#] ip link delete dev wg0
2.安装wg-tools
sudo apt install wireguard-tools
3. 在两台主机上分别执行下面的命令,遇到这个警告意思是让你把这个私钥文件隐藏一下,不影响配置
主机A - 192.168.10.198:
~/so/2/tmp ❯ wg genkey > ./private
Warning: writing to world accessible file.
Consider setting the umask to 077 and trying again.
~/so/2/tmp ❯ wg pubkey < ./private > public
~/so/2/tmp ❯ cat private 0LwvfM17TPconguEmJocu8eFUdkBYI0g75f0qtVDaWI=
~/so/2/tmp ❯ cat public Zk6GLEU0KSafQ35V6siV/H+cIJemO6Tc7M9iancK/WE=
~/so/2/tmp ❯
主机B - 192.168.10.199:
$ wg genkey > private
Warning: writing to world accessible file.
Consider setting the umask to 077 and trying again.
$ wg pubkey < private > public
$ cat ./privateMIAblHBOcQBm6gbxNrjpXcIY9lG1MxSzR1Hfo/HjvUM=
$ cat ./public96I4WyIZMxZvCvW6Uzsdnf+seTQZF7+ZUqylIzGjEFM=
4. 到此为止,你会得到两个私钥和两个公钥,这里先介绍第一种方式,使用wg-quick
脚本配合wg0.conf
建立连接 (参考以下配置文件)
主机A wg0.conf配置:
~/so/2/tmp ❯ sudo cat /etc/wireguard/wg0.conf
[Interface]
PrivateKey = 0LwvfM17TPconguEmJocu8eFUdkBYI0g75f0qtVDaWI= #填写主机A自己的私钥
Address = 10.0.0.2/24 #表示wg0网卡的IP地址,24位掩码
ListenPort = 51820 #主机A wireguard监听的端口号
[Peer]
PublicKey = 96I4WyIZMxZvCvW6Uzsdnf+seTQZF7+ZUqylIzGjEFM= #填写对端PEER,这里也就是主机B的公钥
Endpoint = 192.168.10.199:51820 #主机B的IP和其绑定的端口
AllowedIPs = 10.0.0.1/32 #允许通过的IP,这里表示只允许10.0.0.1这个IP通过
主机B wg0.conf配置
主机B的参数配置和主机A含义一致,其中Address
中的值表示主机B的wg0
网卡会被设置为IP
为10.0.0.1 ,掩码24位,另外AllowedIPs = 0.0.0.0/0
表示允许所有的IP
通过,也就是主机B允许建立wireguard
连接之后的所有IP
通过,然后把私钥和公钥进行对应的修改
$ sudo cat /etc/wireguard/wg0.conf
[Interface]
PrivateKey = MIAblHBOcQBm6gbxNrjpXcIY9lG1MxSzR1Hfo/HjvUM=
Address = 10.0.0.1/24
ListenPort = 51820
[Peer]
PublicKey = Zk6GLEU0KSafQ35V6siV/H+cIJemO6Tc7M9iancK/WE=
AllowedIPs = 0.0.0.0/0
Endpoint = 192.168.10.198:51820
5. 接下来就是分别在两台主机上执行以下三个命令
sudo wg-quick up wg0
sudo wg
sudo wg showconf wg0
如果前面的都配置正确,正常应该可以看到这些信息(其中某一台)

另外使用ifconfig可以看到当前wg0的网卡信息
$ ifconfigwg0: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1420
inet 10.0.0.1 netmask 255.255.255.0 destination 10.0.0.1
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
RX packets 249 bytes 11212 (11.2 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 659 bytes 83064 (83.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
6. 使用己方的wg0
ip
ping
对方ip
进行验证
$ ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=2.37 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=7.77 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=3.01 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=2.66 ms
到这为止,已经成功使用wireguard建立双方的加密连接,并且可以使用10.0.0.1 - 10.0.0.2这两个ip进行通信
7. 使用sudo wg-quick down wg0
关闭该连接
最后再说一下单独执行命令的步骤,首先的参考资料就是官网,有一个非常详细的视频和动图来介绍整个配置过程
我这里为了简单省事(可以每次复制一行到shell执行),放到一个bash脚本里面执行,然后使用注释的方式说明
tu@oooo:~/software/wg_test$ cat ./wg_test.sh
#!/bin/bash
sudo ip link add dev wg0 type wireguard #使用ip link add添加一个类型为wireguard的网卡
sudo ip addr add 10.0.0.1/24 dev wg0 #配置该网卡ip和掩码
sudo wg set wg0 private-key ./private #设置wg0接口的私钥信息,使用前面的wg genkey命令生成
sudo ip link set wg0 up #启动该网卡
#sudo wg set wg0 peer SaajZfg+iIDEnpnZCtS5tgwlwrSRmOD+cP+KcuJGDBM= allowed-ips 10.0.0.2/32 endpoint 172.16.100.132:51820
如果使用此方式,最后的命令每次都会变,因为使用该方式启动多个wg0
监听的端口每次不一样,所以需要对应的修改命令最后的端口号,同时把其中的公钥替换成对方的公钥
sudo wg set wg0 peer SaajZfg+iIDEnpnZCtS5tgwlwrSRmOD+cP+KcuJGDBM= allowed-ips 10.0.0.2/32 endpoint 172.16.100.132:51820
该步骤配置没有问题的话,后面就可以直接用ping
命令进行验证
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/9177.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~