软件简介

WireGuard是一个非常简单、快捷的VPN,它目前支持类Linux系统,不支持windows,安装非常简单,据说正在合并到Linux内核的代码里,代码量也很小。

详细的介绍可以看WireGuard官网

 实现目的

在我的Macbook Pro上实现无缝打通家里的网络,不管我是切换成什么网络,都和在家是一样的。

 实现步骤

 准备

  • Ubuntu Server 或 openwrt 路由器
  • Macbook Pro一台
  • 家里的局域网段配置:192.168.199.1/24
  • Ubuntu Server的IP和端口:192.168.199.8:5800
  • WireGuard虚拟网段:192.168.88.1/24
  • myhome.lukin.cn DDNS 指向到 192.168.199.8
  • 5800端口映射图
Title: 5800端口映射图
myhome.lukin.cn->路由器(192.168.199.1): DDNS 解析
路由器(192.168.199.1)->Ubuntu Server(192.168.199.8): 映射5800端口
Ubuntu Server(192.168.199.8)-->>myhome.lukin.cn: 对外暴露5800端口

 安装

[Peer Home],我家里的Server是Ubuntu

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard

Peer Home作为Server端,需要有外网IP,并且要能访问到5800端口

[Perr Mac],我的MacBook Pro安装使用的是Brew

brew install wireguard-tools

Perr Mac作为Client端,不需要有外网IP

其他系统参考:https://www.wireguard.com/install/

 配置

Peer Home 配置

# 生成私钥和公钥
wg genkey | tee privatekey | wg pubkey > publickey
# 创建文件夹
mkdir -p /etc/wireguard
touch /etc/wireguard/wg0.conf
# 编辑文件
vi /etc/wireguard/wg0.conf

把以下内容copy到wg0.conf

[Interface]
Address = 192.168.88.1/24
MTU = 1500
ListenPort = 5800
PrivateKey = [使用上面生成的私钥内容]
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp2s0 -j MASQUERADE

[Peer]
PublicKey = [Peer Mac的公钥内容]
AllowedIPs = 192.168.88.2/32
PersistentKeepalive = 25
  • Address:Server虚拟网卡的IP地址
  • MTU:一般不用改,1500没问题
  • ListenPort:5800是监听的端口
  • PrivateKey:使用上面生成的私钥
  • PostUp:脚本启动后执行的iptables规则,不用修改,直接拷贝即可,主要用来打通VPN的流量。
  • PostDown:停止的时候自动删除iptables规则。
  • PublicKey:Client端的公钥
  • AllowedIPs:可以写多个,用逗号隔开,默认写Client端的IP
  • PersistentKeepalive:用来保持连接检查的,每过25s会自动检查连通性,如果IP有变化,也是通过这个自动更新endpoint。
# 修改转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 编辑sysctl永久生效
vi /etc/sysctl.conf
# 增加下面这行
net.ipv4.ip_forward = 1
# 配置保存之后,可以启动一下试试了。
wg-quick up gw0
# 检查VPN是否正常
wg

执行结果显示如下:

QQ20180912-194631.png

Peer Mac 配置

# 生成私钥和公钥
wg genkey | tee privatekey | wg pubkey > publickey
# 创建文件夹
mkdir -p /etc/wireguard
touch /etc/wireguard/wg0.conf
# 编辑文件
vi /etc/wireguard/wg0.conf

把以下内容copy到wg0.conf

[Interface]
Address = 192.168.88.2/24
MTU = 1500
PrivateKey = [使用上面生成的私钥内容]

[Peer]
PublicKey = [Peer Home的公钥内容]
AllowedIPs = 192.168.88.1/32, 192.168.199.0/24, 192.168.85.0/24
Endpoint = myhome.lukin.cn:5800
PersistentKeepalive = 25

Endpoint:需要填写连接的IP地址,这里直接使用DDNS的域名。

# 配置保存之后,可以启动一下试试了。
wg-quick up gw0
# 检查VPN是否正常
wg 

执行结果显示如下:

QQ20180912-195435.png

 注意事项

  • 公钥和私钥一定要配置正确,否则不能正常通讯
  • AllowedIPs一定要配置正确,这个会自动更改本机的route配置,不要随意写0.0.0.0/0,如果在Server端写,会导致所有流量都走这个网卡,会有意想不到的事情发生,如果在Client端写,会所有流量都通过VPN。
  • Server端一定要写ListenPort并且在路由器上做端口映射,外网一定要能访问。
  • Client端就不需要写ListenPort了,这个让他自己生成一个就可以了。
  • PersistentKeepalive一定要配置,这个可以让他保持通讯,如果IP发生变化,也可以及时更新。