Skip to content
This repository has been archived by the owner on Jul 12, 2023. It is now read-only.

GongT/wireguard-config-distribute

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Wireguard VPN配置文件分发工具

Auto Build

原理

Wireguard是一个P2P VPN,与传统VPN最大的区别就是任意两个节点都是直接通信的,不需要服务器。
不过目前Wireguard配置还是比较麻烦的,如果节点多了,每个节点都要写其他所有节点的信息,特别难修改。
所以就做了这么个玩意。

不过这个问题估计很快wireguard官方就会解决,所以这里还做了一些官方不可能提供的功能。

这是一个服务器+客户端模式的自动配置工具,附带一些其他功能。其中必须有一个公网可访问的“配置服务器”。
公网仅能通过IPv6地址访问的情况也可以,而且IP不需要固定。
这个服务器不需要加入wireguard网络,而是只提供配置功能(也可以选择加入)。

主要功能有:

  • 支持linux、mac、openwrt、windows(win仅有客户端)
    • 示例systemd(linux)和procd(openwrt)脚本
    • windows服务方式启动的示例 TODO: 需要一个自动化脚本
    • 自动更新的示例
  • 配置Wireguard节点:
    • 服务器提供wireguard网络的基本信息,比如MTU、ip范围、掩码之类的
    • 每个节点提供自己的信息
  • 通过NAT-PMP映射入站端口
  • 简单的流量混淆 // TODO: 实现有误,不应该查表
  • 识别相同内网的其他节点,直连ip并禁用混淆
  • 一个服务器配置多个无关的VPN网络
  • 自动修改hosts文件实现节点之间的名称解析
  • TODO:UDP打洞
  • TODO:高级混淆
  • TODO:支持移动设备(或ip偶尔会变的情况)
  • TODO:自动配置路由转发(使某个节点成为传统VPN中的服务器,进而让两个内网节点可以通信)
  • TODO:多用户

用法

安装

首先需要手动安装wireguard:https://www.wireguard.com/install/

github release中下载,只提供最新master版本。

各种脚本

scripts

运行

完整参数列表:

  • Windows: wireguard-config-client.exe /help
  • Others: wireguard-config-client --help

所有参数都可以通过环境变量传入,推荐这么做,详见help内容。
程序运行需要管理员权限(或linux的CAP_NET_ADMIN),Windows上如果发现没有会自动提权。

服务端

服务器程序只支持linux(包括wrt)直接启动即可。
普通linux推荐直接使用./scripts/services/server.service文件解决(但是必须手动修改里面的Environment=们传入正确的参数)

服务器有2种工作模式:

  1. 明文模式:--insecure参数,用于有nginx之类的工具处理SSL的情况,当监听unix socket时只能用这个模式
  2. 独立服务器模式:可以自签名(默认),或载入现有SSL证书

如果使用提供的service文件,则服务器会在/var/lib/wireguard-config-server文件夹中存放数据。其他方法调用时一般会存放在~/.wireguard-config-server

  • vpns.json: 可以定义多个VPN网络,设置各个网络的基本信息(比如MTU)
  • password.txt:客户端连接时必须使用的口令

客户端

wireguard-config-client --server=x.x.x.x:1234 --其他参数

客户端(Windows)

Windows既可以用/参数 值也可以用--参数=值

开发

准备

  1. 需要比较新的golang、powershell
  2. 在项目的某个目录运行:
    go get -u github.com/GongT/go-generate-struct-interface/cmd/go-generate-struct-interface
  3. 运行:
    ./scripts/run.ps1 [client|server|tool] (...arguments)