私有云如何搭建-在私有云虚拟主机上部署Wireguard VPN的详细指南
设置Wireguard客户端
虽然成为Wireguard客户端,但你要记住的是,在Wireguard技术中,其实每一个设备都是对等。这样的理解有助你成功配置。
现在,让我们来开始配置你这端设备上Wireguard。因为每一个Wireguard设备都是对等,所以你这端设备上的配置与在远程虚拟机(VPS)上配置是一样的。同样需要:
- 在设备上安装Wireguard;
- 启动Wireguard;
- 生成该设备的公用/私有钥匙对;
- 创建Wireguard适配器配置文件;
如果你在你的设备上成功完成上面的配置,你可以确信两个Wireguard设备之间的加密通讯可以建立,也就是说,你的设备可以通过另一端的Wireguard设备的对外网络适配器访问互联网,实现翻墙(或科学上网)的目的。
因为你这端的设备一般来说是Windows, MacOS,或Android的设备比较多,所以这里我们使用Android设备来作为例子。现在,让我们开始:
安装Wireguard
在你的安卓设备上,去谷歌的play商店搜索并下载Wireguard。或是使用这个地址:https://play.google.com/store/apps/details?id=com.wireguard.android&hl=en。如果你在中国大陆,无法访问谷歌的Play商店。我为你准备了一个wireguard.apk文件,你可以直接下载安装。不过,你必须清楚,你不了解我,也无法确认下载的程序有没有被动过手脚。
下载之后,像通常的安卓apk程序一样安装即可。此工作完成之后,在你的安卓设备上找到新安装的Wireguard图标,点击即开始运行它了。
配置Wirguard(客户端)
跟在虚拟机(VPS)一样,你需要为设备生成钥匙对用于Wireguard设备之间的加密通讯。
1、生成公用/私有钥匙钥匙对
其实,你可以在任何地方,使用任何工具生成需要的钥匙对。为方便起见,我们在虚拟机(VPS)上使用Wireguard模块自带的genkey工具来生成。记住,这次生成的钥匙对是你的安卓设备使用的。我们可以使用使用文件名android_private.key和android_public.key来存放钥匙对。回到虚拟机(VPS)的/etc/wireguard/处,执行下面的命令:
wg genkey | tee android_private.key | wg pubkey>android_public.key
2、创建Wireguard(客户端)的网络适配器配置文件
同样,我们使用nano文本编辑器来创建一个安卓设备的Wireguard使用的配置文件,此配置文件我们可以命令为Android_WG.conf
nano android_wg.cong
然后在其中输入下面的配置信息,不过,在客户端部分,我们不需要提供路由配置。但我们需要配置DNS信息。
[Interface]
PrivateKey = android_private.key
Address = 192.168.60.2/24
DNS = 1.1.1.1,1.0.0.1
[Peer]
PublicKey = server_public.key
PresharedKey = rhzpw5Z513RT0Fq9ITVEFDwj595KU0rGaAYBNjcfHxg=
Endpoint = 虚拟机的公用IP:54321
AllowedIPs = 0.0.0.0/0,::/0
你看到,在安卓设备上的Wireguard配置文件中,我们在下面添加了[Peer]部分,在这部分我们配置通讯的另一端的信息,即Wireguard服务器的信息。它包括虚拟机(VPS)的公用钥匙,通讯开始时确认对方使用的口令,以及公用IP地址和端口号。
Presharedkey是两个Wireguard通讯之前需要双方确认的口令,口令配置之后,通讯才会开始。部署presharedkey可以让通讯更加安全。使用下面的命令在虚拟机上生成一个就是,不过你需要将之拷贝下来,因为在Wireguard服务器的配置文件中,以及Wireguard客户端配置文件中都需要使用它(如上面)
wg genpsk
使用我在前面讲过的方法将配置文件中的android_private.key,server_public.key更换为实际的钥匙数据。这样,安卓设备端Wirdguard的配置文件工作就完成了。
这个文件是在虚拟机上,因为你是使用SSH连接到虚拟机的,要将此文件拷贝到你的安卓设备很困难。一个比较方便的方法是使用扫码。
3、在虚拟机(VPS)上安装二维码生成程序
使用下面的代码命令安装:
apt install qrencode curl
安装好之后,使用下面的代码生成安卓手机客户端配置文件的二维码:
qrencode -t ansiutf8 < android_wg.cong
这时,在你使用SSH连接到Lightsail虚拟机的命令行中,就会出现二维码图形,将之截屏,保存在你的本地。以便以后使用,特别是在你重新安装Wireguard的手机应用程序之后。(下图只是示例)
看到二维码后,打开安卓手机Wireguard应用程序,点选右下方的+号,然后在出现的界面中选择SCAN FROM QR CODE。接着使用你的手机去扫描二维码即可。
如果扫码成功,应用程序会让你给VPN隧道取一个名字(tunnel name),随便提供一个名字,如Lightsail。然后点击Create tunnel-创建隧道。这样,你的安卓手机就可以去连接你新建的Wireguard VPN服务器了。
完成虚拟机(VPS)上Wiregurad配置文件
现在,你有了安卓设备的有关信息:
- 钥匙对
- Presharedkey
接下来要做的事情就是去完成在配置虚拟机(VPS)上的Wireguard适配器时未完成的工作:提供通讯的另一端的配置信息,即[Peer]部分的配置信息。在这部分,提供安卓设备的有关数据:
[Interface]
Address = 192.168.60.1/24 #这是虚拟机与你的远端设备通讯时使用内部IP地址
PrivateKey = server_private.key
ListenPort = 54321 #这是你确定使用的UDP端口号
PostUp = iptables -I INPUT -p udp --dport 54321 -j ACCEPT
PostUp = iptables -I FORWARD -i ens3 -o wg0 -j ACCEPT
PostUp = iptables -I FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D INPUT -p udp --dport 54321 -j ACCEPT
PostDown = iptables -D FORWARD -i ens3 -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
### Android Client
[Peer]
PublicKey = android_public.key
PresharedKey = rhzpw5Z513RT0Fq9ITVEFDwj595KU0rGaAYBNjcfHxg=
AllowedIPs = 192.168.60.2/24
到此,所有需要的工作都做完了。是时候测试你安装Wireguard VPN是否如预期那样工作了。
因为你已经更新虚拟机(VPS)上Wireguard配置文件的信息,所以你需要重新Wireguard服务使更新生效。使用下面的命令重启:
sudo systemctl restart [email protected]
在你的安卓设备这边,打开开关,你就连接上你的Wireguard VPN服务器了(开始与虚拟机上的Wireguard通讯了)。这时,在手机最上方会出现一个钥匙的图标。如图:
在你的安卓设备上打开浏览器(如brave),去访问youtube,当你看到youtube的界面,你可以确定已成功安装和部署好了你自己的Wireguard VPN服务!
总结
你可以将公有钥匙看成是锁,而私有钥匙是开锁的钥匙。在每一个设备的Wireguard配置文件中,总是使用自己私有钥匙,而在对方设备[Peer]部分,总是使用对方提供的锁(公有钥匙)。确保两个设备的配置文件中的Presharedkey是一样的;两端的配置文件中都描述了相同的通讯端口,如54321。
如果你理解了Wireguard设备之间的通讯方式,以及为什么要那样去配置,并严格按照本文的描述的步骤去做。你可以确保你的Wireguard VPN可以成功。