wireguard-conf 2.0.0

Generate Wireguard configs and interfaces with code
Documentation

wireguard-conf

GitHub Actions Workflow Status docs.rs Crates.io Version Crates.io Total Downloads Crates.io MSRV Quickstart Tutorial

Easy to use library for creating wireguard configs.

Installation & Usage

Install wireguard-conf

cargo add wireguard-conf

Usage

The best way to understand library: Quickstart!

More usage examples you can find in tests/tutorial.rs, tests folder and documentation examples on docs.rs.

use wireguard_conf::prelude::*;
use wireguard_conf::as_ipnet;

let peer = Peer::builder()
    .allowed_ips([as_ipnet!("10.0.0.2/24")])
    .build();

let interface = Interface::builder()
    .address([as_ipnet!("10.0.0.1/24")])
    .peers([peer.clone()])
    .build();

// to export configs, use `println!()`, `writeln!()`, `.to_string()`, etc.

println!("Server's config:");
println!("{}\n", interface);

println!("Client's config:");
println!("{}", peer.to_interface(&interface, ToInterfaceOptions::new()).unwrap());

Features

  • amneziawg: adds support for generating and manually building amnezia settings via AmneziaWG enum.

    AmneziaWG is a fork of wireguard, that less recognizable by DPI systems by randomizing packet headers with packet sizes.

  • serde: adds implementions of serde::Serialize and serde::Deserialize for all structs.

Misc