NetworkManagerを使用しながらブリッジするinitscript書いた。

ノートPCなんか特にそうですが、無線とか、VPNの設定あると、NetworkManagerはかなり便利です。
で、やっぱりブリッジはしたいことが多いので、initscript書きました。結構便利になるかと思います。
テストは、FC16です。Deb系等他のディストリがわかってないんで、汎用かどうかは不明。。。
(openvpnスクリプトを流用ですが。。。)

tunctlとbrctlが使える状況にしておいてください。Redhat系だと

yum install -y tunctl bridge-utils

だったかと。。。

適宜環境に合わせて、networkとインターフェースを変更してください。
(うちの環境だと、IntelNic増設してるので、p7p1ってのを使ってます。)

んで中身です。なんかおかしいとことか、こうしたほうがっていうのがあれば、ご指摘下さいm(_ _)m

#!/bin/sh

# bridge       This shell script takes care of starting and stopping
#               RedHat or other chkconfig-based system.
#
# chkconfig: - 23 76
#
# processname: bridge
# description: bridge create script.
# 
#
#
#
# author: dai_yamashita

### BEGIN INIT INFO
# Provides:             bridge
# Required-Start:       $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# Default-Start:        2 3 4 5
# Default-Stop:
# Short-Description:    Bridge create script
### END INIT INFO

# Define Bridge Interface
br="br0"

# Define list of TAP interfaces to be bridged,
# for example tap="tap0 tap1 tap2".
tap="tap0"

# Define physical ethernet interface to be bridged
# with TAP interface(s) above.
eth="p7p1"

# Get physical ethernet interface IP address.
PROG="/sbin/ifconfig"
IPKEY="addr:"

PATTERN_IPV4="[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\$"

ifconfig_output=`$PROG $eth 2> /dev/null`

for check in $ifconfig_output; do
  check=`echo $check | egrep $PATTERN_IPV4`
  if [ -n "$check" ]; then
    ipaddr="$check"
    break
  fi
done

ipaddr=`echo $ipaddr | sed s/"$IPKEY"//gi`

#echo $ipaddr

eth_ip="${ipaddr}"
eth_netmask="255.255.255.0"
eth_broadcast="192.168.xxx.255"
gw="192.168.xxx.1"
t=$eth_ip

#################################
# Set up Ethernet bridge on Linux
# Requires: bridge-utils tunctl
#################################

start_bridge() {

  tunctl
  for t in $tap; do
    ifconfig $t
  done

  brctl addbr $br
  brctl addif $br $eth

  for t in $tap; do
    brctl addif $br $t
  done

  for t in $tap; do
    ifconfig $t 0.0.0.0 promisc up
  done

  sleep 1

  ifconfig $eth 0.0.0.0 promisc up

  sleep 1

  ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast up

  route add default gw $gw $br
}

####################################
# Tear Down Ethernet bridge on Linux
####################################

stop_bridge(){

  ifconfig $br down
  brctl delbr $br

  for t in $tap; do
    tunctl -d $t
  done

  ifconfig $eth $eth_ip netmask $eth_netmask broadcast $eth_broadcast up

  route add default gw $gw
}

####################################
# OPTIONS
####################################
case "$1" in
        start)
          echo -n "Starting Bridge"
          start_bridge
          ;;
        stop)
          echo -n "Stopping Bridge"
          stop_bridge
          ;;
        restart)
          stop_bridge
          sleep 2
          start_bridge
          ;;
        *)
          echo "Usage: $0 {start|stop|restart}"
          exit 1
          ;;
esac