25
2025
02
21:52:55

wireguard搭建图文教程

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的源码:

github-wg-tools源码

github-wiregurd kernel部分源码

两者之间通过send-recv机制,wg-tools将获取到的参数通过send函数发送到内核,内核接收后,wg-tools再通过recv函数接收处理后的数据,这部分如果感兴趣的人比较多的话后面也可以再专门更新一下wireguard的代码处理过程


废话就说到这里,下面介绍如何搭建两个HOST之间使用wireguard建立连接的过程


  1. 首先要准备两个主机,推荐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关闭该连接


最后再说一下单独执行命令的步骤,首先的参考资料就是官网,有一个非常详细的视频和动图来介绍整个配置过程

wireguard官网的quickstart

我这里为了简单省事(可以每次复制一行到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命令进行验证




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/9177.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: