#!/bin/sh /etc/rc.common START=99 run_bridge() { config_get enabled $1 enabled config_get gateway $1 gateway config_get ipaddr $1 ipaddr config_get netmask $1 netmask config_get network $1 network ipv6=$(uci get network.globals.ula_prefix) if=$(cat /etc/config/network | wc -l) if [ "$enabled" = "1" ]; then #防止重复配置 a=$(uci get network.bridge.device | sed 's/ /\n/g' |wc -l) b=$(uci get network.bridge.ipaddr) c=$(uci get network.bridge.netmask) d=$(uci get network.bridge.gateway) e=$(ls /sys/class/net | grep "eth" | wc -l) if [ "$a" = "$network" ] || [ "$a" = "$e" ] && [ "$network" = "" ] || [ "$a" = "$network" ]; then f=yes else f=no fi if [ "$b" = "$ipaddr" ] && [ "$c" = "$netmask" ] && [ "$d" = "$gateway" ] && [ "$f" = "yes" ]; then break; else #模拟输入 if [ "$network" = "0" ] || [ "$network" = "" ]; then eth=$(ls /sys/class/net | grep "eth" | tr '\n' ' ' | sed 's/[ ]*$//g') else eth=$(ETH $network | tr '\n' ' ' | sed 's/[ ]*$//g') fi #备份配置 if [ ! -f "/etc/bridge/firewall" ]; then mkdir /etc/bridge cp /etc/config/network /etc/bridge/network cp /etc/config/firewall /etc/bridge/firewall fi #清空配置 cat /dev/null> /etc/config/network cat /dev/null> /etc/config/firewall #写入network网络接口 uci set network.loopback=interface uci set network.loopback.device=lo uci set network.loopback.proto=static uci set network.loopback.ipaddr=127.0.0.1 uci set network.loopback.netmask=255.0.0.0 uci set network.globals=globals uci set network.globals.ula_prefix=$ipv6 uci set network.bridge=interface uci set network.bridge.type='bridge' uci set network.bridge.device="$eth" uci set network.bridge.proto='static' uci set network.bridge.ipaddr=$ipaddr uci set network.bridge.netmask=$netmask uci set network.bridge.gateway=$gateway uci set network.bridge.dns=$gateway uci set network.bridge.force_link='0' uci commit network #写入firewall防火墙 uci add firewall zone uci set firewall.@zone[0].input=ACCEPT uci set firewall.@zone[0].output=ACCEPT uci set firewall.@zone[0].forward=ACCEPT uci set firewall.@zone[0].conntrack=1 uci set firewall.@zone[0].mtu_fix=1 uci set firewall.@zone[0].name=bridge uci set firewall.@zone[0].network=bridge uci commit firewall #重启网络DNS服务与防火墙 /etc/init.d/network reload 2>/dev/null & /etc/init.d/dnsmasq reload 2>/dev/null & /etc/init.d/firewall reload 2>/dev/null & fi else #恢复配置&删除备份 if [ -f "/etc/bridge/firewall" ]; then cp /etc/bridge/network /etc/config/network cp /etc/bridge/firewall /etc/config/firewall rm -rf /etc/bridge #重启网络DNS服务与防火墙 /etc/init.d/network reload 2>/dev/null & /etc/init.d/dnsmasq reload 2>/dev/null & /etc/init.d/firewall reload 2>/dev/null & fi fi } ETH() { eth=0 while [ $eth -le $(expr "$1" - 1) ] do eth=`expr $eth + 1` a=`expr $eth - 1` echo "eth$a" done } start() { config_load bridge config_foreach run_bridge bridge }