|  | #!/bin/bash | 
|  |  | 
|  | # Print some usage info | 
|  | function usage { | 
|  | echo "Usage: $0 [OPTION] [host_ip]" | 
|  | echo "Set up temporary networking for LXC" | 
|  | echo "" | 
|  | echo "  -n, --dry-run            Just print the commands that would execute." | 
|  | echo "  -h, --help               Print this usage message." | 
|  | echo "" | 
|  | exit | 
|  | } | 
|  |  | 
|  | # Allow passing the ip address on the command line. | 
|  | function process_option { | 
|  | case "$1" in | 
|  | -h|--help) usage;; | 
|  | -n|--dry-run) dry_run=1;; | 
|  | *) host_ip="$1" | 
|  | esac | 
|  | } | 
|  |  | 
|  | # Set up some defaults | 
|  | host_ip= | 
|  | dry_run=0 | 
|  | bridge=br0 | 
|  | DRIER= | 
|  |  | 
|  | # Process the args | 
|  | for arg in "$@"; do | 
|  | process_option $arg | 
|  | done | 
|  |  | 
|  | if [ $dry_run ]; then | 
|  | DRIER=echo | 
|  | fi | 
|  |  | 
|  | if [ "$UID" -ne "0" ]; then | 
|  | echo "This script must be run with root privileges." | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | # Check for bridge-utils. | 
|  | BRCTL=`which brctl` | 
|  | if [ ! -x "$BRCTL" ]; then | 
|  | echo "This script requires you to install bridge-utils." | 
|  | echo "Try: sudo apt-get install bridge-utils." | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | # Scare off the nubs. | 
|  | echo "=====================================================" | 
|  | echo | 
|  | echo "WARNING" | 
|  | echo | 
|  | echo "This script will modify your current network setup," | 
|  | echo "this can be a scary thing and it is recommended that" | 
|  | echo "you have something equivalent to physical access to" | 
|  | echo "this machine before continuing in case your network" | 
|  | echo "gets all funky." | 
|  | echo | 
|  | echo "If you don't want to continue, hit CTRL-C now." | 
|  |  | 
|  | if [ -z "$host_ip" ]; | 
|  | then | 
|  | echo "Otherwise, please type in your host's ip address and" | 
|  | echo "hit enter." | 
|  | echo | 
|  | echo "=====================================================" | 
|  | read host_ip | 
|  | else | 
|  | echo "Otherwise hit enter." | 
|  | echo | 
|  | echo "=====================================================" | 
|  | read accept | 
|  | fi | 
|  |  | 
|  |  | 
|  | # Add a bridge interface, this will choke if there is already | 
|  | # a bridge named $bridge | 
|  | $DRIER $BRCTL addbr $bridge | 
|  | $DRIER ip addr add 192.168.1.1/24 dev $bridge | 
|  | if [ $dry_run ]; then | 
|  | echo "echo 1 > /proc/sys/net/ipv4/ip_forward" | 
|  | else | 
|  | echo 1 > /proc/sys/net/ipv4/ip_forward | 
|  | fi | 
|  | $DRIER ifconfig $bridge up | 
|  |  | 
|  | # Set up the NAT for the instances | 
|  | $DRIER iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source $host_ip | 
|  | $DRIER iptables -I FORWARD -s 192.168.1.0/24 -j ACCEPT | 
|  |  |