134 lines
2.9 KiB
Bash
134 lines
2.9 KiB
Bash
|
#!/bin/sh
|
||
|
#
|
||
|
# Copyright IBM, Corp. 2010
|
||
|
#
|
||
|
# Authors:
|
||
|
# Anthony Liguori <aliguori@us.ibm.com>
|
||
|
#
|
||
|
# This work is licensed under the terms of the GNU GPL, version 2. See
|
||
|
# the COPYING file in the top-level directory.
|
||
|
|
||
|
|
||
|
# TODO's:
|
||
|
# Please make sure to install bridge-utils before using this script
|
||
|
# Please make also sure that you added 'allow br0' to your etc/qemu/bridge.conf
|
||
|
|
||
|
# Set to the name of your bridge
|
||
|
BRIDGE=br0
|
||
|
|
||
|
# Network information
|
||
|
NETWORK=10.0.0.0
|
||
|
NETMASK=255.255.255.0
|
||
|
GATEWAY=10.0.0.1
|
||
|
|
||
|
# Optionally parameters to enable PXE support
|
||
|
TFTPROOT=
|
||
|
BOOTP=
|
||
|
|
||
|
do_brctl() {
|
||
|
brctl "$@"
|
||
|
}
|
||
|
|
||
|
do_ifconfig() {
|
||
|
ifconfig "$@"
|
||
|
}
|
||
|
|
||
|
do_dd() {
|
||
|
dd "$@"
|
||
|
}
|
||
|
|
||
|
do_iptables_restore() {
|
||
|
iptables-restore "$@"
|
||
|
}
|
||
|
|
||
|
do_dnsmasq() {
|
||
|
dnsmasq "$@"
|
||
|
}
|
||
|
|
||
|
check_bridge() {
|
||
|
if do_brctl show | grep "^$1" > /dev/null 2> /dev/null; then
|
||
|
return 1
|
||
|
else
|
||
|
return 0
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
create_bridge() {
|
||
|
do_brctl addbr "$1"
|
||
|
do_brctl stp "$1" off
|
||
|
do_brctl setfd "$1" 0
|
||
|
do_ifconfig "$1" "$GATEWAY" netmask "$NETMASK" up
|
||
|
}
|
||
|
|
||
|
enable_ip_forward() {
|
||
|
echo 1 | do_dd of=/proc/sys/net/ipv4/ip_forward > /dev/null
|
||
|
}
|
||
|
|
||
|
add_filter_rules() {
|
||
|
do_iptables_restore <<EOF
|
||
|
# Generated by iptables-save v1.3.6 on Fri Aug 24 15:20:25 2007
|
||
|
*nat
|
||
|
:PREROUTING ACCEPT [61:9671]
|
||
|
:POSTROUTING ACCEPT [121:7499]
|
||
|
:OUTPUT ACCEPT [132:8691]
|
||
|
-A POSTROUTING -s $NETWORK/$NETMASK -j MASQUERADE
|
||
|
COMMIT
|
||
|
# Completed on Fri Aug 24 15:20:25 2007
|
||
|
# Generated by iptables-save v1.3.6 on Fri Aug 24 15:20:25 2007
|
||
|
*filter
|
||
|
:INPUT ACCEPT [1453:976046]
|
||
|
:FORWARD ACCEPT [0:0]
|
||
|
:OUTPUT ACCEPT [1605:194911]
|
||
|
-A INPUT -i $BRIDGE -p tcp -m tcp --dport 12345 -j ACCEPT
|
||
|
-A INPUT -i $BRIDGE -p udp -m udp --dport 12345 -j ACCEPT
|
||
|
-A INPUT -i $BRIDGE -p tcp -m tcp --dport 12345 -j ACCEPT
|
||
|
-A INPUT -i $BRIDGE -p udp -m udp --dport 12345 -j ACCEPT
|
||
|
-A FORWARD -i $1 -o $1 -j ACCEPT
|
||
|
-A FORWARD -s $NETWORK/$NETMASK -i $BRIDGE -j ACCEPT
|
||
|
-A FORWARD -d $NETWORK/$NETMASK -o $BRIDGE -m state --state RELATED,ESTABLISHED -j ACCEPT
|
||
|
COMMIT
|
||
|
# Completed on Fri Aug 24 15:20:25 2007
|
||
|
EOF
|
||
|
}
|
||
|
|
||
|
start_dnsmasq() {
|
||
|
do_dnsmasq \
|
||
|
--strict-order \
|
||
|
--except-interface=lo \
|
||
|
--interface=$BRIDGE \
|
||
|
--listen-address=$GATEWAY \
|
||
|
--bind-interfaces \
|
||
|
--conf-file="" \
|
||
|
--pid-file=/var/run/qemu-dnsmasq-$BRIDGE.pid \
|
||
|
--dhcp-leasefile=/var/run/qemu-dnsmasq-$BRIDGE.leases \
|
||
|
--dhcp-no-override \
|
||
|
${TFTPROOT:+"--enable-tftp"} \
|
||
|
${TFTPROOT:+"--tftp-root=$TFTPROOT"} \
|
||
|
${BOOTP:+"--dhcp-boot=$BOOTP"}
|
||
|
}
|
||
|
setup_bridge_nat() {
|
||
|
if check_bridge "$1" ; then
|
||
|
create_bridge "$1"
|
||
|
enable_ip_forward
|
||
|
add_filter_rules "$1"
|
||
|
start_dnsmasq "$1"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
setup_bridge_vlan() {
|
||
|
if check_bridge "$1" ; then
|
||
|
create_bridge "$1"
|
||
|
start_dnsmasq "$1"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
setup_bridge_nat "$BRIDGE"
|
||
|
|
||
|
if test "$1" ; then
|
||
|
do_ifconfig "$1" 0.0.0.0 up
|
||
|
do_brctl addif "$BRIDGE" "$1"
|
||
|
fi
|
||
|
|
||
|
# Setting port forwarding rule - Add all needed port forwardings here!
|
||
|
# sudo iptables -A PREROUTING -t nat -i wlan0 -p udp --dport 12345 -j DNAT --to 10.0.0.2:12345
|