CentOS7一键脚本安装WireGuard

于一键脚本

1、仅适用于centos7

2、VPS架构必须是KVM

3、测试了搬瓦工、谷歌云、Vultr的centos7,可以完美搞定

4、cento7大部分内核都是3.10,不能正确安装,所以需要升级

5、有些厂商的vps内核貌似升级不了,例如vpsserver,这个还是要自行解决

6、wireguard是一个peer对应一个客户端,如果需要多个客户端使用可查看多用户配置视频。

教程开始

1、VPS应安装为centos7系统,使用xshell或其他ssh工具连接VPS后,执行下面命令:

yum install -y wget && wget https://raw.githubusercontent.com/atrandys/wireguard/master/wireguard_install.sh && chmod +x wireguard_install.sh && ./wireguard_install.sh
2、执行脚本会弹出选择项,首先我们选择安装内核,安装过程中需要几分钟,最后按照提示重启。

3、重启完毕,使用xshell连接VPS,执行下面命令:

./wireguard_install.sh

4、执行命令会弹出和第2步相同的选择项,这次我们选择安装wireguard,安装过程中需要等几分钟,安装完成服务即自行启动了。

5、使用xftp等ftp工具连接vps,进入/etc/wireguard/目录,然后将client.conf下载到本地电脑。(这个配置文件里面包含的是客户端的各种参数,mac、linux客户端也是使用这些参数。)

6、下载安装TunSafe,这是一个windows端的第三方客户端,因为官方windows版本的还没开发完成,先用这个软件代替,TunSafe已经开源了,可以放心使用。

官网下载:TunSafe

7、打开TunSafe,点击file,选择import file,选择第5步下载的client.conf文件,导入到软件中。

8、导入后会自动连接,连接成功后,所有流量都会被代理,也就是全局代理。

9、使用Linux、Mac系统的同学,可以去官方查看一下如何安装对应的客户端,比较简单,这里就不讲了。

安卓版客户端教程

1、去Google Play下载wireguard,目前这个软件在Google Play中是未发布版,也可直接下载下面的f-droid的安装包。

安卓版wireguard:点击下载

2、将软件安装好,并将本教程服务端获取的client.conf文件传输到手机中。打开软件,点击加号,在弹出的页面选择create from file or archive,然后选择保存在手机的conf文件。

注意:这里可能会提示错误,原因是没有文件操作权限,去权限管理里给软件勾上存储权限即可。

选择文件后如下图所示

开启代理即可。

iOS版客户端

现在是测试版,官方和tunsafe都提供了测试版,需要先进链接安装testflight,然后再在手机上打开这个测试版连接,就可以跳转到testflight,然后安装就可以了

官方ios版:wireguard测试版

Tunsafe ios版:wireguard测试版

导入测试文件很简单,可以直接打开软件,扫描服务上生成的二维码,也可以把文件复制到手机,然后用软件打开。

多用户

wireguard一个配置文件同一时间只能连接一个设备,所以你如果需要多用户,那么需要多个配置文件。

多用户配置可以参考这个视频,讲解的应该够清楚。

非常重要

这里是一些大家wireguard后遇到各种问题的排查过程,遇到问题先来这里看,有遇到问题自行解决过了而且下面没提及到的,请各位童鞋留言,我会补充上。

服务端

1、首先使用 wg 命令,查看wireguard服务是否正常启动,peer是否正常。

2、检查配置文件wg0.conf,ip不可使用ipv6,因为ip是自动联网查询的,有可能会得到ipv6地址,需要改成ipv4的地址。

3、使用 ip link 命令查看物理网卡是否为eth0,如果不是将真实名称(除了lo、wg0的那个网卡)替换wg0.conf中的eth0。

4、你的云服务商的防火墙是否放行。像谷歌云/阿里云等在web控制台都可以看到防火墙设置,需自行配置放行规则。

5、你的云服务器的内网IP段不要和10.0.0.1/24冲突,我遇到过谷歌云内网网段(自己配置的)和wg使用的网段冲突的情况,这种问题很少见,除非是你自己配置的内网IP。

客户端(windows)

1、用管理员权限打开tunsafe,不要同时开启其他代理类软件。

2、如果是电脑直接拨号上网,可能会出现无法连接的情况,换路由器拨号。

3、有安装过SSTAP的情况(它安装的虚拟网卡会设置静态IP),wireguard可能会共用sstap安装的网卡,注意把这个虚拟网卡的ip和dns设置为自动获取。

4、安装过其他VPN的卸载一下,重装tunsafe试试。

5、本地ip地址可能是10.0.0.1/24网段的,会有冲突,给wireguard设置其他网段,默认10.0.0.1改成其他,例如10.8.0.1。

脚本内容:

#!/bin/bash

#判断系统
if [ ! -e ‘/etc/redhat-release’ ]; then
echo “仅支持centos7”
exit
fi
if [ -n “$(grep ‘ 6\.’ /etc/redhat-release)” ] ;then
echo “仅支持centos7”
exit
fi

#更新内核
update_kernel(){

yum -y install epel-release curl
sed -i “0,/enabled=0/s//enabled=1/” /etc/yum.repos.d/epel.repo
yum remove -y kernel-devel
rpm –import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum –disablerepo=”*” –enablerepo=”elrepo-kernel” list available
yum -y –enablerepo=elrepo-kernel install kernel-ml
sed -i “s/GRUB_DEFAULT=saved/GRUB_DEFAULT=0/” /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-ml-devel-4.19.1-1.el7.elrepo.x86_64.rpm
rpm -ivh kernel-ml-devel-4.19.1-1.el7.elrepo.x86_64.rpm
yum -y –enablerepo=elrepo-kernel install kernel-ml-devel
read -p “需要重启VPS,再次执行脚本选择安装wireguard,是否现在重启 ? [Y/n] :” yn
[ -z “${yn}” ] && yn=”y”
if [[ $yn == [Yy] ]]; then
echo -e “VPS 重启中…”
reboot
fi
}

#生成随机端口
rand(){
min=$1
max=$(($2-$min+1))
num=$(cat /dev/urandom | head -n 10 | cksum | awk -F ‘ ‘ ‘{print $1}’)
echo $(($num%$max+$min))
}

wireguard_update(){
yum update -y wireguard-dkms wireguard-tools
echo “更新完成”
}

wireguard_remove(){
wg-quick down wg0
yum remove -y wireguard-dkms wireguard-tools
rm -rf /etc/wireguard/
echo “卸载完成”
}

config_client(){
cat > /etc/wireguard/client.conf <<-EOF [Interface] PrivateKey = $c1 Address = 10.77.77.2/32 DNS = 8.8.8.8 MTU = 1420 [Peer] PublicKey = $s2 Endpoint = $serverip:$port AllowedIPs = 0.0.0.0/0, ::0/0 PersistentKeepalive = 25 EOF } #centos7安装wireguard wireguard_install(){ curl -Lo /etc/yum.repos.d/wireguard.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-7/jdoss-wireguard-epel-7.repo yum install -y dkms gcc-c++ gcc-gfortran glibc-headers glibc-devel libquadmath-devel libtool systemtap systemtap-devel yum -y install wireguard-dkms wireguard-tools yum -y install qrencode mkdir /etc/wireguard cd /etc/wireguard wg genkey | tee sprivatekey | wg pubkey > spublickey
wg genkey | tee cprivatekey | wg pubkey > cpublickey
s1=$(cat sprivatekey)
s2=$(cat spublickey)
c1=$(cat cprivatekey)
c2=$(cat cpublickey)
serverip=$(curl ipv4.icanhazip.com)
port=$(rand 10000 60000)
eth=$(ls /sys/class/net | grep e | head -1)
chmod 777 -R /etc/wireguard
systemctl stop firewalld
systemctl disable firewalld
yum install -y iptables-services
systemctl enable iptables
systemctl start iptables
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
service iptables save
service iptables restart
echo 1 > /proc/sys/net/ipv4/ip_forward
echo “net.ipv4.ip_forward = 1” >> /etc/sysctl.conf
sysctl -p
cat > /etc/wireguard/wg0.conf <<-EOF [Interface] PrivateKey = $s1 Address = 10.77.0.1/16 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -I FORWARD -s 10.77.77.1/24 -d 10.77.77.1/24 -j DROP; iptables -t nat -A POSTROUTING -o $eth -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -D FORWARD -s 10.77.77.1/24 -d 10.77.77.1/24 -j DROP; iptables -t nat -D POSTROUTING -o $eth -j MASQUERADE ListenPort = $port DNS = 8.8.8.8 MTU = 1420 [Peer] PublicKey = $c2 AllowedIPs = 10.77.77.2/32 EOF config_client wg-quick up wg0 systemctl enable wg-quick@wg0 content=$(cat /etc/wireguard/client.conf) echo "电脑端请下载client.conf,手机端可直接使用软件扫码" echo "${content}" | qrencode -o - -t UTF8 } add_user(){ echo -e "\033[37;41m给新用户起个名字,不能和已有用户重复\033[0m" read -p "请输入用户名:" newname cd /etc/wireguard/ cp client.conf $newname.conf wg genkey | tee temprikey | wg pubkey > tempubkey
ipnum=$(grep Allowed /etc/wireguard/wg0.conf | tail -1 | awk -F ‘[ ./]’ ‘{print $6}’)
newnum=$((10#${ipnum}+1))
sed -i ‘s%^PrivateKey.*$%'”PrivateKey = $(cat temprikey)”‘%’ $newname.conf
sed -i ‘s%^Address.*$%'”Address = 10.77.77.$newnum\/32″‘%’ $newname.conf

cat >> /etc/wireguard/wg0.conf <<-EOF [Peer] PublicKey = $(cat tempubkey) AllowedIPs = 10.77.77.$newnum/32 EOF wg set wg0 peer $(cat tempubkey) allowed-ips 10.77.77.$newnum/32 echo -e "\033[37;41m添加完成,文件:/etc/wireguard/$newname.conf\033[0m" rm -f temprikey tempubkey } #开始菜单 start_menu(){ clear echo "=========================" echo " 介绍:适用于CentOS7" echo " 作者:A" echo "=========================" echo "1. 升级系统内核" echo "2. 安装wireguard" echo "3. 升级wireguard" echo "4. 卸载wireguard" echo "5. 显示客户端二维码" echo "6. 增加用户" echo "0. 退出脚本" echo read -p "请输入数字:" num case "$num" in 1) update_kernel ;; 2) wireguard_install ;; 3) wireguard_update ;; 4) wireguard_remove ;; 5) content=$(cat /etc/wireguard/client.conf) echo "${content}" | qrencode -o - -t UTF8 ;; 6) add_user ;; 0) exit 1 ;; *) clear echo "请输入正确数字" sleep 5s start_menu ;; esac } start_menu


click to changeSecurity Code