Chinaunix

标题: 请教大家linux 双向路由问题 [打印本页]

作者: scpe    时间: 2007-04-02 20:11
标题: 请教大家linux 双向路由问题
我用linux做路由器,装两块网卡,eth1地址为192.168.1.120,网段为192.168.50.0 另一个eth1地址为192.168.50.100 网段为192.168.1.0。缺省网关设置为192.168.1.1,开启了IP转发功能,即:

echo 1 > /proc/sys/net/ipv4/ip_forward

以下为我的路由表:
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.50.0    *               255.255.255.0   U     0      0        0 eth1
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth1
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

现在的问题是192.168.50.0网段的机器能ping通192.168.1.0网段的机器,但192.168.1.0的机器不能ping通192.168.50.0网段的机器,在192.168.1.0网段PC机器上加了一条静态路由:

route add 192.168.50.0 mask 255.255.255.0 192.168.1.120

可以ping 通192.168.50.100,但就是ping不通同一网段的192.168.50.1

在家看看是什么原因?

我的另一台linux路由却能实现双向访问,就这台不行,没办法了,觉得配置没什么问题。
作者: qtdszws    时间: 2007-04-03 10:48
ip addr是多少?
有没有使用iptables?
客户机的路由指向都正确吗?
作者: ssffzz1    时间: 2007-04-03 11:11
我用linux做路由器,装两块网卡,eth1地址为192.168.1.120,网段为192.168.50.0 另一个eth1地址为192.168.50.100 网段为192.168.1.0。缺省网关设置为192.168.1.1,开启了IP转发功能,即:

全乱了,真不知道怎么理解的网关和IP,好好看看网络基础
作者: scpe    时间: 2007-04-03 17:51
上面是写错了,eth0为192.168.1.0 网段,eth1为192.168.50网段.

eth0 的ip为192.168.1.120

eth1的ip为192.168.50.100

我怀疑是不是内核没开启路由功能?
我的另一台路由是重新编译的内核,就可以双向通信。

iptables当然是关了的(/etc/init.d/iptables stop),防火墙也是关了的。

192.168.1.0客户机用的静态路由表:

route add 192.168.50.0 mask 255.255.255.0 192.168.1.120

可以ping 通192.168.50.100,但到不了该网段的其它机器,如192.168.50.1
作者: ssffzz1    时间: 2007-04-03 17:53
两边机器的网关都填对了吗.
作者: scpe    时间: 2007-04-03 19:37
网关肯定填对了的啊。

192.168.50.0 网段的网关是192.168.50.100

192.168.1.0 的网关是192.168.1.120
作者: scpe    时间: 2007-04-03 19:59
我现在试通了,也没调什么,只是开启了portmap 服务。难道与这有关吗?
作者: fangjy2008    时间: 2007-04-04 09:38
原帖由 scpe 于 2007-4-2 20:11 发表于 1楼  
我用linux做路由器,装两块网卡,eth1地址为192.168.1.120,网段为192.168.50.0 另一个eth1地址为192.168.50.100 网段为192.168.1.0。缺省网关设置为192.168.1.1,开启了IP转发功能,即:

echo 1 > /proc/sy ...

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.50.0    *               255.255.255.0   U     0      0        0 eth1
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth1
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

路由表明显有问题,从上面看不出网段192.168.50.0的网关是192.168.50.100,也看不出192.168.1.0的网关是192.168.1.120。可以看到缺省路由的网关是192.168.1.1。
可以这样加路由route add -net 192.168.1.0/24 gw 192.168.1.120
                     route add -net 192.168.50.0/24 gw 192.168.50.100
这样两个网段的机器才能互通,否则两网段的包送到该机器时,都会向192.168.1.1送,当然通不了。
作者: ssffzz1    时间: 2007-04-04 10:29
这个路由表,没什么问题,只要两边的网关设置正确,是可以实现转发的.
作者: scpe    时间: 2007-04-04 12:47
昨天我把机器拿到办公室调试两边能通,今天拿到应用环境又只有单向通.

怪了。

9楼说得对,从理论上讲,只要Linux能转发,两边应该能通,不用加8楼的路由.

我现在的应用是这样的:
192.168.1.0网段的机器要访问10.9.2.1网段的机器,这个机器通过192.168.50.1网关可到达。

我linux上eth0的IP:192.168.1.120
             eth1的IP:192.168.50.101

我在linux上加一条静态路由:

route add -net 10.9.0.0/16 gw 192.168.50.1

我在192.168.1.0网段的机器上互联网,网关是192.168.1.1

这没问题,于是我在192.168.1.0网段机器上加一条静态路由:

route add 192.168.50.0 mask 255.255.255.0 192.168.1.120

route add 10.94.0.0 mask 255.255.0.0 192.168.1.120

现在192.168.1.0的机器能ping 通192.168.50.101了,但凭什么ping 不通192.168.50.1?因为它们在一个网段啊?该通啊。

只要能到192.168.50.1,就能到10.9.0.0网段了。

昨天测试得好好的能两边互通,可现在拿过来又是只能单向通。晕也。下午我再调调。
大家有什么好的意见?给个解决方案?
作者: scpe    时间: 2007-04-04 14:20
标题: 找到问题的原因了
找到问题的原因了:

192.168.50.1机器不是由我单位管,所以网关设置的肯定不是我linux的192.168.50.101。所以我的ping包能到达192.168.50.1,但包并不能回送回来,即到不了192.168.1.0网段的机器。我准备和192.168.50.1路由器的网管联系,在192.168.50.1机器上加一静态路由到192.168.1.0网段,这样应该可以通吧。


等我通了告诉大家。
作者: ssffzz1    时间: 2007-04-04 14:28
可以考虑做SNAT来解决.
作者: scpe    时间: 2007-04-04 16:43
对方管理员不愿意加路由,我现在要从192.168.1.0网段通过

192.168.50网段到10.94.4.0网段的一台服务器,叫我做NAT,

iptables -t nat -A PREROUTING -d 192.168.1.120 -p tcp --dport  1352 -j DNAT --to 10.94.4.3:1352

这样不行,Linux好象不支持跨网段的端口映射吧.

现怎么样办?
作者: scpe    时间: 2007-04-04 18:13
标题: 严重感谢ssffzz1
严重谢谢ssffzz1,呵呵.

我现在做了两件事,将事情搞定。

我现在再叙述一下我的网络需求:

    (10.94.0.0 )我准备到达的大网(IP:192.168.50.1)<--> 我管的网段1: 192.168.50.0 <--(192.168.50.101)Linux路由器(192.168.1.120) -->我的办公网:192.168.1.0 <--linux路由器-->我的另一个网络:10.0.0.0 <--路由器-->互联网

现在是我的192.168.1.0网络的机器要访问10.94.0.0网段的一台服务器。

我做了以下两步:

(1)在linux路由器上,增加了一条静态路由:
route add -net 10.94.0.0/16 gw 192.168.1.120

(2)现在因192.168.1.0网络不能到达192.168.50.1(因192.168.50.1机器的网关不是我的192.168.50.101,故数据包不能回),做SNAT:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 --to-source 192.168.50.100

大功告成,谢谢大家!!!!
作者: scpe    时间: 2007-04-04 18:28
标题: 改正14楼错误!!!
iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.50.100
作者: scpe    时间: 2007-04-04 19:11
标题: 补充一个图
用SNAT解决与未知网络的双向互通:
图见附件。

SNAT双向互通.jpg (62.71 KB, 下载次数: 30)

SNAT双向互通.jpg

作者: ssffzz1    时间: 2007-04-04 21:24
不用这样,我很久前在一个帖里就对这样的问题做过很详细的说明,只是你没有看而已.
作者: ljily000    时间: 2007-09-03 23:13
标题: 回复 #17 ssffzz1 的帖子
版主 老大能否提及一下 您的这个很久以前有详细说明的帖子,让我们也学习学习!
作者: ljily000    时间: 2007-09-03 23:14
谢谢!


我也没有搜索到,不知道用什么关键词。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2