2017-09-06 22:35:56 +08:00

144 lines
3.6 KiB
Bash
Executable File

#!/bin/sh
#macvlan及PPPoE拨号接口配置批量自动生成脚本
#Copyright (C) 2015 GuoGuo<gch981213@gmail.com>
. /lib/functions.sh
#检测IP列表
chk_ip_list="$(cat /tmp/resolv.conf.auto | grep nameserver | cut -d' ' -f2 | sort -u | tr '\n' ' ') 115.239.210.27 115.239.211.112 220.181.112.244 220.181.111.188 114.114.114.114 114.114.115.115"
fw_str="wan wan6"
#添加MWAN负载均衡相关配置
#$1:接口名称
mwan_cfg_add() {
#gen mwan3_interface
uci set mwan3.${1}=interface
uci set mwan3.${1}.enabled=1
uci set mwan3.${1}.count=1
uci set mwan3.${1}.timeout=2
uci set mwan3.${1}.interval=5
uci set mwan3.${1}.down=3
uci set mwan3.${1}.up=2
for i in $chk_ip_list
do
uci add_list mwan3.${1}.track_ip="$i"
done
uci set mwan3.${1}.reliability=1
#gen mwan3_member
uci set mwan3.${1}_m1_w1=member
uci set mwan3.${1}_m1_w1.interface=${1}
uci set mwan3.${1}_m1_w1.metric=1
uci set mwan3.${1}_m1_w1.weight=1
#gen mwan3_policy
uci add_list mwan3.balanced.use_member=${1}_m1_w1
}
#删除MWAN负载均衡相关配置
#$1:接口名称
mwan_cfg_del() {
uci del mwan3.${1}
uci del mwan3.${1}_m1_w1
uci del_list mwan3.balanced.use_member=${1}_m1_w1
}
#添加macvlan设备
#$1:设虚拟备名称 $2:原始设备名称
macvlan_dev_add() {
uci set network.macvlandev_${1}=device
uci set network.macvlandev_${1}.name=${1}
uci set network.macvlandev_${1}.ifname=${2}
uci set network.macvlandev_${1}.type=macvlan
}
#添加PPPoE接口
#$1:接口名称 $2:设备名称 $3:账户 $4:密码 $5:网关跃点
pppoe_if_add() {
#gen wan if
uci set network.${1}=interface
uci set network.${1}.ifname=${2}
uci set network.${1}.proto=pppoe
uci set network.${1}.username=${3}
uci set network.${1}.password=${4}
uci set network.${1}.metric=${5}
#gen firewall
fw_str="${fw_str} ${1}"
}
apply_cfg() {
uci commit
/etc/init.d/network restart
killall pppconnectcheck
/etc/init.d/firewall restart
mwan3 restart
}
general_config_load() {
config_load 'syncdial'
config_get_bool enabled 'config' 'enabled'
config_get_bool old_frame 'config' 'old_frame'
[ $enabled -eq 0 ] && {
echo "Disabled.Exit now."
apply_cfg
exit 1
}
config_get wannum 'config' 'wannum'
config_load 'network'
config_get pppoe_user 'wan' 'username'
config_get pppoe_password 'wan' 'password'
pppoe_ifname=$(uci get network.wan.ifname)
}
check_remove_device() {
local devcfg=${1}
[ ${devcfg::11} == 'macvlandev_' ] && uci del network.${devcfg}
}
check_remove_interface() {
local ifcfg=${1}
[ ${ifcfg::4} == 'vwan' ] && {
uci del network.${ifcfg}
mwan_cfg_del ${ifcfg}
}
}
general_config_remove() {
config_load network
config_foreach check_remove_device 'device'
config_foreach check_remove_interface 'interface'
[ $(uci get network.wan.proto) == "none" ] && {
uci set network.wan.proto=pppoe
}
mwan_cfg_del 'wan'
uci set firewall.@zone[1].network="wan wan6"
}
general_config_remove
general_config_load
uci set network.wan.metric=40
[ $old_frame -eq 1 ] && {
uci set network.wan.proto=none
ifname=$(uci get network.wan.ifname)
for i in $(seq 1 $wannum)
do
ip link add link $ifname name macvlan$i type macvlan
ifconfig macvlan$i hw ether $(echo $(cat /sys/class/net/$ifname/address|awk -F ":" '{print $1":"$2":"$3":"$4":"$5":" }')$(echo "" | awk -F ":" '{printf("%X\n", 16+i);}' i=$i))
ifconfig macvlan$i up
done
}
[ $old_frame -eq 0 ] && mwan_cfg_add wan
for i in $(seq 1 $wannum)
do
[ $old_frame -eq 0 ] && macvlan_dev_add macvlan$i $pppoe_ifname
pppoe_if_add vwan$i macvlan$i $pppoe_user $pppoe_password $((40+$i))
mwan_cfg_add vwan$i
done
uci set firewall.@zone[1].network="$fw_str"
apply_cfg
return 0