LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1424|回复: 11

请教双网卡独立路由问题!

[复制链接]
发表于 2006-9-7 13:42:34 | 显示全部楼层 |阅读模式
双网卡
eth0 wan address
eth1 lan address(192.168)

我在详细介绍一下: A机器双网卡, a网卡网通公网地址220.XX.XX.XX,带宽只有512K; b网卡内网192.XX.XX.XX, 通过cisco 192.XX.XX.1 走电信出口2M带宽。
一般公司内部使用的比较多,并且电信出口大,所以我设置default gw是192.XX.XX.1。但是这种情况下从家里访问a网卡220地址的http服务是不可以的,因为回溯路由是走default gw走的。因此我想设置成这样:a网卡来得数据包仍然从a网卡路由出去,b网卡来得数据包从b网卡出去,机器本身发起的路由走b网卡。
不知道大家明白了没有。感觉这个问题好像要靠策略路由做,但是我从来没有用过策略路由,不知道大家有没有什么建议。
发表于 2006-9-7 14:10:54 | 显示全部楼层
没明白你什么意思,,eth1 本身就是连接自己的,你想从eth1 出去也不行啊。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-7 14:42:24 | 显示全部楼层
具体一点说是eth0 公网地址 eth1内网地址,机器上跑了httpd。
因为eth1的nat出口比eth0带宽大,所以amule的时候可以提供更多的带宽,因此我要把default gw设置为eth1的gw.但是如果我把default gw 设置成eth1 的gw ,那么我从公网访问eth0:80是没办法访问的。
回复 支持 反对

使用道具 举报

发表于 2006-9-7 15:31:13 | 显示全部楼层
default gw 只对不在任何网卡上的网段才会起作用的。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-7 15:59:55 | 显示全部楼层
晕,好难解释.
假如:
机器上有A,b两个ip地址的网卡,A是公网,b是内网。如果用b的nat网关作为系统的def gw.

如果公网C去访问A地址的http服务,因为C的网络地址没有在系统中特别定义*,所以系统会选择使用def gw去路由数据。但是因为def gw是b的网关,所以出现了一个循环C->A b->C的情况.因此这里需要判断网卡数据源的问题,如果A卡来得数据包要继续丢给A卡出去。
回复 支持 反对

使用道具 举报

发表于 2006-9-7 17:37:32 | 显示全部楼层
eth0
1.2.3.4 / 32 (假设是公网IP)
eth1
192.168.0.1 / 24

如果是 192.168.0.0/24 范围的包,都从 eth1 出,如果是 1.2.3.4 / 32 的包,就从 eth0 出,余下的,就走 default gw。
比如 192.168.1.100 或者 2.3.4.5 这类不符合的。
回复 支持 反对

使用道具 举报

发表于 2006-9-7 23:41:09 | 显示全部楼层
明白LZ的意思了。
也就是说,机器A上有a、b两个网卡,其中a连接公网,b连接内网;同时,在内网中还有另一个公网出口c,通过NAT方式。

如果NAT出口c采用的是Linux,可以这样来做。

机器A的default gw设定为c,也就是NAT那个。
然后在c的NAT上做如下设定:
iptables -t nat -A POSTROUTING -s $b -p tcp --sport 80 -j SNAT --to $a:80
也就是将从机器A的接口b发出的,源端口为80的数据包,SNAT为机器A的接口a的地址。

这样做后,访问a地址的web请求,实际上会从接口c发出,但是源地址还是a。
也就是走了一个“环形”。机器A的接口a上只会有进入的流量,而不会有发出的流量,节省了带宽。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-8 01:02:39 | 显示全部楼层
感谢大家回复!orphen的理解基本正确了.
但是orphen的做法感觉不太可取,因为nat是cisco,况且既然是机器A的路由问题就不应该涉及到其他设备,不然维护起来很麻烦的。
我在详细介绍一下: A机器双网卡, a网卡网通公网地址220.XX.XX.XX,带宽只有512K; b网卡内网192.XX.XX.XX, 通过cisco 192.XX.XX.1 走电信出口2M带宽。
一般公司内部使用的比较多,并且电信出口大,所以我设置default gw是192.XX.XX.1。但是这种情况下从家里访问a网卡220地址的http服务是不可以的,因为回溯路由是走default gw走的。因此我想设置成这样:a网卡来得数据包仍然从a网卡路由出去,b网卡来得数据包从b网卡出去,机器本身发起的路由走b网卡。
不知道大家明白了没有。感觉这个问题好像要靠策略路由做,但是我从来没有用过策略路由,不知道大家有没有什么建议。
回复 支持 反对

使用道具 举报

发表于 2006-9-8 10:28:29 | 显示全部楼层
不清楚你的A机器是采用什么系统的?
应该明确的是:httpd服务返回的数据包仍然是从机器本身发起的。

可以这样做一下,将A机器本身80端口发出的数据包,使用iptables在mangle表的OUTPUT链进行MARK操作。然后使用ip route根据这个MARK进行策略路由。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-8 11:01:22 | 显示全部楼层
centos
就是因为我策略路由不懂所以才问阿.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表