This Bash script creates three separate Linux network namespaces (instance1, instance2, and instance3), assigns a specific physical interface to each, configures their IPv4/IPv6 addresses and default routes, and sets custom DNS resolvers for each namespace.
#!/bin/bash ip netns add instance1 ip link set enp5s0 netns instance1 ip netns exec instance1 ip link set enp5s0 up ip netns exec instance1 ip -4 addr add 192.168.1.63/31 dev enp5s0 ip netns exec instance1 ip -4 route add 0.0.0.0/0 via 192.168.1.62 dev enp5s0 ip netns exec instance1 ip -6 addr add 2001:db8:742:c01:151:8888:0:a/96 dev enp5s0 ip netns exec instance1 ip -6 route add ::/0 via 2001:db8:742:c01:151:8888:0:1 dev enp5s0 mkdir -p /etc/netns/instance1 echo -e "nameserver 8.8.8.8\nnameserver 8.8.4.4" | sudo tee /etc/netns/instance1/resolv.conf > /dev/null ip netns add instance2 ip link set enp6s0 netns instance2 ip netns exec instance2 ip link set enp6s0 up ip netns exec instance2 ip -4 addr add 192.168.1.65/31 dev enp6s0 ip netns exec instance2 ip -4 route add 0.0.0.0/0 via 192.168.1.64 dev enp6s0 ip netns exec instance2 ip -6 addr add 2001:db8:742:c01:152:8888:0:a/96 dev enp6s0 ip netns exec instance2 ip -6 route add ::/0 via 2001:db8:742:c01:152:8888:0:1 dev enp6s0 mkdir -p /etc/netns/instance2 echo -e "nameserver 8.8.8.8\nnameserver 8.8.4.4" | sudo tee /etc/netns/instance2/resolv.conf > /dev/null ip netns add instance3 ip link set enp7s0 netns instance3 ip netns exec instance3 ip link set enp7s0 up ip netns exec instance3 ip -4 addr add 192.168.1.67/31 dev enp7s0 ip netns exec instance3 ip -4 route add 0.0.0.0/0 via 192.168.1.66 dev enp7s0 ip netns exec instance3 ip -6 addr add 2001:db8:742:c01:153:8888:0:a/96 dev enp7s0 ip netns exec instance3 ip -6 route add ::/0 via 2001:db8:742:c01:153:8888:0:1 dev enp7s0 mkdir -p /etc/netns/instance3 echo -e "nameserver 8.8.8.8\nnameserver 8.8.4.4" | sudo tee /etc/netns/instance3/resolv.conf > /dev/null
This Bash script displays the network interface details, IPv4/IPv6 addresses, and routing tables for three network namespaces (instance1, instance2, and instance3) in a formatted, sectioned output.
#!/bin/bash echo " " echo "#################instance1#################" sudo ip netns exec instance1 ip link show echo " " sudo ip netns exec instance1 ip -4 addr show echo " " sudo ip netns exec instance1 ip -4 route show echo " " sudo ip netns exec instance1 ip -6 addr show echo " " sudo ip netns exec instance1 ip -6 route show echo "################################################" echo " " echo " " echo "#################instance2#################" sudo ip netns exec instance2 ip link show echo " " sudo ip netns exec instance2 ip -4 addr show echo " " sudo ip netns exec instance2 ip -4 route show echo " " sudo ip netns exec instance2 ip -6 addr show echo " " sudo ip netns exec instance2 ip -6 route show echo "################################################" echo " " echo " " echo "#################instance3#################" sudo ip netns exec instance3 ip link show echo " " sudo ip netns exec instance3 ip -4 addr show echo " " sudo ip netns exec instance3 ip -4 route show echo " " sudo ip netns exec instance3 ip -6 addr show echo " " sudo ip netns exec instance3 ip -6 route show echo "################################################"
This script opens firefox-esr in three different network namespaces (instance1, instance2, instance3), each using its own browser profile and with proxy settings disabled.
#####Note that it isn't compatible with Firefox snap version. The firefox-esr must be installed.##### sudo /usr/sbin/ip netns exec instance1 env http_proxy="" https_proxy="" \ sudo -u $USER \ env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY firefox-esr --new-instance --profile $HOME/.mozilla/instance1 sudo /usr/sbin/ip netns exec instance2 env http_proxy="" https_proxy="" \ sudo -u $USER \ env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY firefox-esr --new-instance --profile $HOME/.mozilla/instance2 sudo /usr/sbin/ip netns exec instance3 env http_proxy="" https_proxy="" \ sudo -u $USER \ env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY firefox-esr --new-instance --profile $HOME/.mozilla/instance3
This script runs speedtest-cli inside three network namespaces (instance1, instance2, instance3) with proxy variables cleared, allowing separate network speed tests for each namespace.
#!/bin/bash sudo /usr/sbin/ip netns exec instance1 env http_proxy="" https_proxy="" \ sudo -u $USER \ speedtest-cli sudo /usr/sbin/ip netns exec instance2 env http_proxy="" https_proxy="" \ sudo -u $USER \ speedtest-cli sudo /usr/sbin/ip netns exec instance3 env http_proxy="" https_proxy="" \ sudo -u $USER \ speedtest-cli
This systemd unit file defines a one-shot service that runs the /usr/local/share/instances-netns.sh script at boot after the network is up and remains marked active after execution.
[Unit] Description=Run CPE Netns Script at Boot After=network.target [Service] Type=oneshot ExecStart=/usr/local/share/instances-netns.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target
These commands reload systemd to recognize new or changed units, enable the instances-netns.service to start at boot, and start the service immediately.
sudo systemctl daemon-reload sudo systemctl enable instances-netns.service sudo systemctl start instances-netns.service