#!/bin/bash number_int="$1" my_bridge='br0' bridge_ip='172.17.100.80/16' ethernet='enp4s0f2' my_gw='172.17.100.1' google_dns='8.8.8.8' c=0 [ $(id -u) != 0 ] && echo "Run the script as sudo" && exit 1 check_arg () { if [ -z "$number_int" ]; then echo "Run '$0' with number of tap interfaces as script's argument" elif [[ ! "$number_int" =~ ^[0-9]+$ ]] || [[ "$number_int" -eq 0 ]]; then echo "'$number_int' is NOT correct number of interfaces" fi } create_br0 () { ip link show dev "$my_bridge" &>/dev/null; bridge_exists="$?" if [ "$bridge_exists" == 0 ]; then echo "Interface '$my_bridge' found, exiting" && exit 1 elif [ "$bridge_exists" == 1 ]; then ip link add dev "$my_bridge" type bridge echo -e "Interface '$my_bridge' has been created" fi sudo ip link set dev "$my_bridge" up ip addr add "$bridge_ip" dev "$my_bridge" echo -e "IP address '$bridge_ip' configured for bridge '$my_bridge'\n" } add_ethernet () { sudo ip addr add dev "$ethernet" 0.0.0.0 sudo ip link set dev "$ethernet" up sudo ip link set dev "$ethernet" master "$my_bridge" echo -e "Interface '$ethernet' has been added to bridge '$my_bridge'\n" } add_tap () { ip link show dev "tap$c" &>/dev/null; tap_exists="$?" if [ "$tap_exists" == 1 ]; then sudo ip tuntap add dev "tap$c" mode tap echo "Interface 'tap$c' has been created" elif [ "$tap_exists" == 0 ]; then echo "Interface 'tap$c' found, nothing to do" fi sudo ip link set dev "tap$c" up sudo ip link set dev "tap$c" master "$my_bridge" echo -e "Interface 'tap$c' has been added to bridge '$my_bridge'\n" } add_internet () { sudo ip route add 0.0.0.0/0 via "$my_gw" grep "$google_dns" /etc/resolv.conf &>/dev/null; google_dns_exists="$?" if [ "$google_dns_exists" != 0 ]; then echo "nameserver $google_dns" >> /etc/resolv.conf echo -e "Google DNS '$google_dns' added into /etc/resolv.conf\n" fi } ### BODY ### check_arg create_br0 add_ethernet add_internet for ((c; c<=$number_int-1; c+=1)); do add_tap done