wired
wired copied to clipboard
WireGuard configuration generator written in Rust
Wired
This software will read a .toml
file and can currently generate WireGuard configurations for a Server-Client network:
- Clients can talk to all servers
- Servers can talk to all clients
- Clients can not talk to each other
- Servers can not talk to each other
The software is aware of previously generated configurations and will reuse old keys and IP's by default.
How to use
WireGuard network config generator
Usage: wired [OPTIONS] --config-file <CONFIG_FILE>
Options:
-c, --config-file <CONFIG_FILE> Config file to parse
-r, --rotate-keys Rotate all private keys
-i, --rotate-ips Assign new IPs to clients
-h, --help Print help
-V, --version Print version
All configs will be inside an output directory called the same as the config file, but without .toml
.
In order to keep the Keys and IPs the same over consecutive executions make sure that the CONFIG_FILE.toml
and output directory stay together.
Config file
[global]
cidr = "10.0.0.0/24"
[servers]
[servers.gateway]
endpoint = "mydomain.tld"
ip = "10.0.0.1"
port = 22222
persistent_keepalive = 25
[clients]
[clients.laptop]
dns = "10.0.0.1"
[clients.phone]
dns = "10.0.0.1"
[global]
What | Type | Description | Required |
---|---|---|---|
network | CIDR | Network to assign IP addresses from | required |
[servers.NAME]
What | Type | Description | Required |
---|---|---|---|
ip | 1-255 | IPv4 of the server inside the network | required |
port | 0-65536 | Port on which WireGuard is listening | required |
endpoint | IPv4 or IPv6 or Hostname | Address where this server is reachable | required |
persistent_keepalive | int | Peers will send a keep-alive packet every X seconds | optional |
dns | IPv4 or IPv6 | set custom DNS server | optional |
[clients.NAME]
What | Type | Description | Required |
---|---|---|---|
dns | IP | set custom DNS server | optional |
Why TOML?
Because cargo.toml
and TOML is designed to map unambiguously to a hash table
IP Assignment
Done fully automatically for all clients. Must be set for servers, which can in turn be used to create DNS records.
Key management
All keys are autmatically created and kept over consecutive exections if the output directory is in the same directory as the binary.
Rotating keys
Invoke with --rotate-keys
or -r
.
Rotating ips
Invoke with --rotate-ips
or -i
.
Extras
# friendly_name = $NAME
is added for each client in the server configs to be compatible with the prometheus-wireguard-exporter.
Development
New network topologies
It is possible to support all kinds of network topologies using the base .toml
file.
If you want to implement one just open an issue and I can help you with any questions.
Just want me to add it?
Sure thing, open an issue with the desired topology and I will add it for 0.5 in ETH. If that is too expensive feel free to ask for help via Gitcoin.
Testing
Tests are written using bats.
The bats framework is included in the repository via git submodules.
These will be fetched automatically when executing the tests, but can be fetched manually with git submodule update --recursive
.
They are executed in a containerized environment and depend on: