mirror of
https://codeberg.org/icewind/netnsd.git
synced 2026-06-03 09:04:07 +02:00
A declarative manager for Linux network namespaces.
- Rust 93.3%
- Nix 6.7%
| .forgejo/workflows | ||
| nix | ||
| src | ||
| .envrc | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| config.sample.toml | ||
| flake.lock | ||
| flake.nix | ||
| netnsd.service | ||
| README.md | ||
netnsd
A declarative manager for Linux network namespaces.
Features
- Fully declarative configuration
- Hot reloading of configuration
- Port forwarding into or out of the namespace
- Moving network devices to the namespace
Usage
Daemon
netnsd daemon [--config <config.toml>]
Start the netnsd daemon, applying the configured namespace configuration and
running any proxies.
See the systemd service example for an example of how to run the daemon with systemd.
You can tell the daemon to reload the configuration with pkill -sighup netnsd.
Note that, to minimize interruption of anything using the namespaces, stopping the daemon will not remove the created namespaces.
Up
netnsd up [--config <config.toml>]
Applying the configured namespace and exit.
Down
netnsd down
Remove all namespaces created by netnsd and exit.
Configuration
By default netnsd will look for it's configuration in /etc/netnsd/netnsd.
You can specify a different configuration path with the --config option.
# You can define any number of namespaces to create
[[namespace]]
# name of the namespace to create
name = "test"
# move existing devices into the namespace
devices = ["somelink"]
# You can define any number of port forwards to setup into the namespace
[[namespace.forward]]
# port, address or socket outside the namespace to listen on
# when only a port is specified it will listen on 0.0.0.0
source = 8091
# port or address inside the namespace to forward to
# when only a port is specified it will forward to 127.0.0.1
target = 80
[[namespace.forward]]
# listening on a unix socket instead of a tcp port
source = "/run/test/https"
# forward to a specific address instead of 127.0.0.1
target = "127.0.0.2:443"
# Another namespace
[[namespace]]
name = "test2"
[[namespace.forward]]
# listening on a specific address instead of 0.0.0.0
source = "127.0.0.1:9091"
target = 80
[[namespace.forward]]
# forward from inside the namespace to outside instead
reverse = true
source = 80
target = 80