LinuxSir.cn,穿越时空的Linuxsir!

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

策略路由服务器有一个接口不能被访问

[复制链接]
发表于 2006-7-12 11:07:16 | 显示全部楼层 |阅读模式
俺有台服务器两条上网线路,一条是教育网,另一条是电信的专线。然后在这台服务器上安装了www服务,打算让在教育网的用户访问教育网接口ip,在公共网的用户访问公共网接口ip,以都获得比较满意的速度。
我在这台服务器上添加了针对教育网地址的静态路由,格式如下:
#!/bin/sh
edu_gateway_ip=59.64.177.1
#beijing
route -A inet add -net 162.105.0.0 netmask 255.255.0.0 gw $edu_gateway_ip
route -A inet add -net 166.111.0.0 netmask 255.255.0.0 gw $edu_gateway_ip
route -A inet add -net 202.4.128.0 netmask 255.255.224.0 gw $edu_gateway_ip

route -A inet add -net 202.112.64.0 netmask 255.255.192.0 gw $edu_gateway_ip
route -A inet add -net 202.112.128.0 netmask 255.255.128.0 gw $edu_gateway_ip
route -A inet add -net 202.113.0.0 netmask 255.255.0.0 gw $edu_gateway_ip
route -A inet add -net 202.204.0.0 netmask 255.252.0.0 gw $edu_gateway_ip
route -A inet add -net 210.31.0.0 netmask 255.255.0.0 gw $edu_gateway_ip
route -A inet add -net 211.68.0.0 netmask 255.255.0.0 gw $edu_gateway_ip
route -A inet add -net 211.71.0.0 netmask 255.255.0.0 gw $edu_gateway_ip
......略

然后把电信网的网关地址设置为默认路由,这样在这台服务器上面就可以策略路由了,访问教育网走教育网的线路,访问其它网络走电信网的线路。现在的问题是,我在一台公共网的机器上测试时发现,ping 电信网接口ip可以通,但ping教育网接口ip不通,在教育网的机器上ping教育网ip可以通,但ping电信网ip不通,在服务器上用tcpdump发现收到了icmp包,但没有包发出去。
按理说在公网ping教育网ip包的流程应该是:
公网主机 ----公共网--教育网---服务器教育网ip---服务器处理----服务器公共网ip---公共网--公网主机
但不知道服务器处理之后为什么包发不出去。
发表于 2006-7-12 18:08:13 | 显示全部楼层
可不可以 traceroute 一下看看
回复 支持 反对

使用道具 举报

发表于 2006-7-12 20:43:00 | 显示全部楼层
假设:
教育网 eth0 IP: x.x.x.x 网关: x.x.x.1
电信 eth1 IP:y.y.y.y 网关:y.y.y.1

ip route add default via x.x.x.1 dev eth0 table 100
ip route add default via y.y.y.1 dev eth1 table 200

ip rule add from x.x.x.x table 100
ip rule add from y.y.y.y table 200

这样设置后,当访问教育网的IP的时候,数据包总会通过教育网的网关发送数据,不管是从哪儿来的数据,同时的,访问电信的IP的时候,数据包总会通过电信的网关发送数据。

然后再DNS上做文章,当从教育网来的IP请求DNS时,就返回教育网的IP,而其他的IP请求DNS时,就回应电信的IP,不过,如果是从网通过来的IP,最好返回教育网的IP,因为某种原因,电信和网通的互访是不尽如人意的。
回复 支持 反对

使用道具 举报

发表于 2006-7-12 22:55:20 | 显示全部楼层
Post by silver810212
俺有台服务器两条上网线路,一条是教育网,另一条是电信的专线。然后在这台服务器上安装了www服务,打算让在教育网的用户访问教育网接口ip,在公共网的用户访问公共网接口ip,以都获得比较满意的速度。
我在这台服务器上添加了针对教育网地址的静态路由,格式如下:
#!/bin/sh
edu_gateway_ip=59.64.177.1
#beijing
route -A inet add -net 162.105.0.0 netmask 255.255.0.0 gw $edu_gateway_ip
route -A inet add -net 166.111.0.0 netmask 255.255.0.0 gw $edu_gateway_ip
route -A inet add -net 202.4.128.0 netmask 255.255.224.0 gw $edu_gateway_ip

route -A inet add -net 202.112.64.0 netmask 255.255.192.0 gw $edu_gateway_ip
route -A inet add -net 202.112.128.0 netmask 255.255.128.0 gw $edu_gateway_ip
route -A inet add -net 202.113.0.0 netmask 255.255.0.0 gw $edu_gateway_ip
route -A inet add -net 202.204.0.0 netmask 255.252.0.0 gw $edu_gateway_ip
route -A inet add -net 210.31.0.0 netmask 255.255.0.0 gw $edu_gateway_ip
route -A inet add -net 211.68.0.0 netmask 255.255.0.0 gw $edu_gateway_ip
route -A inet add -net 211.71.0.0 netmask 255.255.0.0 gw $edu_gateway_ip
......略

然后把电信网的网关地址设置为默认路由,这样在这台服务器上面就可以策略路由了,访问教育网走教育网的线路,访问其它网络走电信网的线路。现在的问题是,我在一台公共网的机器上测试时发现,ping 电信网接口ip可以通,但ping教育网接口ip不通,在教育网的机器上ping教育网ip可以通,但ping电信网ip不通,在服务器上用tcpdump发现收到了icmp包,但没有包发出去。
按理说在公网ping教育网ip包的流程应该是:
公网主机 ----公共网--教育网---服务器教育网ip---服务器处理----服务器公共网ip---公共网--公网主机
但不知道服务器处理之后为什么包发不出去。

你从公网ping教育网肯定是ping不通的,因为你从公网发出的ICMP数据报ECHO REQUEST,被REPLY从公网的IP出去后,封装的是公网的IP,你的机器接收到这个REPLY数据报后,发现并不是从发送数据报的目的地址返回的,就丢弃了。
从教育网ping公网是一样的道理。
回复 支持 反对

使用道具 举报

发表于 2006-7-12 23:31:33 | 显示全部楼层
Post by orphen
你从公网ping教育网肯定是ping不通的,因为你从公网发出的ICMP数据报ECHO REQUEST,被REPLY从公网的IP出去后,封装的是公网的IP,你的机器接收到这个REPLY数据报后,发现并不是从发送数据报的目的地址返回的,就丢弃了。
从教育网ping公网是一样的道理。

就是这位说的问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-13 08:58:00 | 显示全部楼层
Post by orphen
你从公网ping教育网肯定是ping不通的,因为你从公网发出的ICMP数据报ECHO REQUEST,被REPLY从公网的IP出去后,封装的是公网的IP,你的机器接收到这个REPLY数据报后,发现并不是从发送数据报的目的地址返回的,就丢弃了。
从教育网ping公网是一样的道理。


有道理,那有什么办法可以解决吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-13 09:04:53 | 显示全部楼层
Post by springwind426
假设:
教育网 eth0 IP: x.x.x.x 网关: x.x.x.1
电信 eth1 IP:y.y.y.y 网关:y.y.y.1

ip route add default via x.x.x.1 dev eth0 table 100
ip route add default via y.y.y.1 dev eth1 table 200

ip rule add from x.x.x.x table 100
ip rule add from y.y.y.y table 200

这样设置后,当访问教育网的IP的时候,数据包总会通过教育网的网关发送数据,不管是从哪儿来的数据,同时的,访问电信的IP的时候,数据包总会通过电信的网关发送数据。

然后再DNS上做文章,当从教育网来的IP请求DNS时,就返回教育网的IP,而其他的IP请求DNS时,就回应电信的IP,不过,如果是从网通过来的IP,最好返回教育网的IP,因为某种原因,电信和网通的互访是不尽如人意的。



我正打算配置bind9 match-client。

你的路由配置我试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-13 14:19:23 | 显示全部楼层
Post by orphen
你从公网ping教育网肯定是ping不通的,因为你从公网发出的ICMP数据报ECHO REQUEST,被REPLY从公网的IP出去后,封装的是公网的IP,你的机器接收到这个REPLY数据报后,发现并不是从发送数据报的目的地址返回的,就丢弃了。
从教育网ping公网是一样的道理。



感觉不对,我在策略路由的那台服务器上用tcpdump dst targetip看,发现根本就没有到目标主机包发出去。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-13 16:03:36 | 显示全部楼层
Post by springwind426
假设:
教育网 eth0 IP: x.x.x.x 网关: x.x.x.1
电信 eth1 IP:y.y.y.y 网关:y.y.y.1

ip route add default via x.x.x.1 dev eth0 table 100
ip route add default via y.y.y.1 dev eth1 table 200

ip rule add from x.x.x.x table 100
ip rule add from y.y.y.y table 200

这样设置后,当访问教育网的IP的时候,数据包总会通过教育网的网关发送数据,不管是从哪儿来的数据,同时的,访问电信的IP的时候,数据包总会通过电信的网关发送数据。

然后再DNS上做文章,当从教育网来的IP请求DNS时,就返回教育网的IP,而其他的IP请求DNS时,就回应电信的IP,不过,如果是从网通过来的IP,最好返回教育网的IP,因为某种原因,电信和网通的互访是不尽如人意的。



一般来说只能找到一部分网络的ip分配,为其指定路由,然后再设定的路由,这样的话就只能这样做:
ip route add default via x.x.x.1 dev eth0 table 100
ip route add default via y.y.y.1 dev eth1
ip rule add from 教育网ip table 100
但另外我还要设定对内网用户做nat,还要写ip route add to ... table...
似乎这样就不太好弄了,请问springwind426有好的解决办法没?
回复 支持 反对

使用道具 举报

发表于 2006-7-13 19:48:32 | 显示全部楼层
对内网用户的NAT可以在iptables中解决嘛

-A POSTROUTING -s xxx.xxx.xxx.0/24 -o ethx -j MASQUERADE
回复 支持 反对

使用道具 举报

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

本版积分规则

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