2018-04-07 19:40:38 +00:00
|
|
|
# ifupdown-netns
|
|
|
|
|
|
|
|
Some simple scripts to simplify configuring network namespaces on Debian-like
|
|
|
|
systems. Copy them into the corresponding directories under `/etc/network`.
|
|
|
|
|
|
|
|
To configure an interface in a namespace:
|
|
|
|
|
|
|
|
```
|
|
|
|
auto eth1
|
|
|
|
iface eth1 inet manual
|
|
|
|
netns myns
|
|
|
|
```
|
|
|
|
|
2018-04-07 20:05:36 +00:00
|
|
|
On invocation of `ifup`:
|
|
|
|
* if the namespace doesn't exist it will be created
|
|
|
|
* if the folders `if-down.d`, `if-post-down.d`, `if-pre-up.d` and `if-up.d`
|
|
|
|
under `/etc/netns/<namespace>/network` don't exist, they will be created
|
|
|
|
* if the `/etc/netns/<namespace>/network/interfaces` file doesn't exist a
|
|
|
|
blank one will be created
|
2018-04-08 06:41:19 +00:00
|
|
|
* if it does and the interface is configured, the script will invoke `ifup`
|
2018-04-07 20:05:36 +00:00
|
|
|
for this interface inside the namespace.
|
2018-04-07 20:08:02 +00:00
|
|
|
|
2018-04-08 06:51:40 +00:00
|
|
|
## `zsh` functions to run commands and start a shell in a namespace
|
2018-04-07 20:08:02 +00:00
|
|
|
```
|
2018-04-08 06:51:40 +00:00
|
|
|
nse () {
|
|
|
|
if [ $# -lt 2 ]; then
|
|
|
|
echo "Please specify a network namespace and a command"
|
2018-04-07 20:08:02 +00:00
|
|
|
return
|
|
|
|
fi
|
2018-04-08 06:51:40 +00:00
|
|
|
NS=${1}
|
|
|
|
shift
|
2018-04-07 20:08:02 +00:00
|
|
|
unshare -m /bin/sh <<-EOF
|
|
|
|
mount --make-rprivate /
|
2018-04-08 06:51:40 +00:00
|
|
|
mount --bind /run/network.${NS} /run/network
|
|
|
|
ip netns exec ${NS} ${@}
|
2018-04-07 20:08:02 +00:00
|
|
|
EOF
|
|
|
|
}
|
2018-04-08 06:51:40 +00:00
|
|
|
|
|
|
|
nss () {
|
|
|
|
if [ $# -ne 1 ]; then
|
|
|
|
echo "Please specify a network namespace"
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
nse $1 zsh -i
|
|
|
|
}
|
2018-04-07 20:08:02 +00:00
|
|
|
```
|