路由策略配置脚本
‘壹’ 怎么实现双adsl上网并且同时使用2个宽带的流量
.添加网卡
插入网卡,启动机器,修改/etc/moles.conf并加入
alias eth2 driver.o
2.配置adsl拨号
通过adsl-setup程序创建ppp0和ppp1的拨号配置文件,并保存配置。
修改/etc/sysconfig/network-scripts/ifcfg-ppp*文件,将其中的PIDFILE参数设为:
PIDFILE=/var/run/ppp-adsl*.pid
其中*对应0、1等
如果不修改此参数将无法启动第二个ppp接口。
3.启动ppp接口
因为adsl-start 命令缺省只能启动第一的ppp接口。所以要启动两个接口,必须指定配置文件。
adsl-start /etc/sysconfig/network-scripts/ifcfg-ppp0
adsl-start /etc/sysconfig/network-scripts/ifcfg-ppp1
4.添加路由表
缺省情况下,系统只有3个路由表,local、main、default,路由规则为所有进入的数据报都参照main、defaul来决策路由,这可以通过ip rule ls来查看。其输出如下:
[root@linuxrouter root]# ip rule ls
0: from all lookup local
32766: from all lookup main
32767: from all lookup 253
[root@linuxrouter root]#
要实现策略路由,添加额外的路由表是必须的。
下面两条命令分别添加名为ppp0和ppp1的路由表。
echo 201 ppp0 >;>; /etc/iproutes/rt_tables
echo 202 ppp1 >;>; /etc/iproutes/rt_tables
5.创建路由表项
上面创建的两个路由表都是空表,需要在其中注入路由表项。
本人编写了如下脚本用于注入路由表项:
#!/bin/bash
# Name: cprt
# This program the route from $1 route table to $2 route table,
# exclude the default route entry.
if [ -z "$1" -o -z "$2" ]; then
echo $"usage: cprt <source_table>; <dest_table>;"
exit 1
fi
SOURCE=$1
DEST=$2
# Clear the destination route table
echo $"Clearing route table $DEST ......"
echo
/sbin/ip route flush table $DEST
# Inject routes from source to destination
echo $"Injecting route from $SOURCE to $DEST ......"
/sbin/ip route ls table $SOURCE | grep -v default >; /tmp/route-tmp
while read line; do
/sbin/ip route add table $DEST $line
done < "/tmp/route-tmp"
把main表中的路由表项复制到ppp0和ppp1中。
将下面命令加入到/etc/rc.d/rc.local中。
cprt main ppp0
cprt main ppp1
此时,两个路由表中都有相同的路由表项了,除了default路由以外。缺省路由的添加要通过另外的途径添加。当ppp激活,或者掉线时,pppd守护进程会调用/etc/ppp/目录下的ip-up、ip-down脚本,这些教本又分别调用ip-up.local、ip-down.local。在此我们利用这两个脚本来对路由表和流量控制策略进行维护,此脚本需要人工创建。
下面时本例中的脚本:
/etc/ppp/ip-up.local
#!/bin/bash
# Name: ip-up.local
# Created by lyking@CU
# If the if-down is not completed, this script can't be excute.
while [ -e /var/lock/subsys/if-down.$IFNAME ] ; do
sleep 3
done
# Creat a lock file to prevent the if-down from running on my turn
touch /var/lock/subsys/if-up.$IFNAME
# Determin device here
# We should use IFNAME as the interface name.For some reason, the IFNAME maybe not
# same as the LINKNAME. And the route table should associate with the IFNAME. For
# some conveniency, I name the route table as "ppp0" and "ppp1".
RT_TABLE=$IFNAME
# Add or change static route here,including default route.
# Check if a default is exist.
RS=""
ip route ls table $RT_TABLE | grep default
RS=$?
if [ $RS -eq 0 ] ; then
ip route change default dev $IFNAME table $RT_TABLE
else
ip route add default dev $IFNAME table $RT_TABLE
fi
echo >;>; /var/log/ifchang.log
echo "$0: $IFNAME going up at `date`." >;>; /var/log/ifchang.log
echo "$0: $IFNAME got address: $IPLOCAL, peer address is $IPREMOTE." >;>; /var/log/ifchang.log
echo "$0: Table $RT_TABLE default route change to `ip route ls table $RT_TABLE | grep default`." >;>; /var/log/ifchang.log
# Refresh routing cache to activating the routing immediately.
ip route flush cache
# Add traffic control policy here
tc qdisc add dev $IFNAME root handle 1: prio
## This *instantly* creates classes 1:1, 1:2, 1:3
tc qdisc add dev $IFNAME parent 1:1 handle 10 sfq perturb 20
tc qdisc add dev $IFNAME parent 1:2 handle 20 sfq perturb 20
tc qdisc add dev $IFNAME parent 1:3 handle 30 sfq
# Remove the lock file
rm -f /var/lock/subsys/if-up.$IFNAME
/etc/ppp/ip-down.local
#!/bin/bash
# Name: ip-down.local
# Created by lyking@CU
while [ -e /var/lock/subsys/if-up.$IFNAME ] ; do
sleep 3
done
touch /var/lock/subsys/if-down.$IFNAME
cd /etc/sysconfig/network-scripts
. network-functions
# Determin device here
# We should use IFNAME as the interface name.For some reason, the IFNAME maybe not
# same as the LINKNAME. And the route table should associate with the IFNAME. For
# some conveniency, I name the route table as "ppp0" and "ppp1".
RT_TABLE=$IFNAME
# Looking for a valide connection to Internet
DEFAULT_RT=""
PPPS='ppp0 ppp1'
for i in $PPPS ; do
ifconfig | grep $i
RS=$?
if [ $RS -eq 0 ] ; then
DEFAULT_RT=$i
break
fi
done
# Update default route here as nesessary
if [ $DEFAULT_RT != $IFNAME ] ; then
if [ $DEFAULT_RT != "" ] ; then
ip route add default dev $DEFAULT_RT table $RT_TABLE
else
for i in $PPPS ; do
ip route del default dev $i table $i
done
echo >;>; /var/log/ifchang.log
echo "$0: All connection is down, remove all default route from all branch tables" >;>; /var/log/ifchang.log
fi
echo >;>; /var/log/ifchang.log
echo "$0: $IFNAME going down at `date`." >;>; /var/log/ifchang.log
echo "$0: Connection lasted $CONNECT_TIME seconds." >;>; /var/log/ifchang.log
echo "$0: $BYTES_SENT bytes sent, $BYTES_RCVD bytes received." >;>; /var/log/ifchang.log
echo "$0: $DEFAULT_RT is available." >;>; /var/log/ifchang.log
echo "$0: Table $RT_TABLE default route changed to `ip route ls table $RT_TABLE | grep default`. " >;>; /var/log/ifchang.log
fi
# Refresh routing cache to activating the routing immediately.
ip route flush cache
rm -f /var/lock/subsys/if-down.$IFNAME
注意,创建完脚本后必须将其属性改为可执行,否则不会被执行。
6.路由策略的选择
策略路由可以通过源地址、目标地址、ToS或者fwmark标记来进行选择。在此,为了利用iptables的强大的过滤功能采用fwmark标记来决策路由。
在/etc/rc.d/rc.local中添加如下命令:
/sbin/ip rule add fwmark 1 table ppp0
/sbin/ip rule add fwmark 2 table ppp1
7.防火墙规则的添加
这里利用的iptables的强大过滤功能来对流量进行标记。本例中仅根据ip地址的奇偶性来拆分流量,根据具体需求,你还可以根据第4层端口号、ToS等来拆分流量。防火墙需要添加如下命令:
# Divid traffic to different mark
iptables -t mangle -A PREROUTING -s 10.0.0.0/255.255.255.1 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -s 10.0.0.1/255.255.255.1 -j MARK --set-mark 0x2
# NAT
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o ppp1 -j MASQUERADE
至此,双adsl链路的热互备及负载分担基本完成。
下面是一些运行结果
A.ifconfig显示结果
ppp0 Link encap:Point-to-Point Protocol
inet addr:220.163.38.208 P-t-P:220.163.38.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:100295 errors:0 dropped:0 overruns:0 frame:0
TX packets:67817 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:108844271 (103.8 Mb) TX bytes:6073206 (5.7 Mb)
ppp1 Link encap:Point-to-Point Protocol
inet addr:220.163.36.57 P-t-P:220.163.36.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:150583 errors:0 dropped:0 overruns:0 frame:0
TX packets:125136 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:132921157 (126.7 Mb) TX bytes:8749585 (8.3 Mb)
B./var/log/ifchang.log部分内容
/etc/ppp/ip-down.local: ppp0 going down at Tue Aug 10 08:05:45 CST 2004.
/etc/ppp/ip-down.local: Connection lasted 22 seconds.
/etc/ppp/ip-down.local: 30 bytes sent, 30 bytes received.
/etc/ppp/ip-down.local: ppp1 is available.
/etc/ppp/ip-down.local: Table ppp0 default route changed to default dev ppp1 scope link .
/etc/ppp/ip-up.local: ppp0 going up at Tue Aug 10 08:05:53 CST 2004.
/etc/ppp/ip-up.local: ppp0 got address: 61.159.254.30, peer address is 61.159.254.1.
/etc/ppp/ip-up.local: Table ppp0 default route change to default dev ppp0 scope link .
/etc/ppp/ip-down.local: ppp1 going down at Tue Aug 10 08:12:45 CST 2004.
/etc/ppp/ip-down.local: Connection lasted 853 seconds.
/etc/ppp/ip-down.local: 9313 bytes sent, 116181 bytes received.
/etc/ppp/ip-down.local: ppp0 is available.
/etc/ppp/ip-down.local: Table ppp1 default route changed to default dev ppp0 scope link .
/etc/ppp/ip-up.local: ppp1 going up at Tue Aug 10 08:12:53 CST 2004.
/etc/ppp/ip-up.local: ppp1 got address: 220.163.38.20, peer address is 220.163.38.1.
/etc/ppp/ip-up.local: Table ppp1 default route change to default dev ppp1 scope link .[list=][/list][list][/list]
‘贰’ ROS 双线固定IP,相同网关,怎么做负载或者分流!
ROS 电信两条光纤线路固定IP,同网关,负载或分流脚本如下:
1、首先划分VLAN(我们这里是从2开始排序的)
[admin@MikroTik] > :for i from=2 to=41 do= {interface vlan add name=("vlan".$i) vlan-id=$i interface=ether2-wan }
2、然后添加PPPOE拨号(先添加拨号再手动输入 每个AD的帐号和密码,40条AD设置还是要花点时间了),脚本如下:
[admin@MikroTik] > :for i from=2 to=41 do= {interface pppoe-client add name=("pppoe-out".$i) user=$i password=$i interface=("vlan".$i)}
3、我们这里采用PCC的负载均衡,在ip firewall mangle里添加相应的PCC规则,通过一些脚本添加PCC的规则,注意:如果PPPoE客户端拨号没有成功,那么添加的规则则为红色的,拨号成功后自动正常
[admin@MikroTik] > :for i from=2 to=41 do={/ip firewall mangle add chain=input action=mark-connection new-connection-mark=conn1 in-interface=("pppoe-out".$i)}
‘叁’ 双网卡同时上网,为什么有时只能上外网,有时只能上内网,还有的时候同时上两个网
你检查一下你的子网掩码是否设置错了?对于你列出的这种情况,如果掩码设置成 255.255.255.0,那么 192.168.1.xxx和192.168.0.xxx 就是两个不同的网段,它们之间的通信必须通过路由器才能进行访问;如果掩码设置成 255.255.0.0,那么 192.168.1.xxx 和 192.168.0.xxx 就是在相同的网段上,它们之间的通信就不需要经过路由即可。
但是关键要看你在物理上,这两个 IP 地址范围内的机器到底是如何进行连接的?子网掩码可不是随便设置的!
‘肆’ 求助:bow老大写的“双线路策略路由和脚本备份切换”
59.80.0.0/14是指目的地址的网段,有几个就加几条。/是指在根命令行上,双引号里是名字和脚本内容 查看更多答案>>
‘伍’ ROS网通ADSL双线PPPOE拨号设置
网上教程好多,复制粘贴过来也没什么意思
另外ROS只能做到分流,做不到均衡负载
‘陆’ 浅谈angular2路由预加载策略
1.问题描述
在没有使路由懒加载的时候,第一次使用的时候加载特别慢,影响用户体验,angular2可以使用loadChildren进行懒加载,第一次使用的时候只会加载需要的模块,其它模块在真正使用的时候才会去加载,这个时候打开浏览器控制台查看js加载的时候,会发现你在使用时候会去加载对应的js,导致第一次点击相应模块的功能时会卡顿一下,后面在使用就不会了,这样还是用户体验不好,接下来告诉你如果使用预加载策略解决这个问题。
2.预加载策略
RouterMole.forRoot的第二个添加了一个配置选项,这人配置选项中就有一个是preloadingStrategy配置,当然它还有其它配置,这里只讲preloadingStrategy,这个配置是一个预加载策略配置,我们需要实现一个自己的预加载策略,在一些不需要预加载的场景加我们可以不配置,首先我们新建一个selective-preloading-strategy.ts的文件,使用class实现PreloadingStrategy接口的preload方法,代码如下:
import
{
PreloadingStrategy,
Route
}
from
"@angular/router";
import
{
Observable
}
from
"rxjs";
/**
*
预加载策略
*/
export
class
SelectivePreloadingStrategy
implements
PreloadingStrategy
{
preload(route:
Route,
load:
Function):
Observable<any>
{
//当路由中配置data:
{preload:
true}时预加载
return
route.data
&&
route.data
&&
route.data['preload']
?
load()
:
Observable.of(null);
}
}
上面的意思很简单,当你在路由中配置了data:
{preload:
true}参数后,这里面的策略就返回一个load(),表示需要预加载,如果没有配置就不进行预加载,当然你也可以反过来,默认是预加载,只在配置不需要预加载的时候不加载,就像我的github上的一样,自己灵活运用。
接下来,在在路由中加入策略,也就是RouterMole.forRoot中的配置,代码如下:
import
{
NgMole
}
from
'@angular/core';
import
{
RouterMole,
Routes
}
from
'@angular/router';
import
{SelectivePreloadingStrategy}
from
"./selective-preloading-strategy";
import
{
LoginComponent
}
from
'./login/login.component';
import
{
MainComponent
}
from
'./main/main.component';
/**
*
app路由
*/
const
routes:
Routes
=
[
{
path:
'',
redirectTo:
'/login',
pathMatch:
'full'
},
{
path:
'login',
component:
LoginComponent
},
{
path:
'app',
component:
MainComponent,
loadChildren:
'app/main/main.mole#MainMole',
data:
{preload:
true}
}
];
export
const
appRoutes=RouterMole.forRoot(routes,{preloadingStrategy:
SelectivePreloadingStrategy});
还需要在AppMole的providers添加,代码如下:
/**
*
app模块
*/
@NgMole({
imports:
[
appRoutes,
BrowserMole,
BrowserAnimationsMole,
NgbMole.forRoot(),
MainMole,
LoginMole
],
declarations:
[
AppComponent,
ToastBoxComponent,
ToastComponent,
SpinComponent
],
providers:
[AppService,ToastService,HttpService,SpinService,SelectivePreloadingStrategy],
exports:[ToastBoxComponent,SpinComponent],
bootstrap:
[
AppComponent
]
})
export
class
AppMole
{}
接下来在路由中使用,代码如下:
import
{
NgMole,
OnInit
}
from
'@angular/core';
import
{
RouterMole,
Routes,
Router
}
from
'@angular/router';
/**
*
主体路由
*/
const
routes:
Routes
=
[
{
path:
'home',
loadChildren:
'app/home/home.mole#HomeMole',
data:
{preload:
true}
},
{
path:
'demo',
loadChildren:
'app/demo/demo.mole#DemoMole',
data:
{preload:
true}
},
];
export
const
mainRoutes
=
RouterMole.forChild(routes);
打开浏览器F12,查看js的加载,你会发现,当页面加载完后,会预加载其它模块的js
官网上有一个默认实现PreloadAllMoles
,自行参考官网说明。
具体代码到我的github上找,https://github.com/332557712/cc
。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
‘柒’ 如何让pptp连接后自动添加策略路由
win7上用bat脚本自动连接pptp vpn并添加路由 (2011-11-01 10:50:00)转载▼
标签: 杂谈 分类: 脚本
使用默认连接pptp vpn会将本地网络的路由改变,所有的数据包都经过vpn出去,如果想只有去vpn网络的数据走vpn,其他的还走原来的网关,那样就要每次都手动添加路由,比较麻烦。
使用一下bat脚本可以轻松实现一键拨号并添加路由
1、创建一个pptp的vpn拨号连接(这个应该都会,此处略过)
2、右键刚建好的一个连接--属性--网络--Internet协议版本4--属性--高级,将IP设置里的“在远程网络上使用默认网关”的勾掉。
3、创建一个文本文件,将扩展名改为bat,然后编辑它,如下:
@echo off
rasdial 你刚才创建的vpn连接名 用户名 密码
for /f "tokens=16" %%i in ('ipconfig ^| find /i "10.0.0."') do set ip=%%i
route add 192.168.5.0 mask 255.255.255.0 %ip%
pause
红色字体部分特别说明,根据实际情况修改:
1、第三行的红色部分“10.0.0.”,是你vpn连接成功后获得的IP地址,只写前三位就行了,如果不知道就先手动连接一次,然后去查看自己获得的IP。
2、第四行就是你vpn对端的网络的网段和掩码,根据实际情况修改下就OK了。
完成后直接双击bat脚本就可以连接了。
‘捌’ 利用 vbs 脚本实现静态路由备份策略
说具体点?