linux单网卡多拨Adsl,秋明 | 边缘计算-使用多adsl账号做捆绑上网[单网卡多账号多拨]...

出发点:在linux电脑上面绑定多条adsl链路做家庭带宽及个人DC使用:

0、账号文件:adsl.user【账号 密码】

adsluser1 adslpasswd1

adsluser2 adslpasswd2

adsluser3 adslpasswd3

adsluser4 adslpasswd4

……

1

2

3

4

5

adsluser1adslpasswd1

adsluser2adslpasswd2

adsluser3adslpasswd3

adsluser4adslpasswd4

……

管理网卡策略路由:

vi /etc/iproute2/rt_tables

……

252manage

……

1

2

3

……

252manage

……

下面两条策略放到/etc/rc.local中,并手动执行一遍:

ip route add default via 10.255.255.1 table manage

ip rule add from 10.255.255.0/25 table manage

升级网卡驱动:[注意内核要和内核的头文件版本号完全一致]

https://downloadmirror.intel.com/14687/eng/ixgbe-5.7.1.tar.gz

yum install -y gcc rpm-build kernel-devel

rpmbuild -tb ixgbe-5.7.1.tar.gz

rpm -Uvh /root/rpmbuild/RPMS/x86_64/ixgbe-5.7.1-1.x86_64.rpm

1、拨号建立脚本:0-adsl.sh

#!/bin/bash

#------------------------------------------------------------------------|

# @Version : 1.1.0 |

# @Writer : Tyumen |

# @Date : 2020-06-09 |

#------------------------------------------------------------------------|

adsluserlist=$1

dev=$2

function ShowUsage()

{

echo -e '\033[32;1mUsage: '$0 'adslfile netdev(like p5p1) \033[0m'

echo

exit 1

}

function CheckPPPOE()

{

( rpm -q rp-pppoe > /dev/null || yum install rp-pppoe -y ) && ( exit 0 ) || ( exit 1 )

}

function adduser()

{

adsluser=$1

adslpwd=$2

num=$3

echo "$adsluser * $adslpwd " >> /etc/ppp/chap-secrets

echo "$adsluser * $adslpwd " >> /etc/ppp/pap-secrets

ip link add link $dev dev adsl$num type macvlan mode private

cat > /etc/sysconfig/network-scripts/ifcfg-ppp$num <

USERCTL=yes

BOOTPROTO=dialup

NAME=DSLppp$num

DEVICE=ppp$num

TYPE=xDSL

ONBOOT=yes

PIDFILE=/var/run/pppoe-adsl$num.pid

FIREWALL=NONE

PING=.

PPPOE_TIMEOUT=80

LCP_FAILURE=3 LCP_INTERVAL=20

CLAMPMSS=1412

CONNECT_POLL=6

CONNECT_TIMEOUT=60

DEFROUTE=yes

SYNCHRONOUS=no

ETH=adsl$num

PROVIDER=DSLppp$num

USER=$adsluser

PEERDNS=no

DEMAND=no

LINUX_PLUGIN=/usr/lib64/pppd/2.4.5/rp-pppoe.so

EOF

grep "ppp"$num /etc/iproute2/rt_tables > /dev/null || echo "1"$num" ppp"$num >> /etc/iproute2/rt_tables

grep "ppp"$num /etc/rc.local > /dev/null || ( echo "ip route add 0/0 dev ppp"$num" table ppp"$num >> /etc/rc.local && ip route add 0/0 dev ppp$num table ppp$num)

ifup ppp$num

}

function AddadslUser()

{

adslfile=$1

num=0

cat $adslfile|while read adsluser adslpwd

do

modprobe macvlan

if [ "$adslpwd" != "" ];then

( ( grep $adsluser /etc/ppp/chap-secrets|grep $adslpwd > /dev/null ) && ( grep $adsluser /etc/ppp/pap-secrets|grep $adslpwd > /dev/null ) ) && (echo "user $adsluser has already exit." ) || ( adduser $adsluser $adslpwd $num ; let num++)

let num++

fi

done

}

if [ $# -ne 2 ]

then

ShowUsage

else

if [ -f $adsluserlist ];then

CheckPPPOE && AddadslUser $adsluserlist

fi

fi

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

#!/bin/bash

#------------------------------------------------------------------------|

#   @Version   : 1.1.0                                                   |

#   @Writer    : Tyumen                           |

#   @Date      : 2020-06-09                                              |

#------------------------------------------------------------------------|

adsluserlist=$1

dev=$2

functionShowUsage()

{

echo-e'\033[32;1mUsage: '$0'adslfile netdev(like p5p1) \033[0m'

echo

exit1

}

functionCheckPPPOE()

{

(rpm-qrp-pppoe>/dev/null||yuminstallrp-pppoe-y)&&(exit0)||(exit1)

}

functionadduser()

{

adsluser=$1

adslpwd=$2

num=$3

echo"$adsluser * $adslpwd ">>/etc/ppp/chap-secrets

echo"$adsluser * $adslpwd ">>/etc/ppp/pap-secrets

iplinkaddlink$devdevadsl$numtypemacvlanmodeprivate

cat>/etc/sysconfig/network-scripts/ifcfg-ppp$num<

USERCTL=yes

BOOTPROTO=dialup

NAME=DSLppp$num

DEVICE=ppp$num

TYPE=xDSL

ONBOOT=yes

PIDFILE=/var/run/pppoe-adsl$num.pid

FIREWALL=NONE

PING=.

PPPOE_TIMEOUT=80

LCP_FAILURE=3LCP_INTERVAL=20

CLAMPMSS=1412

CONNECT_POLL=6

CONNECT_TIMEOUT=60

DEFROUTE=yes

SYNCHRONOUS=no

ETH=adsl$num

PROVIDER=DSLppp$num

USER=$adsluser

PEERDNS=no

DEMAND=no

LINUX_PLUGIN=/usr/lib64/pppd/2.4.5/rp-pppoe.so

EOF

grep"ppp"$num/etc/iproute2/rt_tables>/dev/null||echo"1"$num" ppp"$num>>/etc/iproute2/rt_tables

grep"ppp"$num/etc/rc.local>/dev/null||(echo"ip route add 0/0 dev ppp"$num" table ppp"$num>>/etc/rc.local&&iprouteadd0/0devppp$numtableppp$num)

ifupppp$num

}

functionAddadslUser()

{

adslfile=$1

num=0

cat$adslfile|whilereadadsluseradslpwd

do

modprobemacvlan

if["$adslpwd"!=""];then

((grep$adsluser/etc/ppp/chap-secrets|grep$adslpwd>/dev/null)&&(grep$adsluser/etc/ppp/pap-secrets|grep$adslpwd>/dev/null))&&(echo"user $adsluser has already exit.")||(adduser$adsluser$adslpwd$num;letnum++)

letnum++

fi

done

}

if[$# -ne 2 ]

then

ShowUsage

else

if[-f$adsluserlist];then

CheckPPPOE&&AddadslUser$adsluserlist

fi

fi

sh /root/adsl/0-adsl.sh /root/adsl/adsl.user p5p1

2、拨号启动脚本:1-iprule.sh

#!/bin/bash

beginnum=0

#endnum=17

endnum=`ls /etc/sysconfig/network-scripts/ifcfg-ppp*|wc -l`

let endnum=endnum-1

function upnet()

{

begnum=$1

endnum=$2

for num in `seq $beginnum $endnum`

do

ifup ppp$num

done

}

function addrule()

{

begnum=$1

endnum=$2

for num in `seq $beginnum $endnum`

do

rulenum=`ip rule | awk '$NF~"^ppp'$num'$"'|wc -l`

while [ $rulenum -gt 0 ] ;do ip rule del lookup ppp$num;let rulenum--;done

#route add default dev ppp$num

ip route add 0/0 dev ppp$num table ppp$num

ip rule add fwmark 0x1$num table ppp$num pref 100

ipaddr=`ifconfig ppp$num|awk '$1~"inet" && $2~"^[0-9]"{print $2 }'`

if [ "$ipaddr" != "" ]

then

ip rule add from $ipaddr table ppp$num pref 200

fi

done

}

function addiptable()

{

begnum=$1

endnum=$2

rpm -q iptables > /dev/null || yum install iptables -y

for num in `seq $beginnum $endnum`

do

iptablenum=`iptables -t mangle -L -n|awk '$1~"MARK" && $NF~"^0x1'$num'$"'|wc -l`

while [ $iptablenum -gt 0 ] ; do iptables -t mangle -D INPUT -i ppp$num -m state --state NEW -j MARK --set-mark 0x1$num ; let iptablenum--;done

iptables -t mangle -A INPUT -i ppp$num -m state --state NEW -j MARK --set-mark 0x1$num

done

}

upnet $beginnum $endnum

addrule $beginnum $endnum

addiptable $beginnum $endnum

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

#!/bin/bash

beginnum=0

#endnum=17

endnum=`ls/etc/sysconfig/network-scripts/ifcfg-ppp*|wc-l`

letendnum=endnum-1

functionupnet()

{

begnum=$1

endnum=$2

fornumin`seq$beginnum$endnum`

do

ifupppp$num

done

}

functionaddrule()

{

begnum=$1

endnum=$2

fornumin`seq$beginnum$endnum`

do

rulenum=`iprule|awk'$NF~"^ppp'$num'$"'|wc-l`

while[$rulenum-gt0];doipruledellookupppp$num;letrulenum--;done

#route add default dev ppp$num

iprouteadd0/0devppp$numtableppp$num

ipruleaddfwmark0x1$numtableppp$numpref100

ipaddr=`ifconfigppp$num|awk'$1~"inet" && $2~"^[0-9]"{print $2 }'`

if["$ipaddr"!=""]

then

ipruleaddfrom$ipaddrtableppp$numpref200

fi

done

}

functionaddiptable()

{

begnum=$1

endnum=$2

rpm-qiptables>/dev/null||yuminstalliptables-y

fornumin`seq$beginnum$endnum`

do

iptablenum=`iptables-tmangle-L-n|awk'$1~"MARK" && $NF~"^0x1'$num'$"'|wc-l`

while[$iptablenum-gt0];doiptables-tmangle-DINPUT-ippp$num-mstate--stateNEW-jMARK--set-mark0x1$num;letiptablenum--;done

iptables-tmangle-AINPUT-ippp$num-mstate--stateNEW-jMARK--set-mark0x1$num

done

}

upnet$beginnum$endnum

addrule$beginnum$endnum

addiptable$beginnum$endnum

sh /root/adsl/1-iprule.sh

3、进程检查脚本:/root/adsl/2-adslcheck.sh【adsl出现down掉之后需要进行重启】

#!/bin/bash

beginnum=0

endnum=`ls /etc/sysconfig/network-scripts/ifcfg-ppp*|wc -l`

let endnum=endnum-1

PATH="/sbin:/usr/sbin:/bin:/usr/bin"

export PATH

function UPppp()

{

num=$1

ifup ppp$num

rulenum=`ip rule | awk '$NF~"^ppp'$num'$"'|wc -l`

while [ "$rulenum" -gt "0" ] ;do ip rule del lookup ppp$num;let rulenum--;done

ip route add 0/0 dev ppp$num table ppp$num

ip rule add fwmark 0x1$num table ppp$num pref 100

ipaddr=`ifconfig ppp$num|awk '$1~"inet" && $2~"^[0-9]"{print $2}'`

if [ "$ipaddr" != "" ]

then

ip rule add from $ipaddr table ppp$num pref 200

fi

iptablenum=`iptables -t mangle -L -n|awk '$1~"MARK" && $NF~"^0x1'$num'$"'|wc -l`

while [ $iptablenum -gt 0 ] ; do iptables -t mangle -D INPUT -i ppp$num -m state --state NEW -j MARK --set-mark 0x1$num ; let iptablenum--;done

iptables -t mangle -A INPUT -i ppp$num -m state --state NEW -j MARK --set-mark 0x1$num

}

function checkadsl()

{

begnum=$1

endnum=$2

for num in `seq $beginnum $endnum`

do

ipaddr=`ifconfig ppp$num|awk '$1~"inet" && $2~"^[0-9]"{print $2}'`

if [ "$ipaddr" != "" ]

then

routenum=`ip route show table ppp$num|wc -l`

if [ "$routenum" == "0" ]

then

rulenum=`ip rule | awk '$NF~"^ppp'$num'$"'|wc -l`

while [ "$rulenum" -gt "0" ] ;do ip rule del lookup ppp$num;let rulenum--;done

ip route add 0/0 dev ppp$num table ppp$num

ip rule add fwmark 0x1$num table ppp$num pref 100

ipaddr=`ifconfig ppp$num|awk '$1~"inet" && $2~"^[0-9]"{print $2 }'`

if [ "$ipaddr" != "" ]

then

ip rule add from $ipaddr table ppp$num pref 200

fi

iptablenum=`iptables -t mangle -L -n|awk '$1~"MARK" && $NF~"^0x1'$num'$"'|wc -l`

while [ "$iptablenum" -gt 0 ] ; do iptables -t mangle -D INPUT -i ppp$num -m state --state NEW -j MARK --set-mark 0x1$num ; let iptablenum--;done

iptables -t mangle -A INPUT -i ppp$num -m state --state NEW -j MARK --set-mark 0x1$num

fi

else

UPppp $num

fi

done

}

function checkroute()

{

for net in `ip a|awk -F"[ :]+" '$2~"^ppp"{print $2}'`

do

pingsucess=`ping 114.114.114.114 -I $net -c 10 -f|awk '$5~"received"{print $4}'`

if [ "$pingsucess" == "0" ];then

ip route add 0/0 dev $net table $net

fi

done

}

checkadsl $beginnum $endnum

#checkroute

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

#!/bin/bash

beginnum=0

endnum=`ls/etc/sysconfig/network-scripts/ifcfg-ppp*|wc-l`

letendnum=endnum-1

PATH="/sbin:/usr/sbin:/bin:/usr/bin"

exportPATH

functionUPppp()

{

num=$1

ifupppp$num

rulenum=`iprule|awk'$NF~"^ppp'$num'$"'|wc-l`

while["$rulenum"-gt"0"];doipruledellookupppp$num;letrulenum--;done

iprouteadd0/0devppp$numtableppp$num

ipruleaddfwmark0x1$numtableppp$numpref100

ipaddr=`ifconfigppp$num|awk'$1~"inet" && $2~"^[0-9]"{print $2}'`

if["$ipaddr"!=""]

then

ipruleaddfrom$ipaddrtableppp$numpref200

fi

iptablenum=`iptables-tmangle-L-n|awk'$1~"MARK" && $NF~"^0x1'$num'$"'|wc-l`

while[$iptablenum-gt0];doiptables-tmangle-DINPUT-ippp$num-mstate--stateNEW-jMARK--set-mark0x1$num;letiptablenum--;done

iptables-tmangle-AINPUT-ippp$num-mstate--stateNEW-jMARK--set-mark0x1$num

}

functioncheckadsl()

{

begnum=$1

endnum=$2

fornumin`seq$beginnum$endnum`

do

ipaddr=`ifconfigppp$num|awk'$1~"inet" && $2~"^[0-9]"{print $2}'`

if["$ipaddr"!=""]

then

routenum=`iprouteshowtableppp$num|wc-l`

if["$routenum"=="0"]

then

rulenum=`iprule|awk'$NF~"^ppp'$num'$"'|wc-l`

while["$rulenum"-gt"0"];doipruledellookupppp$num;letrulenum--;done

iprouteadd0/0devppp$numtableppp$num

ipruleaddfwmark0x1$numtableppp$numpref100

ipaddr=`ifconfigppp$num|awk'$1~"inet" && $2~"^[0-9]"{print $2 }'`

if["$ipaddr"!=""]

then

ipruleaddfrom$ipaddrtableppp$numpref200

fi

iptablenum=`iptables-tmangle-L-n|awk'$1~"MARK" && $NF~"^0x1'$num'$"'|wc-l`

while["$iptablenum"-gt0];doiptables-tmangle-DINPUT-ippp$num-mstate--stateNEW-jMARK--set-mark0x1$num;letiptablenum--;done

iptables-tmangle-AINPUT-ippp$num-mstate--stateNEW-jMARK--set-mark0x1$num

fi

else

UPppp$num

fi

done

}

functioncheckroute()

{

fornetin`ipa|awk-F"[ :]+"'$2~"^ppp"{print $2}'`

do

pingsucess=`ping114.114.114.114-I$net-c10-f|awk'$5~"received"{print $4}'`

if["$pingsucess"=="0"];then

iprouteadd0/0dev$nettable$net

fi

done

}

checkadsl$beginnum$endnum

#checkroute

chmod +x /root/adsl/2-adslcheck.sh

echo “*/10 * * * * root /root/adsl/2-adslcheck.sh > /dev/null 2>&1″ > /etc/cron.d/adslcheck

4、adsl定期重启

定期重启脚本:3-restartadsl.sh,防止在晚高峰的时候网络掉线

#!/bin/bash

beginnum=0

endnum=`ls /etc/sysconfig/network-scripts/ifcfg-ppp*|wc -l`

let endnum=endnum-1

function UPppp()

{

num=$1

ifup ppp$num

sleep 5

rulenum=`ip rule | awk '$NF~"^ppp'$num'$"'|wc -l`

while [ "$rulenum" -gt "0" ] ;do ip rule del lookup ppp$num;let rulenum--;done

ip route add 0/0 dev ppp$num table ppp$num

ip rule add fwmark 0x1$num table ppp$num pref 100

ipaddr=`ifconfig ppp$num|awk '$1~"inet" && $2~"^[0-9]"{print $2}'`

if [ "$ipaddr" != "" ]

then

ip rule add from $ipaddr table ppp$num pref 200

fi

iptablenum=`iptables -t mangle -L -n|awk '$1~"MARK" && $NF~"^0x1'$num'$"'|wc -l`

while [ "$iptablenum" -gt "0" ] ; do iptables -t mangle -D INPUT -i ppp$num -m state --state NEW -j MARK --set-mark 0x1$num ; let iptablenum--;done

iptables -t mangle -A INPUT -i ppp$num -m state --state NEW -j MARK --set-mark 0x1$num

}

function restartadsl()

{

begnum=$1

endnum=$2

for num in `seq $beginnum $endnum`

do

ifdown ppp$num

done

sleep 5

for num in `seq $beginnum $endnum`

do

UPppp $num

done

}

restartadsl $beginnum $endnum

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

#!/bin/bash

beginnum=0

endnum=`ls/etc/sysconfig/network-scripts/ifcfg-ppp*|wc-l`

letendnum=endnum-1

functionUPppp()

{

num=$1

ifupppp$num

sleep5

rulenum=`iprule|awk'$NF~"^ppp'$num'$"'|wc-l`

while["$rulenum"-gt"0"];doipruledellookupppp$num;letrulenum--;done

iprouteadd0/0devppp$numtableppp$num

ipruleaddfwmark0x1$numtableppp$numpref100

ipaddr=`ifconfigppp$num|awk'$1~"inet" && $2~"^[0-9]"{print $2}'`

if["$ipaddr"!=""]

then

ipruleaddfrom$ipaddrtableppp$numpref200

fi

iptablenum=`iptables-tmangle-L-n|awk'$1~"MARK" && $NF~"^0x1'$num'$"'|wc-l`

while["$iptablenum"-gt"0"];doiptables-tmangle-DINPUT-ippp$num-mstate--stateNEW-jMARK--set-mark0x1$num;letiptablenum--;done

iptables-tmangle-AINPUT-ippp$num-mstate--stateNEW-jMARK--set-mark0x1$num

}

functionrestartadsl()

{

begnum=$1

endnum=$2

fornumin`seq$beginnum$endnum`

do

ifdownppp$num

done

sleep5

fornumin`seq$beginnum$endnum`

do

UPppp$num

done

}

restartadsl$beginnum$endnum

echo “0 6 */3 * * root /root/adsl/3-restartadsl.sh > /dev/null 2>&1″ > /etc/cron.d/adslrestart

5、做随机启动配置:添加网卡脚本addnet.sh

#!/bin/bash

adslfile=$1

dev=$2

num=0

function ShowUsage()

{

echo -e '\033[32;1mUsage: '$0 'adslfile netdev(like p5p1) \033[0m'

echo

exit 1

}

function addnet()

{

adslfile=$1

cat $adslfile|while read adsluser adslpasswd vlanid other

do

ip link add link $dev dev adsl$num type macvlan mode private

let num++

done

}

if [ $# -ne 2 ]

then

ShowUsage

else

if [ -f $adslfile ];then

addnet $adslfile

fi

fi

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

#!/bin/bash

adslfile=$1

dev=$2

num=0

functionShowUsage()

{

echo-e'\033[32;1mUsage: '$0'adslfile netdev(like p5p1) \033[0m'

echo

exit1

}

functionaddnet()

{

adslfile=$1

cat$adslfile|whilereadadsluseradslpasswdvlanidother

do

iplinkaddlink$devdevadsl$numtypemacvlanmodeprivate

letnum++

done

}

if[$# -ne 2 ]

then

ShowUsage

else

if[-f$adslfile];then

addnet$adslfile

fi

fi

在/etc/rc.local里面添加如下内容:

……

ip route add default via 10.255.255.1 table manage

ip rule add from 10.255.255.0/25 table manage

/root/adsl/addnet.sh /root/adsl/adsl.user p5p1

/root/adsl/1-iprule.sh

……

1

2

3

4

5

6

……

iprouteadddefaultvia10.255.255.1tablemanage

ipruleaddfrom10.255.255.0/25tablemanage

/root/adsl/addnet.sh/root/adsl/adsl.userp5p1

/root/adsl/1-iprule.sh

……

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值