这里在 ubuntu20.04 上搭建,非常简单。小于该版本会遇到内核不支持或其他问题。

  • 购买服务器
  • 安装wireguard
  • 配置
  • 启动和停止
  • 使用

购买服务器

这里我使用的是 vultr 的 5$/month ,非常便宜。 点击该链接 https://www.vultr.com/?ref=8411854-6G 注册并购买。
image.png
购买完成并启动服务器完成后, ssh 登录。 linux/macos 用户直接打开终端 ,windows 用户使用 xshell 或者其他终端。 输入 ssh root@ip , ip 替换为刚购买的 ip 地址,输入密码。

安装 wireguard

apt update
apt install wireguard

配置

分别为服务器和客户端生成 wireguard 私匙和公匙。类似于 ssh 公私匙,公匙交给对方用于加密数据,私匙用于解密数据。

cd /etc/wireguard
wg genkey | tee s_privatekey | wg pubkey > s_pubkey
wg genkey | tee c_privatekey | wg pubkey > c_pubkey

创建文件 /etc/wireguard/wg0.conf

[Interface]
Address = 192.168.1.1/24
DNS = 8.8.8.8
ListenPort = 37750
PrivateKey = uDL86EflkdrwvRBEjWIKV6VW81VgoyVu1UMRjgR1I1w=
 
PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
 
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
 
[Peer]
PublicKey = OjGfQf0IdLhp3M1mej2+tmIbKYymfQ1bm1bZivBbux8=
AllowedIPs = 192.168.1.2/32
  1. address 网络不应与服务器上其他网络有冲突。
  2. PrivateKey 为上面生成的 s_privatekey 文件内容,用于接受客户端加密数据时解密使用。
  3. PostUp/PostDown 用于将 wg0 流量转发到主网卡 ens3 (我测试的机器上主网卡地址不是常用的 eth0,所以要根具实际情况修改)
  4. PublicKey 为上面生成的 c_pubkey 文件内容,用于向客户端发送数据时加密使用。

打开IP转发

echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confsysctl

创建文件 /etc/wireguard/client.conf

[Interface]
PrivateKey = GMayU0if9hRD8ApQkkYIqCBBWBcjuSkZD+p3irmTb3Q=
Address = 192.168.1.2/24
DNS = 8.8.8.8
BlockDNS = true
MTU = 1200
 
[Peer]
PublicKey = HoELeYIncFQ5Mled8BBCdEBRLrwZzS2h3eg0n6tsWEw=
Endpoint = 137.220.39.199:37750
AllowedIPs = 0.0.0.0/0, ::0/0
PersistentKeepalive = 25
  1. PrivateKey 为上边生成的 c_privatekey 文件内容,用于接收服务器数据时解密使用
  2. PublicKey 为上边生成的 s_publickey 文件内容,用于想服务器发送数据时加密使用
  3. Endpoint 为服务器公网 IP 和 wireguard 监听端口
  4. AllowsIps 接收所有网卡流量

启动和停止

服务器启动 wireguard

root@test:~# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.1.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a wg0 -m 0 -x
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
root@test:~#

启动可能发生错误:/usr/bin/wg-quick: line 32: resolvconf: command not found

image.png

解决:

sudo apt install openresolv
sudo apt install resolvconf

查看

root@test:~# ifconfig
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 137.220.39.199  netmask 255.255.254.0  broadcast 137.220.39.255
inet6 fe80::5400:2ff:fed3:e19a  prefixlen 64  scopeid 0x20<link>
ether 56:00:02:d3:e1:9a  txqueuelen 1000  (Ethernet)
RX packets 375035  bytes 268978934 (268.9 MB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 345499  bytes 258541920 (258.5 MB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
inet 127.0.0.1  netmask 255.0.0.0
inet6 ::1  prefixlen 128  scopeid 0x10<host>
loop  txqueuelen 1000  (Local Loopback)
RX packets 148  bytes 12586 (12.5 KB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 148  bytes 12586 (12.5 KB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
wg0: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1420
inet 192.168.1.1  netmask 255.255.255.0  destination 192.168.1.1
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
RX packets 0  bytes 0 (0.0 B)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 0  bytes 0 (0.0 B)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
root@test:~# wg show wg0
 interface: wg0
  public key: HoELeYIncFQ5Mled8BBCdEBRLrwZzS2h3eg0n6tsWEw=
 private key: (hidden)
  listening port: 37750
 
 peer: OjGfQf0IdLhp3M1mej2+tmIbKYymfQ1bm1bZivBbux8=
  allowed ips: 192.168.1.2/32

停止

root@test:~# wg-quick down wg0
[#] ip link delete dev wg0
[#] resolvconf -d wg0 -f
[#] iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
root@test:~#

使用

我使用 tunsafe 客户端使用 wireguard ,支持各主流设备, windows/macos/linux/android/ios. https://tunsafe.com/user-guide

Q.E.D.