#!/bin/bash # Script creates bridge, tap and adds tap and ethernet to the bridge if [ "$1" == '2' ]; then br_ip='172.17.100.6/16' gw_ip='172.17.100.1' dns_ip='8.8.8.8' eth_int='enp4s0f2' br_int='br2' tap_int='tap2' elif [ "$1" == '0' ]; then br_ip='192.168.0.3/24' gw_ip='none' dns_ip='8.8.8.8' eth_int='tap00' br_int='br0' tap_int='tap0' else echo "Re-run the script with a bridge number either 0 or 2, e.g: '$0 0', exiting" && exit 1 fi # Check if bridge and tap exist, if not create them for int in "$br_int" "$tap_int" "$eth_int"; do ifconfig "$int" &>/dev/null int_ret="$?" if [[ "$int_ret" != 0 && "$int" == "$br_int" ]]; then sudo ip link add "$int" type bridge elif [[ "$int_ret" != 0 && "$int" == "$tap_int" ]]; then sudo ip tuntap add dev "$int" mode tap user $(whoami) elif [[ "$int_ret" != 0 && "$int" == "eth_int" ]]; then echo "Sorry, I can't find Ethernet interface: '$eth_int', exiting" && exit 0 fi # We need to bring every interface up and flush it sudo ip link set dev "$int" up sudo ip addr flush dev "$int" # Add interface to "$br_int" if it isn't bridge. If it is bridge, assign IP address to bridge if [ "$int" != "$br_int" ]; then sudo ip link set "$int" master "$br_int" elif [ "$int" == "$br_int" ]; then sudo ip addr add "$br_ip" dev "$br_int" fi done if [ "$gw_ip" != 'none' ]; then ip route show | grep -q "default via $gw_ip dev $br_int" [ "$?" != 0 ] && sudo ip route add default via "$gw_ip" fi # Configure Google DNS if we can't find it in /etc/resolv.conf grep -q "$dns_ip" /etc/resolv.conf [ "$?" != 0 ] && sudo bash -c "echo \"nameserver $dns_ip\" > /etc/resolv.conf" exit 0