![](/static/253f0d9b/assets/icons/icon-96x96.png)
![](https://programming.dev/pictrs/image/8140dda6-9512-4297-ac17-d303638c90a6.png)
start a process within a specific veth
That sentence doesn’t make any sense.
Processes run in network namespaces (netns), and that’s exactly what ip netns exec
does.
A newly created netns via ip netns add
has no network connectivity at all. Even (private) localhost is down and you have to run ip link set lo up
to bring it up.
You use veth
pairs to connect a virtual device in a network namespace, with a virtual device in the default namespace (or another namespace with internet connectivity).
You route the VPN server address via the netns veth device and nothing else. Then you run wireguard/OpenVPN inside netns.
Avoid using systemd since it runs in the default netns by default, even if called from a process running in another netns.
The way I do it is:
- A script for all the network setup:
ns_con AA
- A script to run a process in a netns (basically a wrapper around
ip netns exec
):
ns_run AA <cmd>
- Run a termnal app using 2.
- Run a tmux session on a separate socket inside terminal app. e.g.
export DISPLAY=:0 # for X11
export XDG_RUNTIME_DIR=/run/user/1000 # to connect to already running pipewire...
# double check this is running in AA ns
tmux -f -f <alternative_config_file_if_needed> -L NS_AA
I have this in my tmux config:
set-option -g status-left "[#{b:socket_path}:#I] "
So I always know which socket a tmux session is running on. You can include network info there if you’re still not confident in your setup.
Now, I can detach that tmux session. Reattaching with tmux -L NS_AA attach
from anywhere will give me the session still running in AA
.
you wouldn’t know because…
you don’t have a single clue about what they are actually doing.