| #!/bin/bash |
| ########################################################################### |
| # Configuration of the tunN devices for usage with Basilisk II. |
| # (derived MOL tunconfig script) |
| # |
| # This script should be named /usr/share/BasiliskII/tunconfig (unless |
| # the default name has been changed with the 'etherconfig' keyword). |
| # |
| # Usage: tunconfig iface up|down |
| # |
| # If the linux box is configured as a firewall, the rules below might |
| # need some adjustments. |
| # |
| # The IP Tunnel driver requires IP forwarding to be enabled. Run as root: |
| # |
| # echo 1 >/proc/sys/net/ipv4/ip_forward |
| # |
| ########################################################################### |
| |
| SUDO=/usr/bin/sudo |
| IFCONFIG=/sbin/ifconfig |
| IPTABLES=/sbin/iptables |
| |
| ######################################################### |
| |
| [[ "x$1" = "x-n" ]] && { |
| DONT_EXECUTE=yes |
| shift 1 |
| } |
| |
| TUN_DEV=$1 |
| ACTION=$2 |
| |
| TUN_NUM=`echo $TUN_DEV | sed s/[^0-9]//g` |
| NET_NUM=`expr 40 + $TUN_NUM` |
| TUN_NET=172.20.$NET_NUM.0/24 |
| TUN_HOST=172.20.$NET_NUM.1 |
| |
| ######################################################### |
| # Misc Checks |
| ######################################################### |
| |
| [[ $# = 2 ]] || { |
| echo "Usage: tunconfig [-n] iface up|down" |
| exit 2 |
| } |
| |
| [[ "`id -u`" = "0" ]] && { |
| echo "---> $SUDO not necessary." 1>&2 |
| SUDO="" |
| } |
| |
| [[ -x $IPTABLES ]] || { |
| echo "---> $IPTABLES not found." 1>&2 |
| exit 1 |
| } |
| |
| if [ -n "$SUDO" ]; then |
| $SUDO -l | grep -q "NOPASSWD: $IFCONFIG" || { |
| echo "---> Missing sudo NOPASSWD: $IFCONFIG." 1>&2 |
| exit 1 |
| } |
| $SUDO -l | grep -q "NOPASSWD: $IPTABLES" || { |
| echo "---> Missing sudo NOPASSWD: $IPTABLES." 1>&2 |
| exit 1 |
| } |
| IFCONFIG="$SUDO $IFCONFIG" |
| IPTABLES="$SUDO $IPTABLES" |
| fi |
| |
| [[ "x$DONT_EXECUTE" = "xyes" ]] && exit 0 |
| |
| $IPTABLES -L -n -t nat > /dev/null || exit 1 |
| |
| ######################################################### |
| # Remove old (possibly stale) ruleset |
| ######################################################### |
| |
| { |
| $IPTABLES -t nat -D POSTROUTING -s $TUN_NET ! -d $TUN_NET -j MASQUERADE |
| } >& /dev/null |
| |
| ######################################################### |
| # Bring down interface |
| ######################################################### |
| |
| [[ "$ACTION" = down ]] && { |
| $IFCONFIG $TUN_DEV down |
| } |
| |
| ######################################################### |
| # Configure interface |
| ######################################################### |
| |
| [[ "$ACTION" = up ]] && { |
| $IFCONFIG $TUN_DEV $TUN_HOST |
| |
| # masquerade the tun network |
| $IPTABLES -t nat -A POSTROUTING -s $TUN_NET ! -d $TUN_NET -j MASQUERADE |
| } |
| |
| exit 0 |