#!/usr/bin/env bash setup_bridge() { if [[ $# -lt 1 ]]; then echo "usage: start_bridge internet_interface" else echo "Setting up bridge with internet adapter $1" fi ip link add name virbr0 type bridge ip link set virbr0 up ip addr add 192.168.100.0/24 dev virbr0 sysctl -w net.ipv4.ip_forward=1 nft add table inet nat nft add chain inet nat postrouting '{ type nat hook postrouting priority 100 ; }' nft add rule inet nat postrouting oifname $1 masquerade } del_bridge() { echo "Deleting virtual bridge" ip link del virbr0 nft delete table inet nat } add_interface() { echo "Adding interface $1" ip tuntap add $1 mode tap ip link set $1 master virbr0 ip link set $1 up } del_interface() { echo "Deleteing inteface $1" ip link set $1 down ip link set $1 nomaster ip tuntap del $1 mode tap } if [[ $UID -ne 0 ]]; then echo "Networking script must be run as root user" exit 1 fi CASE=$1 shift case $CASE in start_bridge) setup_bridge $@ ;; stop_bridge) del_bridge $@ ;; add_tap) add_interface $@ ;; del_tap) del_interface $@ ;; *) echo "usage:" $0 "[start_bridge|stop_bridge|add_tap|del_tap] [options]" ;; esac