#wireguard #mesh #networking #configuration #automatic #peer #clients

bin+lib wiresmith

自动配置 WireGuard 客户端进入网状网络

9 个不稳定版本 (3 个破坏性版本)

0.4.2 2024 年 7 月 5 日
0.4.1 2024 年 7 月 3 日
0.3.0 2024 年 4 月 12 日
0.2.1 2023 年 4 月 17 日
0.1.2 2023 年 4 月 3 日

#184 in 网络编程

Download history 51/week @ 2024-04-26 217/week @ 2024-06-28 137/week @ 2024-07-05 15/week @ 2024-07-12

每月 493 次下载

MITAGPL-3.0-only

52KB
924

wiresmith - 自动配置 WireGuard 客户端进入网状网络

CI Crates.io license Lines of Code

wiresmith 通过使用共享的后端自动发现其他对等点并将它们添加到本地网络配置中,同时发布本地节点以便其他人可以与之通信。简而言之,它将使用 WireGuard 创建一个自我维护的网状网络。

您可以选择让它自己确定地址,或者自己提供静态地址。如果需要,它还可以清理无效的对等点。

功能

  • 简单使用
  • 自动地址分配
  • 网状连接
  • IPv4/IPv6
  • 值存储后端:Consul
  • 网络配置后端:systemd-networkd
  • 清理无效对等点
  • 美观的日志!

如何使用

您至少需要提供要使用的内部网络和本地节点的端点。端点可以是接口或特定的本地接口地址。例如,最简单的调用之一将是

wiresmith --network 192.168.0.0/24 --endpoint-interface eth0

这将

  1. 连接到本地 Consul 代理
  2. systemd-networkd 生成或加载本地 WireGuard 配置
  3. 使用 192.168.0.0/24 WireGuard 网络内的地址进行内部寻址
  4. eth0 选择一个可用的全局地址,并使用它与其他对等点通信

端点接口需要可以从所有其他对等点访问。

如果您使用 Consul 联邦,我们将使用相同的 --consul-prefix 值从所有可用的数据中心检索对等点。

使用方法

Auto-config WireGuard clients into a mesh

Usage: wiresmith [OPTIONS] --network <NETWORK>

Options:
      --consul-address <CONSUL_ADDRESS>
          Consul backend socket address

          [default: http://127.0.0.1:8500]

      --consul-token <CONSUL_TOKEN>
          Consul secret token

      --consul-ttl <CONSUL_TTL>
          Consul TTL times out after this duration without being renewed

          [default: 1min]

      --consul-prefix <CONSUL_PREFIX>
          Consul KV prefix

          [default: wiresmith]

  -u, --update-period <UPDATE_PERIOD>
          Update period - how often to check for peer updates

          [default: 10s]

  -i, --wg-interface <WG_INTERFACE>
          WireGuard interface name

          [default: wg0]

  -p, --wg-port <WG_PORT>
          WireGuard UDP listen port

          [default: 51820]

  -k, --keepalive <KEEPALIVE>
          Set persistent keepalive option for wireguard

          Set to 0 in order to disable.

          [default: 25s]

      --endpoint-interface <ENDPOINT_INTERFACE>
          Public endpoint interface name

          You need to provide either this or --endpoint-address.

      --endpoint-address <ENDPOINT_ADDRESS>
          Public endpoint address

          Can be a hostname or IP address. You need to provide either this or --endpoint-interface.

      --network-backend <NETWORK_BACKEND>
          Network configuration backend

          [default: networkd]
          [possible values: networkd]

      --networkd-dir <NETWORKD_DIR>
          Directory in which to place the generated networkd configuration

          [default: /etc/systemd/network/]

  -a, --address <ADDRESS>
          Address to allocate

          If not provided, will allocate available address from the subnet. For instance 10.0.0.4 or fc00::4

  -n, --network <NETWORK>
          Network to use

          Must be the same for all clients. For instance 10.0.0.0/24 or fc00::/64

  -v, --verbose...
          Be verbose

          Provide twice for very verbose.

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

如何安装

发布 页面上提供了支持平台的预编译二进制文件。

如果您在 Arch Linux 上,可以直接

pacman -S wiresmith

或者,您可以使用提供的OCI镜像,通过Podman或Docker使用。

podman run --rm --name wiresmith --cap-add SYS_ADMIN,NET_ADMIN --network host ghcr.io/svenstaro/wiresmith
docker run --rm --name wiresmith --privileged --network host ghcr.io/svenstaro/wiresmith

您还可以使用提供的systemd服务。

类似项目

如果wiresmith无法满足您的需求,也许以下这些项目可以

您也可能在这些列表中找到一些工具

开发

此项目使用Podman在无根模式下进行快速本地测试。在开始开发会话之前,运行

just prepare-test

确保您拥有必要的镜像。

请确保您已本地安装justzellij,然后运行just test进行自动测试或just interactive进行交互式测试。交互式会话将在容器中启动两个systemds,然后在其中每个容器中运行一个wiresmith实例,以便您可以观察它们并了解它们如何交互。

发布

这主要是我关于如何发布这个项目的笔记

  • 确保CHANGELOG.md是最新的。
  • cargorelease<version>
  • cargorelease --execute <version>
  • OCI镜像和二进制文件将自动由Github Actions部署。
  • 更新Arch包。

依赖项

~18–32MB
~531K SLoC