我是网通的,在出租屋里和别人共用网络一个网。我们...

出租屋里共用网线被人攻击怎么解决?
出租屋里共用网线被人攻击怎么解决?
在出租房跟很多人共用房东的网线3M,网速本来就不是很好,就一些那么缺德的人使手段来攻击别人,我也受到了攻击,想找个电脑高手师傅教教我,我是一个电脑新手。请留下QQ。谢谢!
不区分大小写匿名
为什么要攻击别人呢?做好自己的防护是最好的。
不知道你说的攻击具体是怎样的.但局域网里最广泛存在的攻击就是ARP地址欺骗,结果会导致局域网里的其它机器上网速度越来越慢,直到集体掉线。对ARP攻击的解决,简单一点的可以装个360安全卫士,在“实时保护”里开启“ARP防火墙”。
案例之一:武汉某酒店,那天我去酒店住宿,因为酒店经理跟我是哥们,问我他办公室的网速有问题,打开见页还好,就是下载东西超慢,隔壁办公室都是400K左右,到他那却只有几十KB,我开始以为可能是交换机端口的问题,但换了端口问题还是一样。于是想到ARP攻击,开启了360ARP防火墙,结果下载速度马上就起来了,ARP防火墙的记录证明,局域网存在大量ARP攻击。
所以,你不妨试试!
把你的IP地址也MAC地址绑定就可以了~
用命令ARP -S
不妨下个P2PoverA软件试试,挺好用的!
等待您来回答
通信网络领域专家您还未登陆,请登录后操作!
悬赏20爱心点
分享到微博
网络总是莫名其妙的断线
本人使用北京网通线路,和其他三人共用一个路由器,前些日子很正常,但是最近问题就出来了
总是莫名其妙的断线,但是断线的时候右下角不显示&网络已断开,请检查网线是否插好&的提示,百度打不开,QQ上不去,凡是和网络有关的东西都做不了。奇怪的是,不一定什么时候它又好了
路由器不在我的房间,好像别人没有出现断线的情况,为此和邻居关系也弄的很僵了。。
还有,断线的时候如果禁用而后启用网络连接的瞬间,貌似有那么一秒左右能上网,但是瞬间就断开了
电脑重装过系统,杀过毒,也是不好使,求高人指点迷津!
应该不是物理线路断线,而是有人用了相关P2P软件限制网速,然后他电脑的ARP包发得太多,会造成网络阻塞。
回答数:10您所在的位置: &
解剖网络尖兵:运营商封杀ADSL共享的罪魁祸首(2)
解剖网络尖兵:运营商封杀ADSL共享的罪魁祸首(2)
走进中关村
到底一个ADSL账号能有几个人上网?这个问题运营商和用户的态度截然相反。但是,运营商是如何发现发现用户共享账号的呢?原来,他们使用了一种名为NetSniper的网络设备,其中文名称是“网络尖兵”……
网络爆发,攻防大战
虽然对其工作原理是众说纷纭,但网友对网络尖兵大多持抵制态度,虽然厂商宣称,作为一种检测设备,网络尖兵以数据接收为主,不发送数据,所以对带宽占用量几乎为零。但还是有不少人在网上抢着批评网络尖兵的弊端。
最大的罪状自然是限制了网络自由,不能让用户与他人共享上网。如果你长期和亲朋好友、邻居一起组网共用ADSL线路,会被网络服务商发现并警告。
其不停扫描用户打开的端口数,多于设定值的就判断是共享,有时连按几次F5键它是认为是共享,连单用户上网也受到了影响。
其不停扫描影响网速,造成浏览网页经常要刷新几次;但某些网页比较复杂,要调用几个服务器文件时它也当你是共享,部分页面不能正常显示。
既然已经成了网民的眼中钉,网络上自然少不了人要研究如何打败网络尖兵,冲破封锁。
将所有共享的客户机均要安装防火墙,把安全的级别设为最高。把IP配置规则里面所有的允许别人访问本机规则统统取消。如果使用WinXP,也可以直接打开网卡设置中的防火墙。
在ADSL Moden中关闭SNMP协议;如果无法修改这种协议,只好换一个能更改设置的猫。
共享上网中的主机安装WIN2000服务器版,然后禁掉161端口或在防火墙上禁掉161的端口。
方法还有很多,在网上还有不少的网友在继续热烈讨论这个问题。道高一尺,魔高一丈,可以说一场针对网络尖兵的网上攻防战已经悄然展开。
矛盾重重,履霜坚冰
网络尖兵对服务商来说是忠于职守了,但在网民看来却仿佛成了心头上的“坚冰”。
有网民认为网络服务商虽然规定用户不得利用ADSL线路向第三方提供接入服务。但随着家庭宽带的普及,所谓的“第三方”概念已经变得模糊不清了。难道一家中还不能拥有两台以上的上网电脑?同时通过路由共享ADSL就成违规?
还有用户称,ADSL带宽都是一样,用了路由也还是原来的速度,为什么要禁止共享呢?自己购买的服务,难道还不能充分利用吗?
而网络服务商的态度也很坚决。他们表示,如果不对上网用户做必要的监视控制,不仅会出现“共享上网”问题,而且还会出现“私拉专线”、“盗用MAC地址”等状况。
用户如果利用这些手段上网,在实质上是逃避了网络付费,侵犯了服务商利益,造成后者业务收入流失,无法及时回收投资。
其实问题并不简单,个人帐号共享上网失控,最严重的可能是出现非法网吧、私人网络出租屋的违规经营形式。而这正是政府有关部门明令禁止的。可以说服务商强硬的态度得到了政府必然的支持。
我们注意到,网络尖兵越来越多地在中国各地出现,不仅在深圳如此,在山东淄博、湖北仙桃、河北东方大学城、江西、新疆、青海西宁、广西梧州等地电信部门也采取了行动。
由此可见南方的中国电信、北方的网通都在动手。目前虽然包括北京在内的部分区域还没有受到影响,但按照现有的发展趋势,未来可能所有地区的ADSL用户都将面对无情的网络尖兵。家庭共享上网也许将成为历史。
私人ADSL只允许一人独享,你能接受吗?
【相关文章】
【责任编辑: TEL:(010)】
内容导航&第 1 页: &第 2 页:
关于&&&&&&&&&&&&&&&&的更多文章
目前,研究者们开发了许多网络服务和协议来完成资源共享的功能。
网友评论TOP5
2014年,锐捷网络开启精简设备、管理的“极简网络”新时代。
从基础知识到实践经验;从规划建设到维护管理;从设备
在面临全球信贷危机加剧和设备销售下滑的局面下,周三
众所周知,无线网络是对有线联网方式的一种补充和扩展
本书是关于如何使用已有的密码技术和算法对数据库中存储的信息进行保护的书,书中所关注的内容主要是如何设计、建立(或者挑选、
51CTO旗下网站我和楼上的邻居用路由器共用一个网络,也就是交一份的钱,可是最近听说网通开始查了,_百度知道
我和楼上的邻居用路由器共用一个网络,也就是交一份的钱,可是最近听说网通开始查了,
装什么软件啊,他们都知道,谢谢!!!!!!!!!!!,也就是交一份的钱,是真的吗&#47,可是最近听说网通开始查了,谁家用,,能说详细些吗,有没有办法解决,怎么做代理,我和楼上的邻居用路由器共用一个网络,
提问者采纳
而你的计算机只是连接到路由器上面,你上网也不怕啊,是一个局域网,对于网通公司来说他们没有受到损失,他查到的话也不怕。你和邻居的机子联在一起,路由器作为一个连接计算机的物理硬件,
参考资料:
个人意见,仅供参考
其他类似问题
路由器的相关知识
其他9条回答
做个局域网就全部搞定了,
也可以用双网卡,在用双交线接入你的机子,不过这样他关了机,你就上不了网了
有什么关系啊,我家楼上装了一户,用陆游器分了6家出来,也没什么关系啊
好像没有这样的说法,你有路由器,就可以接好几台机子,主要看你的路由器有几个口。进入路由器输入用户名和密码(帐号),一开机就可以全部上网了。很方便的。
完全可以查到,我咨询过这方面的问题,不过也没多大问题,这样用的人多了去了,我就是,他查得完吗,别怕
你别更新网通的网络登陆器就可以了 如果更新了的话 可以找找 一个叫北极星的软件 可以直接搞定
我和朋友用的是双网卡 他们知道也没办法
用路由作的局域网,网通用软件是查不出来的,不过开着路由哭的时候就是在计算上网时间。如果你们办的是包月的就没什么问题了。
用路由作的局域网,网通用软件是查不出来的,,可以再路由器里设置为根据实际连接,就可以了(不上网就不花钱,机子开着也不上网)
mmd你说我不用你的破网了,我们这里安视信才30包月
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
空间积分0 信誉积分100 UID阅读权限10积分31帖子精华可用积分31 专家积分0 在线时间0 小时注册时间最后登录
白手起家, 积分 31, 距离下一级还需 169 积分
帖子主题精华可用积分31 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
网络拓扑如下
也就是将局域网分为两部分,每一部分用一条网通10M光纤上网,两部分之间的连接用linux路由器来解决。现在的要实现这种方案最大的问题是:
我用的是IPTABLES来转发数据包,可是怎么控制校园网A的包由网通A转发,校园网B的包由网通B转发呢?只有两块网卡时只用打开内核IP转发就可以了。现在是四块网卡,看完howtoNAT,也没有说里面有控制的地方。是不是要用路由呢?
小弟没怎么接触过路由设置,还望各位高手指点
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
空间积分0 信誉积分100 UID105594阅读权限10积分12帖子精华可用积分12 专家积分0 在线时间0 小时注册时间最后登录
白手起家, 积分 12, 距离下一级还需 188 积分
帖子主题精华可用积分12 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
小弟想的共享两条网通10M光纤上网,想了一个方案,关键技术求教
不知道你那的网络结构如何?你最好能够把自己的网络基本情况介绍下.本人的设想是最好用路由交换机做个双链路连接.这样的话你可以使用现在路由交换机上的负载均衡来给网络流量分摊到两条链路上,提升网络对外的带宽.同时还可以做链路备份.一举多得!
空间积分0 信誉积分2134 UID112705阅读权限50积分3176帖子精华可用积分3200 专家积分100 在线时间4599 小时注册时间最后登录
小富即安, 积分 3176, 距离下一级还需 1824 积分
帖子主题精华可用积分3200 专家积分100 在线时间4599 小时注册时间最后登录
认证徽章论坛徽章:2
小弟想的共享两条网通10M光纤上网,想了一个方案,关键技术求教
用策略路由,判断源地址选择不同的路由表
空间积分0 信誉积分130 UID1813767阅读权限100积分7047帖子精华可用积分7047 专家积分40 在线时间309 小时注册时间最后登录
帖子主题精华可用积分7047 专家积分40 在线时间309 小时注册时间最后登录
论坛徽章:1
小弟想的共享两条网通10M光纤上网,想了一个方案,关键技术求教
其实不难的。你的意思我大概懂了。。
其中有三个关键点:
1、局域网。可以用一个网段,这样a和b两个校园网可以内部访问不走网关了。
2、linux网关。正常配置。
3、两个光纤。
解决方法:两个光纤过来,就是两条线路。每个线路,都是带有不同ip的。
a网的客户端网关设置为a光纤的ip。b网的客户端设置b光纤的ip。这样不就各走各的出路了吗?还能两个地域局域网通过交换机内部资源访问。
这个是最简单的,但是前提是要求用户听话。
a网和b网不是统一网段的,而是独立的两个网络。
a光纤做a网的nat,a网用户默认网关是a光纤ip。
b光纤做b网的nat,b网用户默认网关是b光纤ip。
在这个网关上作个策略,a网ip访问b网ip的时候,直接走内部,不走a和b出口,去外网。这个实现也很简单的。。
其实难的是两个网络伏在均衡。这个用cisco等社别解决比较简单,也有实例。
搂主要求各走各的,其实就是两套网络中间加个a网和b网的路由。。
以上方法就能a走a光纤,b走b光纤。如果强制要求a走a的,b走b的。需要解决的就是a网主机通过b网中主机的代理,走b光线。只需要解决屏蔽代理问题就ok了。
具体这个问题,下午我吃完饭再说,饿了。。
空间积分0 信誉积分100 UID阅读权限10积分31帖子精华可用积分31 专家积分0 在线时间0 小时注册时间最后登录
白手起家, 积分 31, 距离下一级还需 169 积分
帖子主题精华可用积分31 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
小弟想的共享两条网通10M光纤上网,想了一个方案,关键技术求教
对哦,我就是因为负载均衡太难了,才想干脆各走各的
不过还是有点不明白
1。回复bun&&:用策略路由,我也想过,只是对路由不熟悉, 不确定可不可以。如果可以的话是不是做SNAT不用判断怎么走,而用路由语句判断源地址选择不同的路由表实现强制的A走A,B走B呢?
2。回复peng:方案一:网通是给我的有IP,不过我还要用IPTABLES来做代理上网。“可以用一个网段,这样a和b两个校园网可以内部访问不走网关了“这不太可能吧,如果都用一个网段不设置就可以互通了还要网桥干什么?
方案二:就是我想的,不过”需要解决的就是a网主机通过b网中主机的代理“我倒没有这样想,只是想A走A,B走B。不过现在的问题是用路由能和IPTABLES一起用吗?把局域网的包都路由到了出口(网通光纤),还能用IPTABLES吗?
空间积分0 信誉积分100 UID1785511阅读权限20积分1254帖子精华可用积分1254 专家积分0 在线时间16 小时注册时间最后登录
丰衣足食, 积分 1254, 距离下一级还需 -254 积分
帖子主题精华可用积分1254 专家积分0 在线时间16 小时注册时间最后登录
论坛徽章:0
小弟想的共享两条网通10M光纤上网,想了一个方案,关键技术求教
老大!先实践过再讨论问题!事实和理论有时候不是那么接近的!
screen.width*0.7) {this.resized= this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized= this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {} else {window.open('/Photo//98264_11.jpg');}" onmousewheel="return imgzoom(this);">
人生的转折
空间积分0 信誉积分1035 UID1728743阅读权限100积分85665帖子精华可用积分85665 专家积分599 在线时间1178 小时注册时间最后登录
帖子主题精华可用积分85665 专家积分599 在线时间1178 小时注册时间最后登录
论坛徽章:1
小弟想的共享两条网通10M光纤上网,想了一个方案,关键技术求教
原帖由 &peng& 发表:
其实不难的。你的意思我大概懂了。。
其中有三个关键点:
1、局域网。可以用一个网段,这样a和b两个校园网可以内部访问不走网关了。
2、linux网关。正常配置。
3、两个光纤。
解决方法:两个光纤过来,就是..........
对,路由策略
确实,如果难的,就是LLB那部分,需要给内核PATCH,但是PATCH很难找(比如AS3是2.4.21-15)
不过我试了一下,用一个笨方法也能实现
在/etc/crontab里加一个每分钟执行一次的语句“ip route flush cache”
这样,当路由cache被更新以后,新的TCP请求可以重新按照权重分配
(做过试验,每条链路80KB/S,开10线程,每分钟多开一个,用FLASHGET下载,最后达到了730KB/S)
当我们在为生活而疲惫奔波的时候
生活却渐渐离我们远去
find our way, find our style
Platinum's BLog
空间积分0 信誉积分130 UID1813767阅读权限100积分7047帖子精华可用积分7047 专家积分40 在线时间309 小时注册时间最后登录
帖子主题精华可用积分7047 专家积分40 在线时间309 小时注册时间最后登录
论坛徽章:1
小弟想的共享两条网通10M光纤上网,想了一个方案,关键技术求教
[quote]原帖由 &loveforce& &&]。回复peng:方案一:网通是给我的有IP,不过我还要用IPTABLES来做代理上网。“可以用一个网段,这样a和b两个校园网可以内部访问不走网关了“这不太可能吧,如果都用一个网段不设置就可以互通了还要网桥干什么? [/quote 发表:
校园网a和b如果是一个网段,当然可以通了,网桥是网关的前期产品,可以理解成对于不同物理线路的一个桥接。
例如:你的a网和b网的机器都是192。168。2。0/24网段的机器,a网和b网都在同一组交换机中,当然是可以同的。如果是因为物理距离超过100米的问题,可以通过单模光纤来连接,通过光转电设备,上普通的二层switch。或者给switch加光口。
[quote]原帖由 &loveforce&]方案二:就是我想的,不过”需要解决的就是a网主机通过b网中主机的代理“我倒没有这样想,只是想A走A,B走B。不过现在的问题是用路由能和IPTABLES一起用吗?把局域网的包都路由到了出口(网通光纤),还能用IPTABLES吗?[/quote 发表:
你可能不太熟悉物理设备,光纤过来必须上switch或者router的,接入你的局域网设备。如果上你的交换机,那就ok了。通过iptable来做路由设备。当你的iptable主机连接a光纤的时候,做一个针对a网ip地址的nat,那么接光纤的网卡,当然是外网地址,接本地lan的,当然是a网的内网地址。同样的道理针对b网。
对于终端主机来说,不是本网段的地址,都走默认路由的,也就是网关,发送到iptable主机,在iptable的网关里。道理是这样的,如果有策略路由,也就是静态路由,当然走静态的了。如果没有找到配配的,就发网a光纤的对端,由上一级路由在去跳转。。
还有关于router和iptable的问题,看你的实际情况了。如果两条光纤都上你的一个router上,当然不用iptable主机,router就可以实现。前提是你的router有4个网口。 如果没有router,光纤上的是二层交换机,那么你要实现3层的ip路由,当然就要通过iptable来实现了。
所以说,router和iptable实现的是一个东西,关键是你的实际情况。
还有一种情况就是,既有router,又有iptable类似的主机。一般就是router的实际意义就是物理接口的转换,而iptable主机,实现的是陆游功能。为什么这样做,原因是想在主机上实现其他功能。如:安装系统监控软件、网管软件等。。
其实,这个工程不一定要你亲自做,你只需要提出要求,这些东西乙方可以做的。。
对了,前提是你不是乙方。。:)
空间积分31 信誉积分274 UID1808622阅读权限50积分2944帖子精华可用积分2944 专家积分0 在线时间4102 小时注册时间最后登录
小富即安, 积分 2944, 距离下一级还需 2056 积分
帖子主题精华可用积分2944 专家积分0 在线时间4102 小时注册时间最后登录
论坛徽章:0
小弟想的共享两条网通10M光纤上网,想了一个方案,关键技术求教
下面这篇文章是转的,其实你这个环境做负载平衡也不麻烦,下几条指令就是了,麻烦的是怎么配合IPTABLES一起去做。
Linux 上多條對外連線(Multi-Path)實作
--------------------------------------------------------------------------------
作者﹕網中人 &netman@study-area.org&;
version 0.03
由於 ADSL 及 Cable Modem 的普及,越來越多企業或個人所擁有的對外連線早已超過一條了,
不管是固接還是撥接,相信不少人都在思考如何用最有效的方式將多條連線作整合,
將所有連線的使用發揮至最大極限及最佳的使用率。
除了起到負載的分攤之外,還能達到斷線備援目的,以提供更靈活的連線整合方案。
本文將以實作的方式試圖在 Linux 上做到上述要求。
我先說明一下我的測試環境:
2.1 系統方面:
我目前測試的系統是 RedHat 9.0 Linux ,採用&伺服器&類型安裝,並沒提供 X 界面。
透過 APT 更新至最新修補,並沒安裝 distro 之外的套件。
事實上,只要實作所需的套件滿足的話,並不需要安裝任何伺服器套件。
甚至,核心版本也不需作任何修改,只是某些連線特徵會有些差異(後文[7.1]再詳述)。
2.2 網路方面:
原本的 seednet adsl 是五個 IP 撥接的, 除了之前透過 ip share 來使用外,我再起了另外一個 ppp0 界面。
此外另外再牽了一條 hinet 固一 adsl 。
如此環境,基本上能夠分別測試到如下這幾種連線方式:
* 固接(固定 IP)
* 撥接(非固定 IP)
* ip share(非固定 IP)
& && && && && && &/\__/\__/\
& && && && &&&,--| internet |--.
& && && && & /& & \/--\/--\/& & \
& && && && &|& && && && && && & |
& && && && &|& && && && && && & |
+--[seednet ADSL]& && && &&&[hinet ADSL]
|& && &(非固定)& && && && && && &(固一)
|& && && &&&|& && && && && &220.130.96.254
|& & [ ip share ]& && && && && &|
|& &192.168.100.1& && && && && &|
|& && && &&&|& && && && && && & |
|& & 192.168.100.2& && && &&&220.130.96.21
|& &+----------------------------------+
+---|& & (eth1)& && && && && &(eth0)& &|
ppp0|& && && &kernel 2.4.23& && && && &|
& & +----------------------------------+
& && && && &(my linux box RH9.0)
2.3 測試方式
雖然,撥接adsl 都是同一設備,或許還不十分理想,目前也只能如此了...
我採用的是拔線的方式來測斷線的,暫還沒想到其他方式,或許大家可以幫忙想想的...
我的測試基本上是用 ping 來做:
* 若是 ppp 或不指定測試目標,我會用 next hop 來測。
* 否則,我會用 traceroute 找出 ISP 端機房的 router ip ,
&&而不用 next hop ,是因為怕不準,比方說斷線是外部線路之類的。
若大家有更好提議,也歡迎提供....
三、設計目標
實作方案基本上要做到如下這些要求:
3.1 出向負載分流
所有連線在正常情況下,將共同分攤由內對外產生的連線流量。
對於固定連線,可指定權重(weight),否則使用相同權重( weight 1)。
3.2 斷線偵測
若有連線斷掉,需自動從路由中移除。
當連線恢復時,則自動增加路由。
3.3 進向負載分流(額外需求)
外部連線進來,儘可能的將流量分攤在每一條連線上。
四、設計構思
4.1 出向負載分流
利用 Linux iproute 程式,將每一條連線的 gateway 及其權重增加至路由表的 default route 中。
其中的固接 adsl 及 ip share 連線,需靜態指定其 gateway 位址及權重。
其餘撥接或非固接連線,則用 iproute 程式抓出當時的 gateway ,權重分配為 1 。
4.2 斷線偵測
不管是固接還是非固接連線,用手工方式(如 traceroute)抓出 ISP 端的機房 router 位址,
並確定用 ping&&可以獲得回應。
然後用靜態路由指定通向 router 的 nexthop gateway ,定期使用 ping 來偵察連線。
每次偵測後都重跑 iproute 程式,並重新設定路由表。
若 ping 不成功,則抓出連線界面,且在重設路由表時忽略該界面連線。
4.3 進向負載分流(額外需求)
使用動態 dns(ddns) 將為每一界面位址分配一個 A 記錄,以達到輪詢回應結果,
從而讓不同的外部連線請求輪流使用每一條連線進入。
本實作方案中,ddns server 建議部署於外部的穩定連線的主機上。
關於動態 dns 的 server 設定,不含在本次實作方案之內。可請參考:
& & & & http://www.study-area.org/tips/ddns.htm
設計難點在於 ipshare :
& & & & 其中 ipshare 部份需另行設定 nat 轉線。
& & & & 否則需從清單中移除。
& & & & 若 nat 設定正確,接下來的難點是獲得 ipshare 的 IP (因為也是非固接的),
& & & & 這需要在外部的 web server 另行開發 php 程式來獲取(可置於 ddns server)。
& & & & 關於這部份設計,請參考:
& & & & & & & & http://phorum.study-area.org/viewtopic.php?p=108638
& & & & 或使用如下代碼:
----------------------- cut here ----------------------
//Get the real client IP (&bullet-proof&???)
function GetProxyIP()
& && & if (getenv(&REMOTE_ADDR&quot && strcasecmp(getenv(&REMOTE_ADDR&quot, &unknown&quot)
& && && &&&$ip = getenv(&REMOTE_ADDR"
& && & else
& && && &&&$ip = &unknown&;
& &return($ip);
}/*-------GetIP()-------*/
function GetClientIP()
& &if (getenv(&HTTP_CLIENT_IP&quot && strcasecmp(getenv(&HTTP_CLIENT_IP&quot, &unknown&quot)
& && && &&&$ip = getenv(&HTTP_CLIENT_IP"
& && & else if (getenv(&HTTP_X_FORWARDED_FOR&quot && strcasecmp(getenv(&HTTP_X_FORWARDED_FOR&quot, &unknown&))
& && && &&&$ip = getenv(&HTTP_X_FORWARDED_FOR&);
& && & else if (getenv(&REMOTE_ADDR&) && strcasecmp(getenv(&REMOTE_ADDR&), &unknown&))
& && && &&&$ip = getenv(&REMOTE_ADDR&);
& && & else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], &unknown&))
& && && &&&$ip = $_SERVER['REMOTE_ADDR'];
& && & else
& && && &&&$ip = &unknown&;
& &return($ip);
printf(&proxy IP: &);
print_r(GetProxyIP());
printf(&&br&;\n&);
printf(&client IP: &);
print_r(GetClientIP());
----------------------- cut here ----------------------
五、實作指令
5.1 獲取當前各界面之 ip :
# ip address show
1: lo: &LOOPBACK,UP&; mtu 16436 qdisc noqueue
& & link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
& & inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
2: eth0: &BROADCAST,MULTICAST,UP&; mtu 1500 qdisc pfifo_fast qlen 1000
& & link/ether 00:02:44:84:26:4f brd ff:ff:ff:ff:ff:ff
& & inet 220.130.96.21/24 brd 220.130.96.255 scope global eth0
3: eth1: &BROADCAST,MULTICAST,UP&; mtu 1500 qdisc pfifo_fast qlen 1000
& & link/ether 00:20:ed:36:f9:74 brd ff:ff:ff:ff:ff:ff
& & inet 192.168.100.2/24 brd 192.168.100.255 scope global eth1
4: eth2: &BROADCAST,MULTICAST,UP&; mtu 1500 qdisc pfifo_fast qlen 1000
& & link/ether 00:02:b3:4b:69:49 brd ff:ff:ff:ff:ff:ff
& & inet 10.1.2.3/24 brd 10.1.2.255 scope global eth2
15: ppp0: &ltOINTOPOINT,MULTICAST,NOARP,UP&; mtu 1492 qdisc pfifo_fast qlen 3
& & link/ppp
& & inet 210.64.33.27 peer 210.64.33.1/32 scope global ppp0
5.2 設定 ip rule :
# ip rule add pref 10 from 220.130.96.21 table 10
# ip rule add pref 20 from 192.168.100.2 table 20
# ip rule add pref 30 from 210.64.33.27 table 30
5.3 設定 ip route 各 table :
# ip route replace default via 220.130.96.254 dev eth0 table 10
# ip route replace default via 192.168.100.1 dev eth1 table 20
# ip route replace default via 210.64.33.1 dev ppp0 table 30
5.4 設定 ip route main table:
# ip route replace default \
&; nexthop via 220.130.96.254 dev eth0 weight 4 \
&; nexthop via 192.168.100.1 dev eth1 weight 1 \
&; nexthop via 210.64.33.1 dev ppp0 weight 1
5.5 檢視 main table 規則:
# ip route show
210.64.33.1 dev ppp0&&proto kernel&&scope link&&src 210.64.33.27
192.168.100.0/24 dev eth1&&scope link
220.130.96.0/24 dev eth0&&scope link
10.1.2.0/24 dev eth2&&scope link
169.254.0.0/16 dev eth2&&scope link
127.0.0.0/8 dev lo&&scope link
& && &&&nexthop via 220.130.96.254&&dev eth0 weight 4
& && &&&nexthop via 192.168.100.1&&dev eth1 weight 1
& && &&&nexthop via 210.64.33.1&&dev ppp0 weight 1
5.6 刷新 route cache:
# ip route flush cache
5.7 測試及確認連線生效:
基本上,若在輸入上述命令中沒遇到 error ,那設定就已完成。
接下來可起用多個對外連線(或用 ping),
然後使用 tcpdump -i any 來查看封包是否能分攤在每一條連線上。
六、撰寫 script :
若前述設定經測試成功後,接下來就是撰寫 script 以讓工作自動進行。
6.1 configs
提供給其它 scripts 所需的共同變數值。
----------------------- cut here ----------------------
SH=/bin/bash
LS=/bin/ls
ECHO=/bin/echo
GREP=/bin/grep
AWK=/bin/awk
SED=/bin/sed
CUT=/bin/cut
WC=/usr/bin/wc
SEQ=/usr/bin/seq
LSMOD=/sbin/lsmod
IP=/sbin/ip
PING=/bin/ping
IPTABLES=/sbin/iptables
----------------------- cut here ----------------------
6.2 run_ip.sh
此 script 用來抓出系統全部界面及 nexthop gateway ,
並完成路由規則及路由表設定。
----------------------- cut here ----------------------
#!/bin/bash
# script name:&&run_ip.sh
# purpose:& && &changing route table.
# author:& && & netman(netman@study-area.org)
# license:& && &GPL(http://www.gnu.org/licenses/gpl.html)
# date:& && && &
# version:& && &v0.04
# caveate:
#& && & 1) tested on redhat 9.0 linux only
#& && & 2) iproute program is required
#------------------------------------------------------------
# change log:
#& && & 1)
#& && && && && &* first beta release
#& && & 2)
#& && && && && &* BUGFIXED:
#& && && && && &&&- Add IPIF and GWIP checking before change route.
#& && & 3)
#& && && && && &* Add function:
#& && && && && &&&- Restart network if dead device detected.
#& && & 4)
#& && && && && &* IMPROVEMENT
#& && && && && &&&- Create central config file
#& && && && && &* Add function:
#& && && && && &&&- Enable static routing
#------------------------------------------------------------
WD=${0%/*}
CONFIG=$WD/configs
[ -f $CONFIG ] && . $CONFIG || {
& && &&&echo &${0#*/}: ERROR: can not load $CONFIG.&
& && &&&exit 1
STATIC=$WD/statics
#-- define fixed interface & gateway --#
fixed_if=&eth0 eth1&
#-- format: if:gw:weight --#
fixed_gw=&eth0:220.130.96.254:4 eth1:192.168.100.1:1&
#-- define internal interface, or comment out for none --#
int_if=&eth2&
#-- route command prefix --#
DEFGW='/sbin/ip route replace default equalize'
#-- define dead interface --#
while getopts &d:& do
& && &&&case $opt in
& && && && && & d) dead_dev=$OPTARG ;;
& && &&&esac
#-- determine active interfaces --#
interfaces=$($IP address | $GREP -E 'ppp|eth' | \
& && && &$AWK -F': ' '/^[0-9][0-9]*:/{print $2}')
if [ -n &$dead_dev& ]; then
& && &&&interfaces=$(echo &$interfaces& | grep -Ev &${dead_dev// /|}&)
#-- define table_id --#
init_num=10
offset=`$ECHO -e &${interfaces// /\n}& | $WC -l`
last_num=$(($init_num + $((offset * 10)) ))
tb_num=`$SEQ $init_num 10 $last_num | xargs echo`
#-- delete old rule table --#
$IP rule list | $GREP -E `$ECHO ${tb_num// /|} | $SED 's/[^|][^|]*/^&:/g'` \
& && &&&| do
& && &&&TABID=`echo $line | awk -F: '{print $1}'`
& && &&&OLDIP=`echo $line | awk '{print $3}'`
& && &&&PREID=`echo $line | awk '{print $5}'`
& && &&&$IP rule del pref $PREID from $OLDIP table $TABID
#-- FUNCTION: determine gw --#
& && &&&#-- for fixed if --#
& && &&&if $ECHO &$fixed_if& | $GREP -wq $1 ; then
& && && && && & GWIP=`$ECHO -e &${fixed_gw// /\n}& | $GREP &^$1:& | \
& && && && && && && && &$CUT -d: -f2`
& && && && && & WEIGHT=`$ECHO -e &${fixed_gw// /\n}& | $GREP &^$1:& | \
& && && && && && && && &$CUT -d: -f3`
& && &&&#-- for ppp if --#
& && &&&elif $ECHO $1 | $GREP - then
& && && && && & GWIP=&`$IP address show dev $i | $AWK '/inet/{print $4}' | \
& && && && && && && && &$CUT -d'/' -f1`&
& && &&&#-- for unkown, point back to itself --#
& && &&&else
& && && && && & GWIP=$IFIP
& && &&&fi
#-- config rule & routing --#
for i in $ do
& && &&&unset IFIP GWIP WEIGHT
& && &&&IFIP=&`$IP address show dev $i | $AWK '/inet/{print $2}' | \
& && && && && & $CUT -d'/' -f1`&
& && &&&dgw $i
& && &&&[ &$tb_num& ] && tb_id=${tb_num%% *}
& && &&&[ &$IFIP& -a &$GWIP& ] || continue
& && &&&# set rule
& && &&&$IP rule add pref $tb_id from $IFIP table $tb_id
& && &&&# set default gw
& && &&&$IP route replace default via $GWIP dev $i table $tb_id
& && &&&echo &$int_if& | grep -qw &$i& || {
& && && && && & DEFGW=$DEFGW& nexthop via $GWIP dev $i weight ${WEIGHT:=1}&
& && &&&tb_num=${tb_num#* }
#-- apply routing --#
#-- apply static routes&&--#
[ -f $STATIC ] && . $STATIC
#-- flush cache --#
$IP route flush cache
#-- show routing
$IP route list
#-- FINISH --#
----------------------- cut here ----------------------
* 變數設定說明:
& & & & fixed_if=
& & & & & & & & 固定界面名稱,可設定多個。
& & & & fixed_gw=
& & & & & & & & 固定界面之閘道及權重,格式為 &界面名稱:閘道位址:權重&。
& & & & int_if=
& & & & & & & & 內部界面名稱,可設定多個。該界面將不會用來設定 default route 。
* 參數說明:
& & & & -d &&interface...&;&
& & & & & & & & 指定失效界面,可設定多個。
6.3 statics
此 script 用來設定靜態路由,封包將只會從單一連線送出,而不會分攤至其他連線。
----------------------- cut here ----------------------
#!/bin/bash
# script name:&&statics
# purpose:& && &set static routes.
# author:& && & netman(netman@study-area.org)
# license:& && &GPL(http://www.gnu.org/licenses/gpl.html)
# date:& && && &
# version:& && &v0.01
# caveate:
#& && & 1) tested on redhat 9.0 linux only
#& && & 2) iproute program is required
#------------------------------------------------------------
# change log:
#& && & 1)
#& && && && && &* first beta release
WD=${0%/*}
CONFIG=$WD/configs
[ -f $CONFIG ] && . $CONFIG || {
& && &&&echo &${0#*/}: ERROR: can not load $CONFIG.&
& && &&&exit 1
#-- dest to seednet --#
seed_net=&139.175.0.0/16&
seed_net_order=&ppp0 eth1 eth0&
chinaunix=61.135.136.123
chinaunix_order=&eth0 ppp0 eth1&
set_static () {
& && &&&all_gw=&$($IP route show | $SED -n '/default/,$p')&
& && &&&for if in $2; do
& && && && && & if echo &$all_gw& | $GREP -q &$if& ; then
& && && && && && && && &sn_gw=$(echo &$all_gw& | $GREP $if | awk '{print $3}')
& && && && && && && && &sn_gw=${sn_gw%/*}
& && && && && && && && &break
& && && && && & fi
& && &&&done
& && &&&[ &$sn_gw& ] && {
& && && && && & $IP route replace &$1& via $sn_gw
[ &$seed_net& ] && set_static $seed_net $seed_net_order
[ &$chinaunix& ] && set_static $chinaunix $chinaunix_order
----------------------- cut here ----------------------
* 變數設定說明:
& & & & dest_net=
& & & & & & & & 靜態路由之目的地。可為單一 IP 或 net_ID/mask 。
& & & & dest_net_order=
& & & & & & & & 靜態路由選取的界面次序。左邊為最優,若該界面失效,則選下一個。
* 注意要點:
& & & & 此 script 可由 run_ip.sh 來呼叫,也可以獨立使用。
6.4 chk_ip.sh
此 script 用來偵測連線是否正常,並定期執行 run_ip.sh 及 ddns.sh(可不選用)。
若抓出失效界面,再用 -d 參數傳給 run_ip.sh ,該界面將被忽略。
----------------------- cut here ----------------------
#!/bin/bash
# script name:&&chk_ip.sh
# purpose:& && &checking outbound link and change route and dns.
# author:& && & netman(netman@study-area.org)
# license:& && &GPL(http://www.gnu.org/licenses/gpl.html)
# date:& && && &
# version:& && &v0.03
# caveate:
#& && & 1) tested on redhat 9.0 linux only
#& && & 2) using PING for link detection
#& && & 3) iproute program is required
#& && & 4) scripts run_ip.sh & ddns.sh are required too
#------------------------------------------------------------
# change log:
#& && & 1)
#& && && && && &* first beta release
#& && & 2)
#& && && && && &* add script path detection
#& && & 4)
#& && && && && &* IMPROVEMENT
#& && && && && &&&- Create central config file
#& && && && && &* Add function:
#& && && && && &&&- Add email notification
#------------------------------------------------------------
WD=${0%/*}
CONFIG=$WD/configs
[ -f $CONFIG ] && . $CONFIG || {
& && &&&echo &${0#*/}: ERROR: can not load $CONFIG.&
& && &&&exit 1
# change working directory
INTERVAL=60& && && && && && && &# check time interval in seconds
RUN_SCRIPT=./run_ip.sh& && && & # script to run ip route
DDNS_SCRIPT=./ddns/ddns.sh& && &# script to run ddns update
for script in $RUN_SCRIPT $DDNS_SCRIPT; do
& && &&&[ -f $script ] || {
& && && && && & echo &${0##*/}: Error: required script $script is missing.&
#-- define fixed ping destination --#
#-- tips: doing a traceroute may help you find out the proper target.
#-- format: if:dest:gw --#
fixed_dest=&eth0:168.95.38.194:220.130.96.254 eth1:139.175.169.254:192.168.100.1&
#-- determine gateways --#
get_gw () {
& && &&&defaults=$($IP route show | $SED -n '/default/,$p' | $GREP via)
& && &&&if_n_gw=$(echo -en &$defaults& | $AWK '{print $5&:&$3}')
#-- configure static route --#
s_route () {
& && &&&cmd=$1
& && &&&for i in $fixed_ do
& && && && && & if=${i%%:*}
& && && && && & dest=$(echo -$i | $CUT -d: -f2)
& && && && && & gw=${i##*:}
& && && && && & $IP route $cmd $dest via $gw
& && &&&done
& && &&&unset i
#-- determine destinations --#
get_dest () {
& && &&&[ -n &$_if& ] && all_pair=$(echo &$if_n_gw& | $GREP -Ev &${_if// /|}&)
& && &&&all_pair=$(echo $fixed_dest $all_pair)
& && &&&a_dest=$(echo -en &${all_pair// /\n}& | $CUT -d: -f2)
#-- determine dead destinations --#
get_dev () {
& && &&&for i in $a_ do
& && && && && & $PING -c1 -w2 $i &&;/dev/null || {
& && && && && && && && &echo -en &${all_pair// /\n}& | $GREP $i | $CUT -d: -f1
& && && && && & }
& && &&&done
& && &&&unset i
#-- main --#
& && &&&get_gw& && && && && && &# have gw
& && &&&s_route replace& && && &# set static route
& && &&&get_dest& && && && && & # have destination
& && &&&d_dev=$(echo $(get_dev)) # have dead link
& && &&&s_route del& && && && & # remove static route
#-- run loop --#
while : ; do
& && &&&main
& && &&&[ &$d_dev& ] && {
& && && && && & echo &dead link found: $d_dev& | \
& && && && && & mail -s &$(hostname): dead link& $MAIL
& && &&&$SH $RUN_SCRIPT -d &$d_dev&
& && &&&[ -f &$DDNS_SCRIPT& ] && $SH $DDNS_SCRIPT
& && &&&unset _if _dest _gw all_pair
& && &&&sleep $INTERVAL
----------------------- cut here ----------------------
* 變數設定說明:
& & & & INTERVAL=
& & & & & & & & 偵測動作之時間間隔,以秒數作單位。
& & & & RUN_SCRIPT=
& & & & & & & & 執行路由設定 script 之路逕。執行時可使用 -d 選項排除不必要之界面。
& & & & DDNS_SCRIPT=
& & & & & & & & 執行動態更新 script 之路逕。執行時可使用 -e 選項排除不必要之界面。
& & & & fixed_dest=
& & & & & & & & 偵測固定界面連線用的 ping 目表位址。建議為 ISP 機房端 router ,可用 traceroute 抓取。
& & & & & & & & 格式為 &界面名稱:目標位址:閘道位址&。
* 注意要點:
& & & & 1) 若不想設定或暫無條件設定 ddns ,可將 DDNS_SCRIPT= 註解不用。
& & & & 2) 必需定期檢查確認 fixed_dest= 之正確性,因為 ISP 端可能會更換位址。或另行使用固定目標。
6.3 ddns.sh (可不選用)
此 script 用來動態偵測連線位址,並動態更新 dns 位址記錄。
----------------------- cut here ----------------------
#!/bin/bash
# script name:&&ddns.sh
# purpose:& && &updating dns record
# author:& && & netman(netman@study-area.org)
# license:& && &GPL(http://www.gnu.org/licenses/gpl.html)
# date:& && && &
# version:& && &v0.03
# caveate:
#& && & 1) tested on redhat 9.0 linux only.
#& && & 2) iproute program is required.
#& && & 3) a php webpage to show ip, and the lynx program are required.
#& && & 4) ddns server and ddns key are required.
#------------------------------------------------------------
# change log:
#& && & 1)
#& && && && && &* first beta release
#& && & 2)
#& && && && && &* add EXCL_IF list for exception
#& && & 3)
#& && && && && &* add -e option for appending EXCL_IF
#------------------------------------------------------------
# set commands
HOST=/usr/bin/host
GREP=/bin/grep
CAT=/bin/cat
IP=/sbin/ip
SED=/bin/sed
AWK=/bin/awk
LYNX=/usr/bin/lynx
TOUCH=/bin/touch
DIFF=/usr/bin/diff
NSUPDATE=/usr/bin/nsupdate
MV=/bin/mv
# set variables
if echo $0 | $GREP '^/' ; then
& & w_dir=${0%/*}
& & w_dir=$PWD/${0%/*}
KEY_FILE=$w_dir/Ktestddns.+157+14615.key
UPDATE_DATA=$w_dir/nsupdate.data
UPDATE_OLD=$UPDATE_DATA.old
HOST_NAME=testddns.study-area.org
NS_SERVER=dns.study-area.org
IP_SERVER=dns.study-area.org
IP_SERVER_IP=$(echo $($HOST $IP_SERVER) | tail -n 1 | $AWK '{print $NF}')
IP_URL=&http://$IP_SERVER/ip.php&
CLIENT_TYPE=&client&& && &# if no proxy or using ISP's proxy
#CLIENT_TYPE=&proxy&& && &# if use local proxy
MASQ_IF=&eth1&& && && & # which masqueraded behine NAT
#EXCL_IF=&eth1&& && && &# note: also use -e options to append list
# have exception
while getopts &e:& do
& & case $opt in
& && &&&e) EXCL_IF=$(echo $EXCL_IF $OPTARG) ;;
# ensure key files
for file in $KEY_FILE ${KEY_FILE%key}private
& & if [ ! -r $file ]; then
& && &&&echo &$(basename $0): ERROR: $file is not readable.&
& && &&&exit 1
# ensure the server is connectable
$HOST $NS_SERVER $NS_SERVER | $GREP -q &^$NS_SERVER has address& || {
& & echo &$(basename $0): ERROR: could not contact nameserver $NS_SERVER.&
& & exit 2
# prepare initial script
$CAT &;| $UPDATE_DATA &&END
server $NS_SERVER
update delete $HOST_NAME A
test &$?& = &0& || {
& & echo &$(basename $0): ERROR: could not create $UPDATE_DATA.&
& & exit 3
# get interfaces
ALL_IF=$($IP route show | $SED -n '/default/,$p' | $AWK '/nexthop/{print $5}')
[ &$EXCL_IF& ] && ALL_IF=$(echo &$ALL_IF& | $GREP -Ev &${EXCL_IF// /|}&)
# get masqueraded ip
get_mip () {
& & for M_IF in $MASQ_IF; do
& && &&&echo $ALL_IF | $GREP -qw &$M_IF& || continue
& && &&&m_gw=$($IP route show | $SED -n '/default/,$p' |\
& && && && && & $AWK '/'$M_IF'/{print $3}')
& && &&&$IP route replace $IP_SERVER_IP via $m_gw
& && &&&sleep 2
& && &&&M_IP=$($LYNX --dump $IP_URL | $GREP &$CLIENT_TYPE& |\
& && && && && & $GREP -Eo '([0-9]{1,3}\.){3}[0-9]+')
& && &&&[ -z &$M_IP& ] && {
& && && && &echo &${0##*/}: Error: can't determine IP for $M_IF.&
& && && && &exit 4
& && &&&echo $M_IFM_IP
& && &&&$IP route del $IP_SERVER_IP via $m_gw
& && &&&unset m_gw M_IP
# get current ip
for IF in $ALL_IF; do
& & if echo &$MASQ_IF& | $GREP -wq &$IF&; then
& && &&&NEW_IP=$(get_mip | $AWK -F: '/'$IF'/{print $2}')
& && &&&NEW_IP=$($IP address show dev $IF | $AWK '/inet/{print $2}')
& & NEW_IP=$(echo $NEW_IP | $GREP -Eo '([0-9]{1,3}\.){3}[0-9]+')
& & [ &$NEW_IP& ] && echo &update add $HOST_NAME 0 A $NEW_IP&
& & unset NEW_IP
done &;&; $UPDATE_DATA
echo &send& &;&; $UPDATE_DATA
# do a test then update
$TOUCH $UPDATE_OLD
if ! $DIFF $UPDATE_OLD $UPDATE_DATA; then
& && &&&$NSUPDATE -k $KEY_FILE -v $UPDATE_DATA && {
& && && && && & $MV $UPDATE_DATA $UPDATE_OLD
#-- end of script --#
----------------------- cut here ----------------------
* 變數設定說明:
& & & & KEY_FILE=
& & & & & & & & 用以更新 dns 記錄的 key 。
& & & & UPDATE_DATA=
& & & & & & & & 儲存 nsupdate 所需的命令稿。
& & & & UPDATE_OLD=
& & & & & & & & 上一次 nsupdate 所需的命令稿。
& & & & & & & & script 會比對前一份命令稿內容,若相同,則不做 update ,否則才做。
& & & & HOST_NAME=
& & & & & & & & 主機名稱。需於 ddns 所設定的記錄一致。
& & & & NS_SERVER=
& & & & & & & & ddns server 之主機名稱。
& & & & IP_SERVER=
& & & & & & & & 偵測 IP 用的主機名稱。
& & & & IP_SERVER_IP=
& & & & & & & & 偵測 IP 用的主機位址。
& & & & IP_URL=
& & & & & & & & 偵測 IP 用的網頁 URL 。
& & & & CLIENT_TYPE=
& & & & & & & & 主機連線類型。其值為 &client& 或 &proxy& 二者之一。
& & & & & & & & 若主機沒有使用 proxy 或使用 ISP 提供的 proxy,請設為 &client&。
& & & & & & & & 若主機使用 local LAN 的 proxy ,則請設為 &proxy&。
& & & & MASQ_IF=
& & & & & & & & 連線將會經過 NAT 的界面,但其偽裝位址需作 ddns 更新。
& & & & & & & & (注意:NAT 必須要有相應的 port mapping 設定。)
& & & & EXCL_IF=
& & & & & & & & 排除在 ddns 更新之外的界面。
& & & & & & & & 通常是連線將會經過 NAT 的界面,但其偽裝位址不作 ddns 更新。
* 參數說明:
& & & & -e &&interface...&;&
& & & & & & & & 排除在 ddns 更新之外的界面,可設定多個。
& & & & & & & & 若為多個界面,其值必須至於雙引號(& &)或單引號(' ')之中,如:
& & & & & & & & & & & & -e &eth0 eth1&
& & & & & & & & 參數值將會擴充至 $ESCL_IF 變數裡面。
* 注意要點:
& & & & 1) 關於動態 ddns 的 server 及 client 端設定,請另行參考:
& & & & & & & & http://www.study-area.org/tips/ddns.htm
& & & & 2) 請定期檢測及確認 ddns server 能夠連線及正常運作。\
& & & & 3) 當前實作範例,是將 ddns.sh 與相關的 keys 置於 ddns 子目錄中。
6.4 軟件包
我將本實作所用到的 script 及其它相關檔案包裝為 tarball ,其內容如下:
& & & & multipath/
& & & & & & & & 工作目錄
& & & & multipath/run_ip.sh
& & & & & & & & 路由更新 script
& & & & multipath/chk_line.sh
& & & & & & & & 連線檢測 script
& & & & multipath/ddns/
& & & & & & & & ddns 子目錄
& & & & multipath/ddns/ddns.sh
& & & & & & & & ddns 更新&&script
& & & & multipath/ddns/Ktestddns.+157+14615.key
& & & & & & & & ddns key
& & & & multipath/ddns/Ktestddns.+157+14615.private
& & & & & & & & ddns private key
& & & & multipath/configs
& & & & & & & & 共用變數
& & & & multipath/kernel-patch/
& & & & & & & & kernel-patch 子目錄
& & & & multipath/kernel-patch/2.4.25-mp01
& & & & & & & & kernel 2.4.25 config 檔
& & & & multipath/kernel-patch/patch-2.4.25-ja2.diff
& & & & & & & & kernel 2.4.25 修補檔
& & & & multipath/statics
& & & & & & & & 靜態路由 script
大家可以從如下位址下載整個軟件包:
& & & & http://www.study-area.org/linux/src/multipath.tgz
七、關於 kernel patch
7.1 關於&&patch-2.4.25-ja2.diff
本實作方案不一定需要進行 kernel path ,經測試是可用的。
只是因為 routing cache 的關係,通往同一個 site 的 routing 可能在某一段時間內是不變的。
參考 http://www.lartc.org/howto/lartc.rpdb.multiple-links.html 最後一段有提到:
& & & & Note that balancing will not be perfect, as it is route based, and routes are cached.
& & & & This means that routes to often-used sites will always be over the same provider.&&
這對於某些需要作 session 記憶的連線來說(如連接 phpBB 討論版),是不錯的。
但倘若多條 session 在某一特定時間內均為同一目標位址,其流量並不會分攤到其它線路上。
如果要做到將不同的 session 分攤開來,而不論其目標位址是否相同,則須要下載 patch 修補。
我在 RedHat 9.0 上另行下載 kernel 2.4.25 源始碼及 patch-2.4.25-ja2.diff 這支 patch 。
大家可從前面 6.4 章節提供的 tarball 獲取這次實作所用的 config 及 patch 。
或至官方網站下載:
& & & & http://www.ssi.bg/~ja/patch-2.4.25-ja2.diff
7.2 關於 equailze
雖然前述 patch 能夠將不同的 session 分攤至不同連線,但這仍然是 by session 的分攤,
並非做到 by packet 層級的分攤,也就是所謂的&均衡負載&(equailze)。
要做到這點,似乎還要下載另一支 patch:
& & & & .tw/~tommy/linux/equalize.patch
不過,遺憾的是,這部份我並沒有測試成功。
且後來也沒在 kernel 2.4.25 上於另一支 patch 混合使用。
關於&&equailze 的探討及設定,大家可參考 study-area 的討論:
& & & & http://phorum.study-area.org/viewtopic.php?t=10085
若有人成功測試起來,歡迎回報分享。謝謝﹗
當前實作並沒提及頻寬控管。若日後有時間,再來探討 QOS 及 cbq 相關的題目。
在這之前,大家不妨先參考:
http://peterkim.cgucccc.org/document/MPath.html
九、參考資料
http://phorum.study-area.org/viewtopic.php?t=10085
http://phorum.study-area.org/viewtopic.php?t=9057
.tw/~tommy/doc/multipath.txt
http://www.study-area.org/tips/m_routing.htm
http://www.lartc.org/howto/lartc.rpdb.multiple-links.html
http://peterkim.cgucccc.org/document/MPath.html
------- 本文結束 ------
只想靠双手,向理想挥手。。。
空间积分0 信誉积分130 UID1813767阅读权限100积分7047帖子精华可用积分7047 专家积分40 在线时间309 小时注册时间最后登录
帖子主题精华可用积分7047 专家积分40 在线时间309 小时注册时间最后登录
论坛徽章:1
小弟想的共享两条网通10M光纤上网,想了一个方案,关键技术求教
斑竹就是厉害啊。。~
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处

我要回帖

更多关于 和别人共用网络 的文章

 

随机推荐