CentOS7安装wireguard及简单使用 作者: 毕世平 时间: 2021-03-10 分类: 默认分类 `wireguard`是新一代vpn,自带`安全`、`极速`和`方便`的标签,同时被众多大佬看好且推荐,虽然早在19年秋大就编写出了`wireguard`的一键安装脚本,但因为(个人)觉得配置比较麻烦,一直搁浅到了现在...... **友情提醒**:`wireguard`是使用udp传输的`vpn`,虽然目前貌似没有被针对,但毕竟是`vpn`,特征明显,所以显然**不适合翻墙,不适合翻墙,不适合翻墙**。搭建拿来玩玩可以,玩法很多,比如可以拿来组网,安全省心且极速。 本文是使用`秋水逸冰`提供的`wireguard`一键安装脚本来在`CentOS7`上安装,需要先更换秋大提供的`5.10.16`内核,然后再使用脚本从代码编译安装。因为是`组网`,至少要三台设备,电脑算一台(安装好wireguard客户端),vps算一台(安装好wireguard),另一台就选择安装了最新`Raspbian 10`的树莓派吧。本文参考~~(照抄)~~了挺多大神的教程,在此致敬各位的不辞劳苦。 # 一、安装 ## 1.1 更换内核 vps系统选择`CentOS7`,用`root`用户登录系统,执行下面命令: # 安装 yum install -y linux-firmware perl tar wget # 下载三个包 wget https://dl.lamp.sh/kernel/el7/kernel-ml-5.10.16-1.el7.elrepo.x86_64.rpm wget https://dl.lamp.sh/kernel/el7/kernel-ml-devel-5.10.16-1.el7.elrepo.x86_64.rpm wget https://dl.lamp.sh/kernel/el7/kernel-ml-headers-5.10.16-1.el7.elrepo.x86_64.rpm # 安装 yum localinstall kernel-ml-* # 设置启动顺序 执行 awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg 查看最新的5.10.16是否排在第一行(第0位) 如果是则执行 grub2-set-default 0 再执行 grub2-editenv list 上面命令执行完毕后,执行reboot命令重启系统 重启系统后执行 uname -a 查看内核版本,是否正确更换到了5.10.16 **说明**:感谢秋大提供的内核文件以及耐心指导。另外秋大提供的`bbr`脚本因为做了更改,对于centos7是升级安装`4.9`稳定的内核版本,所以对于安装wireguard来讲没啥增益了,这里就不要再使用那个脚本去更换内核了,那个脚本`只用来开启bbr`。 ## 1.2 脚本安装 linux内核从5.6开始就集成了`wireguard module (wireguard-dkms)`,因为上一步是给centos7更换到了5.10的内核,所以自然也就集成了,现在就可以利用脚本把`wireguard tools`安装上。执行下面命令: # 下载脚本,赋予可执行权限 wget --no-check-certificate -O /opt/wireguard.sh https://raw.githubusercontent.com/teddysun/across/master/wireguard.sh chmod 755 /opt/wireguard.sh # 从代码编译安装 /opt/wireguard.sh -s **说明**:按道理讲,这个时候应该就不会遇到什么出错提醒了,也就是会看到恭喜你安装成功的提示了,且可以看到`/etc/wireguard/wg0_client`作为默认客户端配置文件,`/etc/wireguard/wg0_client.png`则作为对配置文件编码形成的一张二维码图片,你可以选择把这两个文件下载下来,用手机/电脑扫码添加,当然也可以用`cat`命令查看内容,复制粘贴即可。 **需要注意的是**,`/etc/wireguard/wg0.conf`可以理解是服务端上的配置文件,虽然wg并没有什么客户端、服务端一说,一般通过修改这个文件来修改配置达到自己想要的结果。 ## 1.3 常用命令 #查看版本号,会显示wireguard-dkms和wireguard-tools的版本号 /opt/wireguard.sh -v # 卸载 /opt/wireguard.sh -n # 新增客户端配置,第一次安装默认是wg0_client,wg0代表网络接口,后面新增默认是wg1_client,wg2_client...... /opt/wireguard.sh -a # 删除客户端配置 /opt/wireguard.sh -d # 列出客户端配置 /opt/wireguard.sh -l # 基于wg0.conf查看wireguard连接动态 wg # 在修改wg0.conf文件后,需要先down,再up wg-quick down wg0 wg-quick up wg0 # 查看服务状态 systemctl status wg-quick@wg0.service # 二、使用 ## 2.1 客户端添加使用 复制`/etc/wireguard/wg0_client`的所有内容,粘贴到下面这里,完成一个节点的添加: ![添加wireguard.png](https://shiping.date/usr/uploads/2021/03/3271642996.png) ![wireguard.png](https://shiping.date/usr/uploads/2021/03/200391058.png) 完成添加后,点击`连接`,恭喜你正式接入`wireguard vpn`了。 ## 2.2 树莓派安装使用 给树莓派装的是最新的`Raspbian 10`,内核貌似是`5.4`,需要先执行`apt update && apt upgrade`升级下软件,这个时候可以去泡杯茶或者休息一下等它升级完,升级完会发现内核已经到了`5.10`版本,接下来的就跟上面一样了,下载上秋大提供的`wireguard`安装脚本执行`/opt/wireguard.sh -s`编译安装即可。 # 安装完成后,切换目录,删除默认配置文件 cd /etc/wireguard && rm wg0.conf wg0_client wg0_client.png # 拷贝vps上得到的/etc/wireguard/wg0_client全文,在此处保存为wg0.conf # 以下是示例 [Interface] PrivateKey = 客户端私钥,用来解密服务端发来的经过相应公钥加密的数据 Address = 10.88.88.2/24,fd88:88:88::2/64 DNS = 1.1.1.1,8.8.8.8 [Peer] PublicKey = 与服务端私钥对应的公钥,用来加密数据并发给服务对端 PresharedKey = 预共享密钥 AllowedIPs = 0.0.0.0/0,::/0 Endpoint = 你的vps IP:4025 # 以上是示例 # 修改完wg0.conf文件后,使之生效 wg-quick down wg0 && wg-quick up wg0 **说明**:上面配置文件是秋大默认给出的,当然对于手机、电脑主动连接到服务端是没有问题的,但是在个人使用时遇到一个问题:在无数据交换一段时间后,服务端无法主动建联客户端,所以就有了这样一条指令,在`[Peer]`下加一行`PersistentKeepalive=25`来保活。完整的也就是下面: # 以下是示例 [Interface] PrivateKey = 客户端私钥,用来解密服务端发来的经过相应公钥加密的数据 Address = 10.88.88.2/24,fd88:88:88::2/64 DNS = 1.1.1.1,8.8.8.8 [Peer] PublicKey = 与服务端私钥对应的公钥,用来加密数据并发给服务对端 PresharedKey = 预共享密钥 AllowedIPs = 0.0.0.0/0,::/0 Endpoint = 你的vps IP:4025 PersistentKeepalive=25 # 以上是示例 **说明**:由于有些ip命令个人也还没搞明白,所以无奈也是有点晕晕的。这样配置以后,树莓派跟vps就处在一个子网下,网段是`10.88.88.0/24`,其中vps ip是`10.88.88.1`,树莓派ip是`10.88.88.2`,现在树莓派可以ping通`google.com`走的也是`真全局vpn`。 ## 2.3 组网 既然树莓派这里已经配置好了,既然要组网,那么手机/电脑就需要再有一个配置了: # vps端新增配置 /opt/wireguard.sh -a 默认选择wg1接口就行,脚本会帮助你生成公钥,预共享密钥等,并帮助你自动使添加生效 # 假设这是默认生成的客户端配置文件 [Interface] PrivateKey = 私钥 Address = 10.88.88.3/24, fd88:88:88::3/64 DNS = 1.1.1.1, 8.8.8.8 [Peer] PublicKey = 公钥 PresharedKey = 预共享密钥 AllowedIPs = 0.0.0.0/0, ::/0 Endpoint = 你的vps ip:4025 # 上面是默认配置 在手机端/电脑端添加好这样的配置以后,连接vpn,在手机/电脑端ssh客户端里指定树莓派的IP是`10.88.88.2`,然后会发现可以连接,且电脑(`10.88.88.3`)和树莓派(`10.88.88.2`)和vps(`10.88.88.1`)相互间可以互相ping通。 这样我们就可以在外面通过4G网络通过vps这个跳板以wireguard隧道的方式连接到我们在家里的这台树莓派上服务的服务,相当于说是wireguard创建了一个广域网,树莓派,电脑,vps都在这个子网下。但是有一个问题,我们虽然可以访问树莓派,但是访问不到树莓派所在内网下的其它设备。遂查了点教程,也做了些尝试,发现需要修改vps端`wg0.conf`配置文件里的`AllowedIPs`,脚本默认创建的此文件内这里只有唯一的设备。具体修改方法如下: # 树莓派端不修改,修改vps端wg0.conf文件 vim /etc/wireguard/wg0.conf # 下面是示例 [Interface] Address = 10.88.88.1/24,fd88:88:88::1/64 ListenPort = 4025 PrivateKey = 私钥 # 树莓派wg0 [Peer] PublicKey = 公钥 AllowedIPs = 10.88.88.2/32,fd88:88:88::2/128,192.168.1.0/24 PresharedKey = 预共享密钥 # 电脑、手机wg1 [Peer] PublicKey = 公钥 AllowedIPs = 10.88.88.3/32,fd88:88:88::3/128 PresharedKey = 预共享密钥 # 上面是示例 #修改了wg0.conf,使修改生效、 wg-quick down wg0 && wg-quick up wg0 在树莓派对应的那端,在`AllowedIPs`后面加上树莓派处于家庭网络中的网段`192.168.1.0/24`。好了,现在你可以`用手机开4G网络`连接上vpn,然后浏览器里输入`http://192.168.1.1`看能不能访问到你家路由器的后台地址。 # 三、结语 好了,我理解的组网也到此完成,虽然用`frp ss-server`搭配也行,但是总担心可能会有风险,用`wireguard`倒不会有这样的担心。本文参考了好多教程,再次对各位表示敬意。本文如有哪些错误,欢迎留言指正。 参考链接: - [WireGuard 一键安装脚本-秋水逸冰](https://teddysun.com/554.html "WireGuard 一键安装脚本-秋水逸冰") - [一键安装最新内核并开启 BBR 脚本-秋水逸冰](https://teddysun.com/489.html "一键安装最新内核并开启 BBR 脚本-秋水逸冰") - [WireGuard基本原理-曹世宏的博客](https://cshihong.github.io/2020/10/11/WireGuard%E5%9F%BA%E6%9C%AC%E5%8E%9F%E7%90%86/ "WireGuard基本原理-曹世宏的博客") - [wireguard-windows版客户端下载页面](https://download.wireguard.com/windows-client/ "wireguard-windows版客户端下载页面") 标签: none