对基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba、ftp和http)一文的更正2

在《基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba、ftp和http)》一文中对于adsl断线重拨后自动更新路由表的脚本,少了自动平衡双线adsl流量的命令,将导致某条adsl线路断线重后,系统将只能使用一条adsl线路,现对自动更新路由表的autoupdatert脚本内容更正如下:
sudo nano /usr/bin/autoupdatert

#!/bin/bash
#
#This script is auto update route table UC and GD, which already built
tmpstr=".0"
logsct="0"
#
adsL0="ppp0"
#第一个拨号成功的adsl连接,对应网卡enxd3和联通adsl猫
enxd3="enxd3"
#enxd3网卡设备名(使用ifconfig命令查看),对应ppp0和联通猫
IP0=""
#网卡enxd3拨号成功后获取的动态IP
IP_A=""
#网卡enxd3拨号成功后获取的动态IP的临时存放变量
CU_GW=""
#网卡enxd3拨号成功后获取的联通网关的IP
CU_NET=""
#网卡enxd3拨号成功后获取的动态IP所属的网段
#
adsL1="ppp1"
#第二个拨号成功的adsl连接,对应网卡enxd7和广电adsl猫
enxd7="enxd7"
#enxd7网卡的设备名,对应ppp1和广电猫
IP1=""
#网卡enxd7拨号成功后获取的动态IP
IP_B=""
#网卡enxd7拨号成功后获取的动态IP的临时存放变量
GD_GW=""
#网卡enxd7拨号成功后获取的广电网关的IP
GD_NET=""
#网卡enxd7拨号成功后获取的动态IP所属的网段
#
eth1="enp1s0"
#eth1网卡的设备名,对应内网网段LC_NET1
eth2="enxfb"
#eth2网卡的设备名,对应内网网段LC_NET2
LC_NET1="169.254.219.0"
#内网网段1,对应eth1
LC_NET2="169.254.218.0"
#内网网段2,对应eth2
#
while true
#设定循环条件一直成立,程序启动后除非手动kill进程,否则一直运行
do
  if [ -e /run/ppp0.pid ]; then
  #如果ppp0进程号存在,说明存在ppp0这个连接
    IP0=`ifconfig $adsL0 | sed ':a ; N;s/\n/ / ; t a ; ' | awk -v head="inet " -v tail="  net" '{print substr($0, index($0,head)+length(head),index($0,tail)-index($0,head)-length(head))}' | sed s/[[:space:]]//g`
    #通过ifconfig命令获取ppp0拨号成功后获取的动态IP,sed将所有行合并为一行,awk获取指定头尾字符间的字符,sed去除空格
    if [ "$IP_A" = "" ] || [ "$IP_A" != "$IP0" ]; then
    #如果ppp0的动态IP变量为空(第一次循环),或ppp0的动态IP变量值与最新测到的ppp0的动态IP值不一样
      CU_GW=`ifconfig $adsL0 | sed ':a ; N;s/\n/ / ; t a ; ' | awk -v head="tion" -v tail="ppp " '{print substr($0, index($0,head)+length(head),index($0,tail)-index($0,head)-length(head))}' | sed s/[[:space:]]//g`
      #通过ifconfig命令获取ppp0拨号成功后获取的网关IP,sed将所有行合并为一行,awk获取指定头尾字符间的字符,sed去除空格
      CU_NET=${IP0%.*}
      #删除ppp0动态IP最后一个.号及右边的字符
      CU_NET=${CU_NET%.*}
      #删除ppp0动态IP最后一个.号及右边的字符
      CU_NET=$CU_NET$tmpstr$tmpstr
      #补齐.0.0形成ppp0动态IP的所属网段
      ip route flush table CU
      #清空table名为CU的联通路由表
      ip route add $CU_NET dev $adsL0 src $IP0 table CU
      #增加从ppp0的IP到所属网段的路由到路由表CU中
      ip route add default via $CU_GW table CU
      #增加ppp0的连接的ISP网关IP,与上句合起来作用为在CU路由表中设定,如果要从内网到达$CU_NET,需要从网卡ppp0出去
      ip rule add from $IP0 table CU
      #添加策略路由,从ppp0对应的动态IP来的数据包均遵从路由表CU的规定
      ip route add $LC_NET1 dev $eth1 table CU
      #增加本地网段地址1到网卡1的路由,确保从网卡eth1所属的本地网NET1传入的数据包能进入联通路由表
      ip route add $LC_NET2 dev $eth2 table CU
      #增加本地网段地址2到网卡2的路由,确保从网卡eth2所属的本地网NET2传入的数据包能进入联通路由表
      ip route add 127.0.0.0/8 dev lo table CU
      #建立网卡设备的本地回环
      IP_A=$IP0
      #将新的ppp0动态IP赋值给中间变量
      date >> /var/log/autoupdatertlog
      #输出当前时间到日志文件
      echo $adsL0 "flushed to route table CU" >> /var/log/autoupdatertlog
      #输出“刷新新的静态路由到路由表CU”到日志文件中
      if [ -e /run/ppp1.pid ]; then
      #ppp0和ppp1都存在时
        ip route replace default scope global nexthop dev ppp0 weight 70 nexthop dev ppp1 weight 30
        #weight 70和weight 30表示ppp0分担系统流量的70%(联通网络宽带高于广电网络),ppp1分担30%
        #如果都设置为weight 1则表示联通和广电网络各分担系统总流量的50%
        date >> /var/log/autoupdatertlog
        echo "route rules replaced with ppp0 weight 70 and ppp1 weight 30" >> /var/log/autoupdatertlog
      else
        ip route replace default scope global nexthop dev ppp0
        #ppp1不存在而ppp0存在时,设置ppp0承担系统100%的流量
        date >> /var/log/autoupdatertlog
        echo "警告!route rules replaced with only ppp0! 请检查ppp1拨号网络连接!" >> /var/log/autoupdatertlog
      fi
    fi
  fi
#
  if [ -e /run/ppp1.pid ]; then
    IP1=`ifconfig $adsL1 | sed ':a ; N;s/\n/ / ; t a ; ' | awk -v head="inet " -v tail="  net" '{print substr($0, index($0,head)+length(head),index($0,tail)-index($0,head)-length(head))}' | sed s/[[:space:]]//g`
    if [ "$IP_B" = "" ] || [ "$IP_B" != "$IP1" ]; then
      GD_GW=`ifconfig $adsL1 | sed ':a ; N;s/\n/ / ; t a ; ' | awk -v head="tion" -v tail="ppp " '{print substr($0, index($0,head)+length(head),index($0,tail)-index($0,head)-length(head))}' | sed s/[[:space:]]//g`
      GD_NET=${IP1%.*}
      GD_NET=${GD_NET%.*}
      GD_NET=$GD_NET$tmpstr$tmpstr
      ip route flush table GD
      ip route add $GD_NET dev $adsL1 src $IP1 table GD
      ip route add default via $GD_GW table GD
      ip rule add from $IP1 table GD
      ip route add $LC_NET1 dev $eth1 table GD
      ip route add $LC_NET2 dev $eth2 table GD
      ip route add 127.0.0.0/8 dev lo table GD
      IP_B=$IP1
      date >> /var/log/autoupdatertlog
      echo $adsL1 "flushed to route table GD" >> /var/log/autoupdatertlog
      if [ -e /run/ppp0.pid ]; then
      #ppp0和ppp1都存在时
        ip route replace default scope global nexthop dev ppp0 weight 70 nexthop dev ppp1 weight 30
        #weight 70和weight 30表示ppp0分担系统流量的70%(联通网络宽带高于广电网络),ppp1分担30%
        #如果都设置为weight 1则表示联通和广电网络各分担系统总流量的50%
        date >> /var/log/autoupdatertlog
        echo "route rules replaced with ppp0 weight 70 and ppp1 weight 30" >> /var/log/autoupdatertlog
      else
        ip route replace default scope global nexthop dev ppp1
        #ppp1存在而ppp0不存在时,设置ppp1承担系统100%的流量
        date >> /var/log/autoupdatertlog
        echo "警告!route rules replaced with only ppp1! 请检查ppp0拨号网络连接!" >> /var/log/autoupdatertlog
      fi
      ip route flush cache
      #刷新路由表缓存
    fi
  fi
#
  let logsct++
  #日志数量自增1
  if [ "$logsct" -gt 2222 ]; then
  #如果日志数量大于2222
    echo "" > /var/log/autoupdatertlog
    #清空日志文件
    logsct="0"
    #日志数量归零
  fi
  sleep 222
  #每222秒循环一次
done

然后
sudo nano ~/.bashrc
在文件最后加上以下语句,以便在每次登陆终端时看到autoupdatert产生的警告信息:
cat /var/log/autoupdatertlog | awk ‘END {print}’ | sed -n ‘/警告/p’
#读取/usr/bin/autoupdatert程序的日志文件的最后一行,如果有警告内容则在登陆时显示出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值