Создание моста в Slackware

From wiki.habital.lv
Jump to navigation Jump to search

Использование скриптов

В дистрибутиве Slackware для запуска и остановки сервисов используются скрипты, находящиеся в каталоге "/etc/rc.d". Основной скрипт для запуска сервисов - "/etc/rc.d/rc.M", а для останова - "/etc/rc.d/rc.6". Запуск и останов сетевых устройств осуществляется скриптом "/etc/rc.d/rc.inet1". Для запуска и остановки сетевого моста можно добавить отдельный скрипт и запуск его добавить в скрипт "rc.M", а останов - в скрипт "rc.6":

rc.M:

# Initialize the networking hardware.
if [ -x /etc/rc.d/rc.inet1 ]; then
  . /etc/rc.d/rc.inet1
fi
if [ -x /etc/rc.d/rc.bridge ]; then
  . /etc/rc.d/rc.bridge start
fi

# Initialize the hotplugging subsystem for Cardbus, IEEE1394, PCI, and

rc.6:

# isn't a diskless client with the / partition mounted via NFS:
if ! /bin/mount | /bin/grep -q 'on / type nfs' ; then
  if [ -x /etc/rc.d/rc.bridge ]; then
    . /etc/rc.d/rc.bridge stop
  fi
  if [ -x /etc/rc.d/rc.inet1 ]; then
    . /etc/rc.d/rc.inet1 stop
  fi
fi

# In case dhcpcd might have been manually started on the command line,

rc.bridge:

#!/bin/sh

[ -z /etc/rc.d/rc.bridge.conf ] && exit 1
. /etc/rc.d/rc.bridge.conf

# If possible, log events in /var/log/messages:
if [ -f /var/run/syslogd.pid -a -x /usr/bin/logger ]; then
  LOGGER=/usr/bin/logger
else # output to stdout/stderr:
  LOGGER=/bin/cat
fi

gateway_up() {
  if ! /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then
    if [ ! "$GATEWAY" = "" ]; then
      echo "/etc/rc.d/rc.bridge:  /sbin/route add default gw ${GATEWAY} metric 1" | $LOGGER
      /sbin/route add default gw ${GATEWAY} metric 1 2>&1 | $LOGGER
    fi
  fi
}

gateway_down() {
  if /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then
    echo "/etc/rc.d/rc.bridge:  /sbin/route del default" | $LOGGER
    /sbin/route del default
  fi
}

case "$1" in
        "start" )
            for i in ${IFACES} ; do
                    /sbin/ifconfig $i 0.0.0.0 up
            done
            /sbin/brctl addbr ${BRIDGE}
            for i in ${IFACES} ; do
                    /sbin/brctl addif ${BRIDGE} $i
            done
            if [ "${USE_DHCP}" = "yes" ]; then
                    echo "/etc/rc.d/rc.bridge: /sbin/dhcpcd -d -t ${DHCP_TIMEOUT:-30} ${DHCP_OPTIONS} ${BRIDGE}" | LOGGER
                    /sbin/dhcpcd -d -t ${DHCP_TIMEOUT:-30} ${DHCP_OPTIONS} ${BRIDGE}
            else
                    if [ ! "${IPADDR}" = "" ]; then
                            BROADCAST=`/bin/ipmask ${NETMASK} ${IPADDR}|cut -f1 -d' '`
                            echo "/etc/rc.d/rc.bridge: /sbin/ifconfig ${BRIDGE} ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK}" | $LOGGER
                            /sbin/ifconfig ${BRIDGE} ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK}
                    fi
            fi
            # GATEWAY
            gateway_up
        ;;
        "stop" )
            gateway_down
            for i in ${IFACES} ; do
                    /sbin/ifconfig $i down
                    /sbin/brctl delif ${BRIDGE} $i
            done
            if [ "${USE_DHCP}" = "yes" ]; then
                    echo "/etc/rc.d/rc.bridge:  /sbin/dhcpcd -k -d ${BRIDGE}" | $LOGGER
                    /sbin/dhcpcd -k -d ${BRIDGE} 2> /dev/null
                    sleep 1
            fi
            /sbin/ifconfig ${BRIDGE} down
            /sbin/brctl delbr ${BRIDGE}
        ;;
        "status" )
            /sbin/ifconfig ${BRIDGE}
            /sbin/brctl show
            /sbin/brctl showmacs ${BRIDGE}
            /sbin/brctl showstp ${BRIDGE}
        ;;
        "restart" )
            $0 stop
            sleep 2
            $0 start
        ;;
        * )
        echo "Usage: $0 {start|stop}"
        ;;
esac
# End of rc.bridge script

rc.bridge.conf:

IFACES="eth0 ath0"
BRIDGE="br0"
IPADDR="192.168.0.1"
NETMASK="255.255.255.0"
GATEWAY="192.168.0.254"
USE_DHCP="no"

В файле "/etc/rc.d/rc.inet1.conf" параметр "GATEWAY" должен быть пустой, так как он присутствует в файле "/etc/rc.d/rc.bridge.conf".