Skip to content

Yue-bin/monap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

monap

autopeer by moncak

Warning

非严格意义上的autopeer,只是一个简单的peer工具箱

有人写完才知道autopeer是什么我不说是谁

自动生成配置文件,作用域窄小的autopeer

目前来说,仅能用于 DN11 中as与as间使用BGP和wireguard进行的peer

本脚本仅用于辅助,使用前请确保阅读DN11Wiki并以其为准

功能

  • 根据配置文件里的信息生成发送给别人的peerinfo

  • 根据输入的peerinfo自动生成和修改相关的配置文件并执行 wg-quick-op up <name>birdc configure

    • 并添加接口到指定的防火墙区域或者 dn11vpn区域
    • 以及对输入的peerinfo进行一些基本的检查
    • 目前支持JSON格式peerinfo输入输出
  • (部分)支持旧版使用 wg-quick-op.yaml配置文件的 wg-quick-op

    新版可以直接忽略了所以就直接抄了旧版的代码也懒得维护

  • 显示某个连接的相关信息

    其实就是打印 wg show <name>birdc show protocol <name>但是可以一起watch诶不香吗)

  • 显示所有已经被使用的端口

    貌似 wg-quick-op支持来着但是我忘记是什么了就)

  • 按照配置文件给定的 PortGenMethod和正在使用中的端口自动选择新使用的端口

    也可手动使用 -p--port指定

    当不存在正在使用的端口的时候必须手动指定

  • 提供还原备份功能

  • 安装与卸载,可以指定可选的 --prefix参数

  • TODO: 检查连接,自动化排障

安装

git clone https://github.com/Yue-bin/monap.git	#或者也可以从release里下载,但是release通常会落后一点
cd monap
./monap.lua install

然后自行修改/etc/monap/config.lua为你的配置和peer信息

用法

monap is a script for autopeer
Usage: monap [COMMAND] [NAME] [OPTIONS]
    Commands:
        info: genarate the peerinfo
        peer: peer with others
        restore: restore the config file save by monap
        test: test the connection
        show: show the status of the connection
        showport: show the port in use
        install: install the monap and config file
        uninstall: remove the monap and (optional) config file
    NAME:
        the name of the peer
    Options:
        -v, --version: output version information and exit
        -h, --help: output this help information and exit
        -q, --quiet: quiet mode
        -c, --config <config-file>: specify the config file
        -i, --info <info-str>: the info string genarated by info command
        --suffix <suffix>: specify the suffix of the backup file (default: bak)
        --prefix <prefix>: specify the prefix of the install path (default: /)
        --log-level <level>: specify the log level
            Loglevels: DEBUG INFO WARN ERROR FATAL
        -p, --port <port>: specify the port
        --fwmark <fwmark>: specify the fwmark (default: none)
        --mtu <mtu>: specify the mtu (default: 1388)
        --keepalive <keepalive>: specify the keepalive (default: none)
        --fw <firewall>: specify the firewall zone name (default: dn11/vpn)
        --no-fw: do not operate firewall
            will not affect the fwmark option
        --no-bird: do not operate bird and config file of bird
        --no-wg: do not operate wireguard and config file of wireguard
        --old-wg-quick-op: use the config file wg-quick-op.yaml
        --json: output peerinfo with json format

其中peerinfo的示例如下:

Peerinfos:
        ASN:4211110001
        IP:172.16.254.254
        Endpoint:example.com:12345
        PublicKey:01234567890123456789012345678901234567890123

但是事实上只需要包含以下的必须字段:

ASN:4211110001
IP:172.16.254.254
PublicKey:01234567890123456789012345678901234567890123

JSON格式的peerinfo示例如下:(我开启了pretty选项让他更美观一点,可以在config中关闭)

{
  "Endpoint": "monblog.top:12345",
  "PublicKey": "tG2bVfI1qo\/FpVZDP00FVjGjSc3BbPARFfORCw2klWM=",
  "ASN": "4211110712",
  "IP": "172.16.29.254"
}

DEMO:

╰─± git clone https://github.com/Yue-bin/monap
    ...

╰─± ./monap.lua install
[INFO] config file found: ./etc/monap/config.lua
[INFO] installing monap to /usr/bin/monap
[INFO] installing ./etc/monap/config.lua to /etc/monap/config.lua

╰─± monap uninstall
[INFO] config file found: /etc/monap/config.lua
[INFO] removing monap from /usr/bin/monap
Do you want to remove the config file? [y/N]: y
[INFO] removing config.lua from /etc/monap/config.lua

╰─± monap info -p 12345
[INFO] config file found: /etc/monap/config.lua
Peerinfos:
        ASN:4211110001
        IP:172.16.254.254
        Endpoint:example.com:12345
        PublicKey:01234567890123456789012345678901234567890123

╰─± monap peer moncak -p 12345 -i "Peerinfos:
        ASN:4211110001
        IP:172.16.254.254
        Endpoint:example.com:35018 
        PublicKey:0123456789123456789012345678901234567890123"
[INFO] config file found: /etc/monap/config.lua
[WARN] PublicKey length is not 44 , but 43
[INFO] peer with moncak with info
[INFO] ASN: 4211110001
[INFO] IP: 172.16.254.254
[INFO] Endpoint: example.com:35018
[INFO] PublicKey: 0123456789123456789012345678901234567890123
if the peer info is correct, press any key to continue, or press Ctrl+C to exit

[INFO] generating wireguard config file
[INFO] up the wireguard interface
[INFO] modifying bird config file
[INFO] reconfiguring bird

依赖

hundred の hundred percents in lua(x

代码主体完全基于Lua的官方库

相关操作需要有 bird2,birdc2,wg-quick-op支持

防火墙操作以及json的序列化和反序列化依赖于luci

OpenWrt环境在排除这几个功能之后可以正常使用

但是:

  • 后续准备更多地依赖luciluci给的真多吧
  • 不保证当前及以后版本能在其它环境下正常工作

OpenWrt自带lua5.1用于提供luci所以完美支持的说

杂项

非单用户系统使用记得妥善管理 <prefix>/etc/monap/config.lua的写权限,因为我没有做防鸿儒处理所以可以直接在 config.lua中注入lua语句

反正OP默认就一个root谁管他(x

感谢

本项目参考了以下项目:

luci-network-dn11