Ubuntu

安装

sudo apt update
sudo apt upgrade
sudo apt install wireguard

配置

  • 进入/etc/wireguard,并生成密钥对

    sudo -i
    cd /etc/wireguard
    umask 077
    wg genkey | tee privatekey | wg pubkey > publickey
    
  • 编辑配置文件wg0.conf

    [Interface]
    PrivateKey = [LINUX_PRIVATE_KEY]
    Address = 192.168.100.1/24
    ListenPort = 51820
    
    [Peer]
    PublicKey = [WINDOWS_PUBLIC_KEY]
    Endpoint = [WINDOWS_IP]:51820
    AllowedIPs = 192.168.100.2/32
    
  • 启动Wireguard

    sudo wg-quick up wg0
    

OpenWrt

安装

所需插件详见:使用树莓派4B+安装OpenWrt用作旁路由 | Kunyang’s Blog

配置

  • Network → Interface → Add new interface,创建一个wireguard,名字就叫wg0

    创建Interface

  • 点击Generate new key pair,会自动生成一个公钥一个私钥,IP地址可以随便写一个私有地址的网段,我填写192.168.100.1/24,这就是这个VPN的子网,然后设置默认端口,可以随便写,这里我设置55555

    配置Wireguard

  • 防火墙可以选择vpn

    防火墙

  • 在Network → Firewall → Custom Rules添加一条自定义命令

    iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE
    

    这条命令的意思是针对子网192.168.100.0/24内的数据包,当数据从eth0也就是外接端口转发出去的时候,将数据包的源地址伪装成路由器的公网IP

  • 如果OpenWrt是主路由,则需要在Firewall → Traffic Rules中开放端口

    开放Wireguard端口

  • 如果OpenWrt是旁路由,则需要在主路由上做端口转发

    端口转发

  • 在Network → Interface → wg0点击Edit,然后转到Peers,点击Add peer

    • 添加Description,比如我的Windows台式机
    • 我们可以点击创建新的密钥对
    • 建议创建Preshared Key
    • Allow IPs就是这个节点在这个VPN网络的IP地址
    • Keep Alive可以设置为25

    Peer设置

  • 可以重启一下路由器

Windows或Mac Os

安装

这里下载Wireguard App

配置

在OpenWrt → Network → Interface → wg0 → Edit Peer中可以很方便地为每个终端导出配置文件,复制粘贴在Windows客户端的wireguard中就可以了

外网连接VPN

前提条件

  • 需要一个域名

  • 需要公网IP

  • 一些包比如ddns-scripts-cloudflare和luci-app-ddns

配置步骤

  • 首先需要Cloudflare创建一条A记录,域名是vpn.kyxie.me,IP地址可以随便填,反正将来还会被DDNS覆盖,Proxy status选择关闭,只进行DNS不进行代理

    创建A记录

  • 这里点击Create Token,创建一个专用的API token

  • 选择Edit Zone DNS,点击Use Template

  • 按照下图配置

    API Token

  • 生成API Token后注意保存好,只会显示一次

  • 然后回到OpenWrt → Service → Dynamic DNS → Services,添加一个ddns_ipv4,下面是详细配置,注意必须要安装了ddns-scripts-cloudflare之后才能在DDNS Service provider找到cloudflare.com-v4

    ddns:
      "Enabled": true
      "Lookup Hostname": "vpn.kyxie.me"
      "IP address version": "IPV4-Address"
      "DDNS Service provider": "cloudflare.com-v4"
      "Domain": "[email protected]"
      "Username": "Bearer"
      "Password": "Your API Token"
      "Use HTTP Secure": true
      "Path to CA-Certificate": "/etc/ssl/certs"
    
  • 如果OpenWrt为主路由,这样应该可以完成DDNS解析了,但是如果OpenWrt为旁路由,由于路由器的wan口并不知道公网IP,需要使用借助网站来得知自己的公网IP,我们在Service → Dynamic DNS → Services → ddns_ipv4 → Edit → Advanced Settings → IP address source选择URL,URL to detect可以选择默认ipv4的urlhttp://checkip/dymdms.com

    URL Detect

  • 这样DDNS的配置就完成了,以后如果运营商给你换了公网IP也不会影响域名的配对了

  • 配置完后可以去Cloudflare看看ip地址有没有刷新

  • 现在有了DDNS,我们就可以把Peer的EndPoint改成自己的域名了

  • 将OpenWrt生成的Configuration填入其他设备,就可以接入VPN了

Trouble Shoot

  • 我发现当Windows连入VPN后无法访问之前192.168.2.x的子网了,并不是连接不上而是被block,但是MacBook没有这个问题,192.168.2.x192.168.100.x都是能访问的,这有可能是Windows没有自动添加路由表。使用管理员权限打开CMD,然后输入下面命令就能解决问题了

    route add 192.168.2.0 MASK 255.255.255.0 192.168.100.1 METRIC 1