本文介绍把一台 Linode 主机与一台墙内 Ubuntu 电脑组成 WireGuard 网络,并使墙内 Ubuntu 电脑获得科学上网能力的步骤。
- 在 Linode.com 注册账户,通过支付宝至少存入 5 美元。
- 创建一款主机,比如最便宜的 Nanode 1GB ,选速度较快的 Tokyo 3,JP 日本东京机房。
- 点击主机名称 ( 类似 linode11107900 ),点 Rebuild 重建,有多种操作系统可供选择,本例选 Ubuntu 16.04,输入密码,执行 。
- 点击新建的
My Ubuntu 16.04 LTS Profile (Latest 64 bit (4.18.8-x86_64-linode117))
把 Boot Settings 的 Kernel 部分更换为 GRUB2,点保存改变,重新 Boot 启动。 - 然后就可以在本地终端用
ssh [email protected]
登录系统,也可以参考 “4.与配置 WireGuard 有关的 Ubuntu 命令” - “登录服务器相关命令” 的建议做一些自定义,方便快速登录服务器。
-
更新系统:
$ sudo apt update $ sudo apt upgrade
-
更新内核:
sudo apt install linux-image-virtual grub2
-
从 Linode Manager 重新启动系统 。
-
安装内核头文件:
sudo apt install linux-headers-$(uname -r)
-
安装 wireguard :
$ sudo add-apt-repository ppa:wireguard/wireguard $ sudo apt-get update $ sudo apt-get install wireguard
安装完成后,正确的显示应该如下所示,如果不同,可能是有错误。
Setting up wireguard-dkms (0.0.20181018-wg1~xenial) ... Loading new wireguard-0.0.20181018 DKMS files... First Installation: checking all kernels... Building only for 4.4.0-137-generic Building initial module for 4.4.0-137-generic Done. wireguard: Running module version sanity check. - Original module - No original module exists within this kernel - Installation - Installing to /lib/modules/4.4.0-137-generic/updates/dkms/ depmod..... DKMS: install completed. Setting up wireguard-tools (0.0.20181018-wg1~xenial) ... Setting up wireguard (0.0.20181018-wg1~xenial) ... Processing triggers for libc-bin (2.23-0ubuntu10) ...
如果安装完成但未显示此输出,则很可能未正确配置内核。
执行以下 wg 命令,在 /etc/wireguard
目录建立私钥( private.key )与公钥( public.key )文件。
sudo mkdir -p /etc/wireguard && sudo chmod 0777 /etc/wireguard && cd /etc/wireguard
umask 077
wg genkey | tee private.key | wg pubkey > public.key
私钥与公钥都是一个文本文件,里面为私钥与公钥的字符串。
在服务器及本地机配置虚拟网卡,需要以下基本参数:
- 服务器:IP地址 、内网 IP 地址、端口号、公钥、私钥;
- 本地机:内网 IP 地址、公钥、私钥;
为方便查看可以保存为如下表格:
Linode 服务器, | 本地机 | |
---|---|---|
外网 IP | 139.162.88.79 | |
内网 IP | 10.0.0.1/24 | 10.0.0.2/24 |
监听端口 | udp/39814 | |
私钥 private.key | +HZEeqo7Dfk9bvCgZrGnjRQKbIik0= | 6CuBEE0YwUBM+r3oh9gmnIklw= |
公钥 public.key | ilK5xKUT55Xv2gniM9E9+W1e8Cgk= | VfzghpgsFTqyMUATdrhXblnWFY= |
可以通过命令行或配置文件的方式配置网卡,下面以配置文件的方式为例。
服务器端 /etc/wireguard/wg0.conf
文件内容如下:
[Interface]
Address = 10.0.0.1
ListenPort = 39814
PrivateKey = cPcii+qffn7jTNvKN4cA5nNoLvwxzoCaLNyPnDnY8Hk=
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
DNS = 8.8.8.8
[peer]
PublicKey = odnA2mMWrxRuKydr61bOL3xyGcKiD0KY7O33X8Rm4Hg=
AllowedIPs = 10.0.0.2/24
客户端 /etc/wireguard/wg0.conf
文件内容如下:
[Interface]
PrivateKey = +JzG3eOIR0gNPzU3IDIDSR0sYgHKGH3Otr4ronpAVHw=
Address = 10.0.0.2
ListenPort = 39815
DNS = 8.8.8.8
[Peer]
PublicKey = FCXYovwMFf2oMHrQjbhTYk1TU/Wi1ElwzPJfzXtC9HQ=
Endpoint = 139.162.88.79:39814
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
配置完成后,在各自机器执行 wg-quick up wg0
就可以启动虚拟网卡。
完成以上步骤后,两台机器组成的虚拟局域网就建立起来了,互相之间应该能用内网地址 Ping 通,比如在客户端终端执行 ping 10.0.0.1
会显示如下,表示虚拟专用网已经连接。
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=197 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=191 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=185 ms
在服务器端的命令行执行如下命令就可以启动 IP 转发:
sysctl net.ipv4.ip_forward=1
启动 IP 转发后,本地如果没有意外,在服务器启动 IP 转发后,就可以 Ping 通 Google.com ,同时客户端浏览器也能够访问 Google.com 。同时在本地机的客户端执行 curl zx2c4.com/ip
会显示:
139.162.88.79
li1568-79.members.linode.com
curl/7.47.0
表示在服务器开启 IP 转发后,本地机已经借道服务器实现了科学上网。
- 如果本地电脑使用 UEFI 启动 Ubuntu ,有可能造成 WireGuard 无法正常安装,这种情况下,需关闭 UEFI 启动。
- 如果内网地址互相都能 Ping 通,但无法 Ping 通 Google.com ,一般是 DNS 方面的问题。
- WireGuard 需要使用远程电脑的一个 udp 端口,在服务器中,udp 端口一般没有被禁用,直接就可以使用,这一点与 tcp 的端口不同,大多数服务器都禁用了各种 tcp 端口。
- 服务器必须有公网 IP ,客户端可以没有。