qemu-kvm 网络 nat模式 (四)

qemu-ifup-NAT
#!/bin/bash
BRIDGE=virbr0
NETWORK=192.168.122.0
GATEWAY=192.168.122.1
NETMASK=255.255.255.0
DHCPRANGE=192.168.122.2,192.168.122.254
TFTPROOT=
BOOTP=
function check_bridge()
{
if brctl show | grep "^BRIDGE" &> /dev/null;then
    return 1
else
    return 0
fi
}
function create_bridge()
{
brctl addbr "BRIDGE"
brctl stp "BRIDGE" on
brctl setfd "BRIDGE" 0
ifconfig "$BRIDGE" "GATEWAY" netmask "$NETMASK" up
}
function enable_ip_forward()
{
echo 1 > /proc/sys/net/ipv4/ip_forward
}
function add_filter_rules()
{
 iptables -t nat -A POSTROUTING -s "$NETWORK"/"$NETMASK" ! -d "$NETWORK"/"$NETMASK" -j MASQUERADE
}
function start_dnsmasq()
{
ps -ef | grep "dnsmasq" |grep -v "grep" &> /dev/null
if [ $? -eq 0 ];then
    echo "warning:dnsmasq is already running"
    return 1
fi
dnsmasq --strict-order --except-interface=lo --interface=$BRIDGE --listen-address=$GATEWAY --bind-interfaces  --dhcp-range=$DHCPRANGE --conf-file="" --pid-file=/var/run/qemu-dhcp-$BRIDGE.pid --dhcp-leasefile=/var/run/qemu-dhcp-$BRIDGE.leases --dhcp-no-override ${TFTPROOT:+"--enable-tftp"} ${TFTPROOT:+"--tftp-root=$TFTPROOT"} ${BOOTP:+"--dhcp-boot=$BOOTP"}
}
function setup_bridge_nat()
{
check_bridge "$BRIDGE"
if [ $? -eq 0 ];then
create_bridge
fi
enable_ip_forward
add_filter_rules "$BRIDGE"
start_dnsmasq "$BRIDGE"
}
if [ -n "$1"];then
setup_bridge_nat
ifconfig "$1" 0.0.0.0 up
brctl addif "$BRIDGE" "$1"
exit 0
else
echo "Error:no interface specified"
exit 1
fi



qemu-ifdown-NAT
#!/bin/bash
BRIDGE="virbr0"
if [ -n "$1" ];then
ip link set $1 down
brctl delif "$BRIDGE" $1
ip link set "$BRIDGE" down
brctl delbr "$BRIDGE"
iptables -t nat -F
exit 0
else
echo "Error: no interface specified"
exit 1
fi

猜你喜欢

转载自haoningabc.iteye.com/blog/2228561
今日推荐