一、服务器的配置
1.解决腾讯云服务器CentOS系统,yum指令由于无法正常使用的问题:
https://blog.youkuaiyun.com/qq_31876443/article/details/125157730?spm=1001.2014.3001.5502
2.安装Wireguard
sudo yum install yum-utils epel-release
sudo yum-config-manager --setopt=centosplus.includepkgs=“kernel-plus, kernel-plus-*” --setopt=centosplus.enabled=1 --save
sudo sed -e ‘s/^DEFAULTKERNEL=kernel-core$/DEFAULTKERNEL=kernel-plus-core/’ -i /etc/sysconfig/kernel
sudo yum install kernel-plus wireguard-tools
sudo reboot
3.执行以下命令(不一定需要)
ip link add dev wg0 type wireguard
ip address add dev wg0 192.168.2.1 peer 192.168.2.2
ip link set up dev wg0
3.cd /etc/wireguard
4.生成密钥
wg genkey | tee sprivatekey | wg pubkey > spublickey
wg genkey | tee cprivatekey | wg pubkey > cpublickey
5.打开防火墙转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
echo “net.ipv4.ip_forward = 1” >> /etc/sysctl.conf
sysctl -p
6.编写服务器配置文件(摘自csdn:https://blog.youkuaiyun.com/x_mm_c/article/details/117999495)
echo "[Interface]
# 服务器的私匙,对应客户端配置中的公匙(自动读取上面刚刚生成的密匙内容)
PrivateKey = $(cat sprivatekey)
# 本机的内网IP地址,一般默认即可,除非和你服务器或客户端设备本地网段冲突
Address = 10.0.0.1/24
# 运行 WireGuard 时要执行的 iptables 防火墙规则,用于打开NAT转发之类的。
# 如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 停止 WireGuard 时要执行的 iptables 防火墙规则,用于关闭NAT转发之类的。
# 如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# 服务端监听端口,可以自行修改
ListenPort = 443
# 服务端请求域名解析 DNS
DNS = 8.8.8.8
# 保持默认
MTU = 1420
# [Peer] 代表客户端配置,每增加一段 [Peer] 就是增加一个客户端账号,具体我稍后会写多用户教程。
[Peer]
# 该客户端账号的公匙,对应客户端配置中的私匙(自动读取上面刚刚生成的密匙内容)
PublicKey = $(cat cpublickey)
# 该客户端账号的内网IP地址
AllowedIPs = 10.0.0.2/32"|sed '/^#/d;/^\s*$/d' > wg0.conf
7.编写客户端的配置文件
echo "[Interface]
# 客户端的私匙,对应服务器配置中的客户端公匙(自动读取上面刚刚生成的密匙内容)
PrivateKey = $(cat cprivatekey)
# 客户端的内网IP地址
Address = 10.0.0.2/24
# 解析域名用的DNS
DNS = 8.8.8.8
# 保持默认
MTU = 1420
[Peer]
# 服务器的公匙,对应服务器的私匙(自动读取上面刚刚生成的密匙内容)
PublicKey = $(cat spublickey)
# 服务器地址和端口,下面的 X.X.X.X 记得更换为你的服务器公网IP,端口请填写服务端配置时的监听端口
Endpoint = X.X.X.X:443
# 因为是客户端,所以这个设置为全部IP段即可
AllowedIPs = 0.0.0.0/0, ::0/0
# 保持连接,如果客户端或服务端是 NAT 网络(比如国内大多数家庭宽带没有公网IP,都是NAT),那么就需要添加这个参数定时链接服务端(单位:秒),如果你的服务器和你本地都不是 NAT 网络,那么建议不使用该参数(设置为0,或客户端配置文件中删除这行)
PersistentKeepalive = 25"|sed '/^#/d;/^\s*$/d' > client.conf
8.若有多个客户端需要连接(如电脑、手机同时连接到服务器),则根据以下步骤来:
8.1.
cd /etc/wireguard
8.2.再次生成密钥
wg genkey | tee cprivatekey1 | wg pubkey > cpublickey1
8.3.输出public key,然后复制它
cat cpublickey1
8.3.在目录下的wg0.conf文件末尾,添加以下内容:
[Peer]
PublicKey = <你刚才复制的public key>
AllowedIPs = 10.0.0.3/32(继续添加则:10.0.0.4, 10.0.0.5 …)
8.4.再次编写客户端文件
echo "[Interface]
# 客户端的私匙,对应服务器配置中的客户端公匙(自动读取上面刚刚生成的密匙内容)
PrivateKey = $(cat cprivatekey1)
# 客户端的内网IP地址(如果上面你添加的内网IP不是 .3 请自行修改)
Address = 10.0.0.3/24
# 解析域名用的DNS
DNS = 8.8.8.8
# 保持默认
MTU = 1420
[Peer]
# 服务器的公匙,对应服务器的私匙(自动读取上面刚刚生成的密匙内容)
PublicKey = $(cat spublickey)
# 服务器地址和端口,下面的 X.X.X.X 记得更换为你的服务器公网IP,端口请填写服务端配置时的监听端口
Endpoint = X.X.X.X:443
# 因为是客户端,所以这个设置为全部IP段即可
AllowedIPs = 0.0.0.0/0, ::0/0
# 保持连接,如果客户端或服务端是 NAT 网络(比如国内大多数家庭宽带没有公网IP,都是NAT),那么就需要添加这个参数定时链接服务端(单位:秒),如果你的服务器和你本地都不是 NAT 网络,那么建议不使用该参数(设置为0,或客户端配置文件中删除这行)
PersistentKeepalive = 25"|sed '/^#/d;/^\s*$/d' > client1.conf
9.重启一次Wireguard
wg-quick down wg0
wg-quick up wg0
10.查看当前Wireguard状态
wg
11.设置开机启动
systemctl enable wg-quick@wg0
至此配置完成,接下来要配置客户端,这里介绍Windows和IOS系统的配置方法。
二、Windows客户端配置
1.下载Wireguard windows版
https://download.wireguard.com/windows-client/
32位的不成功就试下安装64位的。
用服务器的浏览器去访问这个网址,然后用mobaxterm的SSH Browser把.msi安装文件下载到电脑上。
2.把(一)中配置好的客户端配置文件(client.conf)下载到电脑上。
3.安装Wireguard后,点击左下角的新建隧道,然后点击从文件导入隧道,选择client.conf。
4.然后点击连接就可以用了。
三、IOS客户端配置
1.需要一个US AppStore账户。在AppStore里登陆上去。
2.搜索Wireguard,安装。
3.在服务器端,输入以下命令:
yum install qrencode
cd /etc/wireguard/
qrencode -t ansiutf8 < client.conf
4.可以看到命令行会输出一个QR码,用wireguard app扫一下,然后连接就行了。
四、用一台linux连接到该服务器
在这台linux机器上(Ubuntu):
- sudo apt install wireguard
- sudo apt install resolvconf
- 复制上面的client.conf到/etc/wireguard下
- ss -n sport 22
- ip route get <SSH连接到这台linux机器的ip> sport 22
- sudo ip route add <SSH连接到这台linux机器的ip> via <local address 列的IP> dev eth0
- sudo systemctrl start wg-quick@client1.service
4~6参考:https://superuser.com/questions/1746580/how-can-i-exclude-ssh-connections-from-being-routed-by-wireguard