于一键脚本
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