Skip to content

Latest commit

 

History

History
180 lines (127 loc) · 6.4 KB

1.用 Linode 主机搭建 WireGuard 网络.md

File metadata and controls

180 lines (127 loc) · 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 [email protected] 登录系统,也可以参考 “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 ,客户端可以没有。