| #!/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 |
| |