mirror of
https://codeberg.org/icewind/netnsd.git
synced 2026-06-03 09:04:07 +02:00
89 lines
2 KiB
Markdown
89 lines
2 KiB
Markdown
# 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
|
|
|
|
```shell
|
|
netnsd daemon [--config <config.toml>]
|
|
```
|
|
|
|
Start the `netnsd` daemon, applying the configured namespace configuration and
|
|
running any proxies.
|
|
|
|
See the [systemd service example](./netnsd.service) 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
|
|
|
|
```shell
|
|
netnsd up [--config <config.toml>]
|
|
```
|
|
|
|
Applying the configured namespace and exit.
|
|
|
|
### Down
|
|
|
|
```shell
|
|
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.
|
|
|
|
```toml
|
|
# 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
|
|
```
|