免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4922 | 回复: 12
打印 上一主题 下一主题

[网络管理] Linux下静态路由问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-13 20:29 |只看该作者 |倒序浏览
这段时间在研究Linux平台下静态路由添加的问题,目前在我们平台上添加静态路由是通过route add命令来实现的,在使用route add时发现了一些问题,请大家帮忙一起看一下

环境如下:
假设PC1有一张网卡,IP为192.168.1.100,mask为255.255.255.0,gateway为192.168.1.1,dev为eth0

如果没有设定静态路由的话,对google(IP为203.208.39.104)做ping测试发现正常

使用route add -net 203.208.39.104 netmask 255.255.255.255 dev eth0,增加一条静态路由
发现不能ping通203.208.39.104

删除该路由,使用route add -net 203.208.39.104 netmask 255.255.255.255 gw 192.168.1.1,增加一条静态路由
发现可以ping 通203.208.39.104

这里的问题是为什么设定dev类型的路由不能通?
下面做了两个实验
1.使用ethereal抓包工具发现,当使用route add -net 203.208.39.104 netmask 255.255.255.255 dev eth0增加一条静态路由时,Ping 203.208.39.104这个地址会发送广播包(arp)来询问

203.208.39.104地址的MAC地址,这个时候当然不会有响应。


2.使用route add -net 203.208.39.104 netmask 255.255.255.255 gw 192.168.1.1增加一条静态路由时,Ping 203.208.39.104这个地址直接将这个Ping包发送给网关192.168.1.1,这个时候网关就会

送出去然后会收到正常的回复

从上面的试验的结果可以看出,当使用dev来设定路由时,Linux的路由表中关于这条路由并没有gateway的值,这个时候会把丢到这个dev的报文当作局域网的报文来处理。使用gw来设定时,Linux路由表

中关于这条路由有gateway的值,这个时候IP层会根据Dest IP和gw所在的dev的接口进行判断。如果是同网段内就会发ARP包,然后根据回复丢出去,如果不在同一网段内就会直接将报文转给Gateway进行

处理

这里带来的问题是:如果需要增加的静态路由的Dest IP网段和dev不在同一网段就必须使用gw的方式增加路由,请问使用dev方式来增加静态路由主要用于那些场合?

谢谢!

论坛徽章:
0
2 [报告]
发表于 2010-01-14 09:31 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2010-01-14 09:49 |只看该作者
目前我们的应用是在一台ADSL Router上面,ADSL Route有8条PVC,但是只能有一条PVC可以设定为default route,这个时候gateway就是default route的PVC。但是如果其他PVC也可以获取IP的话,如果设定一条静态路由,dev选择其他的PVC就会出现我描述的现象。使用其他PVC的Gateway则能正常转发,所以我才想了解使用dev设定静态路由问题

但是有ISP期望是说设定以dev的静态路由后,Dest IP能够转给这个dev的gateway进行转发,请问这个要求对于基于dev的路由选路是否合理?还是这个需求是需要特别定制的?

另外关于ISP设定基于dev静态路由的另外一个原因是,当前这条PVC的gateway可能会发生变化,所以设定基于gw的静态路由可能会发生失效,ISP期望基于dev的静态路由能够每次获取IP时自动判断当前的gateway,使用当前的gateway来设定静态路由

论坛徽章:
0
4 [报告]
发表于 2010-01-14 10:00 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2010-01-14 10:39 |只看该作者
[quote]原帖由 win847 于 2010-1-13 20:29 发表
请问使用dev方式来增加静态路由主要用于那些场合?[quote]

主要用在主机有多个同网段IP网卡场合。例如,做双机时,一般主机实IP和浮动IP为同网段地址。如果不指定源接口(dev),那发出去包的源地址就会是实IP、而非对外合法的浮动IP。这就有可能被防火墙所拦截、到达不了目标网段或主机。所以要这样设置:

route del default
route add default gw ${GATEWAY} dev eth0:0

即指定源接口。这里,eth0为原来的实接口,eth0:0为绑定浮动IP的的虚接口。

为了省事,我也曾用一条命令来设置过:
route add default  dev eth0:0
即保留原来的缺省网关设置,只加一条指定源接口的路由。但这在网关为三层交换机时可以,网关为防火墙DMZ口时就不行了。只能用前一种写法。原因尚未深究。

论坛徽章:
0
6 [报告]
发表于 2010-01-14 10:47 |只看该作者
pppoe拨号,就看成是一条网线就行了。

论坛徽章:
0
7 [报告]
发表于 2010-01-14 16:16 |只看该作者
原帖由 baidu874 于 2010-1-14 10:00 发表
很遗憾我查了一下PVC参数的意思,但是还没有太理解。你的这个应用是在ISP吗?一条PVC上可以承载多个PPP连接?
还是简单说,你其实就是用了一台路由器,上面接了8条ADSL线路?

如果是第二种情况,那也谈不上 ...


我们是ADSL Modem。 PVC就是虚电路的意思,你可以理解为有8条实际的物理通路。现在每条PVC上只会承载一个PPP的连接,但是8条PVC都可以建立PPP或者Mpoa的连接。

最简单的解释就是把Modem看作一台PC,每条PVC可以看作一张物理网卡,这台PC上有8张网卡可以出去这样子

论坛徽章:
0
8 [报告]
发表于 2010-01-14 16:21 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2010-01-14 19:05 |只看该作者
原帖由 baidu874 于 2010-1-14 16:21 发表


问题就在这里,你的8条PVC都可以建立PPP连接
可是PPP连接的特点就是一旦链路建立,那么所有的数据都会由本端发往对端。也就是说,默认情况下,你只可能走一条PVC,并且你不能给PPP链路增加一个静态路由(恩 ...


但是某些应用会指定走第几条PVC出去,比如Internet访问走PVC0,IPTV点播走PVC1。

这样的话可以设定default route为PVC0,但是IPTV就需要指定静态路由使其可以从PVC1出去

论坛徽章:
0
10 [报告]
发表于 2010-01-15 10:10 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP