Permalink
Switch branches/tags
Nothing to show
Find file Copy path
f3b0a4c Oct 30, 2018
1 contributor

Users who have contributed to this file

180 lines (127 sloc) 6.4 KB

1.用 Linode 主机搭建 WireGuard 网络

本文介绍把一台 Linode 主机与一台墙内 Ubuntu 电脑组成 WireGuard 网络,并使墙内 Ubuntu 电脑获得科学上网能力的步骤。

1.Linode 主机预处理

1.1 购买

  1. 在 Linode.com 注册账户,通过支付宝至少存入 5 美元。
  2. 创建一款主机,比如最便宜的 Nanode 1GB ,选速度较快的 Tokyo 3,JP 日本东京机房。

1.2 安装 Ubuntu

  1. 点击主机名称 ( 类似 linode11107900 ),点 Rebuild 重建,有多种操作系统可供选择,本例选 Ubuntu 16.04,输入密码,执行 。
  2. 点击新建的 My Ubuntu 16.04 LTS Profile (Latest 64 bit (4.18.8-x86_64-linode117)) 把 Boot Settings 的 Kernel 部分更换为 GRUB2,点保存改变,重新 Boot 启动。
  3. 然后就可以在本地终端用 ssh root@xxx.xxx.xxx.xxx 登录系统,也可以参考 “4.与配置 WireGuard 有关的 Ubuntu 命令” - “登录服务器相关命令” 的建议做一些自定义,方便快速登录服务器。

1.3 安装 Ubuntu 内核

  1. 更新系统:

    $ sudo apt update
    $ sudo apt upgrade  
    
  2. 更新内核:

    sudo apt install linux-image-virtual grub2
    
  3. 从 Linode Manager 重新启动系统 。

  4. 安装内核头文件:

    sudo apt install linux-headers-$(uname -r)
    

2. 安装 WireGuard

  1. 安装 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) ...
    

如果安装完成但未显示此输出,则很可能未正确配置内核。

3. 准备参数

3.1 生成公钥私钥

执行以下 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

私钥与公钥都是一个文本文件,里面为私钥与公钥的字符串。

3.2 准备配置基本参数

在服务器及本地机配置虚拟网卡,需要以下基本参数:

  • 服务器: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=

4. 编写 wg0.conf 配置文件

可以通过命令行或配置文件的方式配置网卡,下面以配置文件的方式为例。

服务器端 /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

5. 在服务器启动 ip 转发

在服务器端的命令行执行如下命令就可以启动 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 转发后,本地机已经借道服务器实现了科学上网。

6. 安装相关

  1. 如果本地电脑使用 UEFI 启动 Ubuntu ,有可能造成 WireGuard 无法正常安装,这种情况下,需关闭 UEFI 启动。
  2. 如果内网地址互相都能 Ping 通,但无法 Ping 通 Google.com ,一般是 DNS 方面的问题。
  3. WireGuard 需要使用远程电脑的一个 udp 端口,在服务器中,udp 端口一般没有被禁用,直接就可以使用,这一点与 tcp 的端口不同,大多数服务器都禁用了各种 tcp 端口。
  4. 服务器必须有公网 IP ,客户端可以没有。