#!/bin/sh
###多拨数
vwnum=5
###最低在线
mindial=2
###宽带帐号密码
username=xxxxxx
password=xxxxxx
###DNS测试多拨是否成功
dns1='114.114.114.114'
dns2='114.114.115.115'
###安装完毕后重启倒计时(秒)
wreboot=10
###安装多拨
opkg update
if ! opkg install kmod-macvlan luci-app-mwan3 ; then
echo "Failed to install mwan3!"
exit 1
fi
###配置网络
for i in $(seq 1 $vwnum)
do
uci set network.vwan${i}=interface
uci set network.vwan${i}.proto=pppoe
uci set network.vwan${i}.ifname=macvlan$((${i}-1))
uci set network.vwan${i}.username=$username
uci set network.vwan${i}.password=$password
# uci set network.vwan${i}.ipv6='0'
uci set network.vwan${i}.metric=$((${i}+10))
done
uci commit network
###配置防火墙
for i in $(seq 1 $vwnum)
do
uci add_list firewall.@zone[1].network=vwan${i}
done
uci commit firewall
###配置脚本
mkdir /etc/ppp/ip-up.d ; chmod 755 /etc/ppp/ip-up.d
mkdir /etc/ppp/ip-down.d ; chmod 755 /etc/ppp/ip-down.d
touch /etc/ppp/ip-up.d/ip-up ; chmod 755 /etc/ppp/ip-up.d/ip-up
touch /etc/ppp/ip-down.d/ip-down ; chmod 755 /etc/ppp/ip-down.d/ip-down
###脚本/etc/hotplug.d/iface/01-macvlan
cat > /etc/hotplug.d/iface/01-macvlan<<-EOF
#!/bin/sh
if [ \$(ip l|grep macvlan|wc -l) -lt $vwnum ]
then
fi
EOF
for i in $(seq 1 $vwnum)
do
sed -i '/then/aip l add l eth0.2 type macvlan' /etc/hotplug.d/iface/01-macvlan
done
###配置脚本/etc/ppp/ip-up.d/ip-up,增加锁进程并在成功拨上后停止未拨上的端口
cat > /etc/ppp/ip-up.d/ip-up<<-EOF
#!/bin/sh
LOCKFILE="/tmp/ip-up.tmp"
trap 'echo "rm lockfile!";rm -f \${LOCKFILE}; exit' 1 2 3 9 15
if [ -f \$LOCKFILE ]
then
echo "Instance is running!"
exit 0
else
touch \$LOCKFILE
chmod 600 \$LOCKFILE
echo "touch successeed!"
if [ \$(ip a|grep peer|wc -l) -lt $mindial ]
then
killall -9 pppd
else
sleep 30
EOF
for i in $(seq 1 $vwnum)
do
echo "pgrep -fl mwan3track |grep -q 'vwan${i}' && echo 'vwan${i} is online' || ifdown vwan${i}" >> /etc/ppp/ip-up.d/ip-up
done
cat >> /etc/ppp/ip-up.d/ip-up<<-EOF
fi
echo "finish!"
fi
rm -f \${LOCKFILE}
EOF
###配置脚本/etc/ppp/ip-down.d/ip-down
cat > /etc/ppp/ip-down.d/ip-down<<-EOF
#!/bin/sh
if [ \$(ip a|grep peer|wc -l) -lt $mindial ]
then
killall -9 pppd
fi
EOF
###删除默认配置
uci delete mwan3.wan
uci delete mwan3.wan2
uci delete mwan3.wan_m1_w3
uci delete mwan3.wan_m2_w3
uci delete mwan3.wan2_m1_w2
uci delete mwan3.wan2_m2_w2
uci delete mwan3.wan_only
uci delete mwan3.wan2_only
uci delete mwan3.wan_wan2
uci delete mwan3.wan2_wan
uci delete mwan3.balanced
uci delete mwan3.https
uci delete mwan3.default_rule
###设置多拨
for i in $(seq 1 $vwnum)
do
uci set mwan3.vwan${i}=interface
uci set mwan3.vwan${i}.enabled='1'
uci add_list mwan3.vwan${i}.track_ip=$dns1
uci add_list mwan3.vwan${i}.track_ip=$dns2
uci set mwan3.vwan${i}.reliability='1'
uci set mwan3.vwan${i}.count='1'
uci set mwan3.vwan${i}.timeout='2'
uci set mwan3.vwan${i}.interval='5'
uci set mwan3.vwan${i}.down='3'
uci set mwan3.vwan${i}.up='3'
done
for i in $(seq 1 $vwnum)
do
uci set mwan3.vwan${i}_m1_w1=member
uci set mwan3.vwan${i}_m1_w1.interface=vwan${i}
done
uci set mwan3.balanced=policy
for i in $(seq 1 $vwnum)
do
uci add_list mwan3.balanced.use_member=vwan${i}_m1_w1
done
uci set mwan3.https=rule
uci set mwan3.https.sticky='1'
uci set mwan3.https.dest_port='443'
uci set mwan3.https.proto='tcp'
uci set mwan3.https.use_policy='balanced'
uci set mwan3.default_rule=rule
uci set mwan3.default_rule.dest_ip='0.0.0.0/0'
uci set mwan3.default_rule.use_policy='balanced'
uci commit mwan3
###重启路由
echo "mwan3 installed and wait for reboot router!"
for i in $(seq 1 $wreboot)
do
echo "reboot router after $(($wreboot-$i)) seconds!"
sleep 1
done
reboot