• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

基于路由策略的IP地址控制

发布: 2007-7-04 12:06 | 作者: admin | 来源:  网友评论 | 查看: 86次 | 进入软件测试论坛讨论

领测软件测试网
基于路由策略的IP地址控制

[color=red:710319d809]作者:白金 网名:platinum(chinaunix) 超超白金(白金论坛)  
欢迎转载,转载请保留上述信息  
===========================================================================[/color:710319d809]

最近做了一套路由策略,觉得LINUX真的太强大了!于是心潮澎湃,写了这个文档!!!

[color=blue:710319d809]一、背景描述[/color:710319d809]
如图,LINUX是一台网关服务器,内有3块网卡
eth1绑定172.17.0.0/16的IP,该网段IP可以通过172.17.1.1上网
eth0绑定192.168.10.0/24的IP,该网段IP可以通过192.168.10.1上网
eth2绑定192.168.1.1,是内网用户的网关

[color=blue:710319d809]二、需求分析[/color:710319d809]
内网用户应该走172.17.1.1这个路由上网
但由于工作需要,部分用户应该有访问图中“专用网络”的权限
也就是说,应该走192.168.10.1这个路由

另外一点,所有人应该可以访问FTP服务器,这个服务器的IP是192.168.10.96
也就是说,走172.17.1.1路由的人,也应该能访问192.168.10.96,且可以上网

[color=blue:710319d809]三、解决方案[/color:710319d809]
要解决这个问题,用到了一下几个命令,具体使用方法需要另查资料
ip route
ip rule
arp
[color=red:710319d809]注:关于ip命令的用法,请查阅ip中文手册,www.google.com上有[/color:710319d809]

[color=blue:710319d809]1、绑定IP[/color:710319d809]
ifconfig eth1 172.17.3.x netmask 255.255.0.0
ifconfig eth0 192.168.10.2 netmask 255.255.255.0
ifconfig eth2 192.168.1.1 netmask 255.255.255.0
然后分别修改/etc/sysconfig/network-script/ifcfg-ethx文件,以使计算机启动自动设置IP地址

[color=blue:710319d809]2、创建特殊路由表[/color:710319d809]
vi /etc/iproute2/rt_table
[code:1:710319d809]
#
# reserved values
#
255     local
254     main
253     default
0       unspec

200     NET10
#
# local
#
#1      inr.ruhep
[/code:1:710319d809]
上面那个200 NET10为新添加,自定义编号为200,名字为NET10

[color=blue:710319d809]3、向NET10路由中添加它自己的默认路由[/color:710319d809]
[code:1:710319d809]
ip route add default via 192.168.10.1 table NET10
[/code:1:710319d809]
注意,这个table NET10一定不要忘了写,否则写到了主路由表中

[color=blue:710319d809]4、创建特殊路由规则[/color:710319d809]
用ip rule可以看到计算机当前的路由规则
[quote:710319d809]
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
[/quote:710319d809]
可以看到,规则中走了3个路由表,local、main、default
我们平常用route看到的,实际是路由表main
这些规则是按序号大小顺序走的,一个不同,则走下一个,知道通路或走完为止

开始添加我们自己的路由NET10到路由表中
[code:1:710319d809]
ip rule add from 192.168.1.222 pref 10000 table NET10
[/code:1:710319d809]
这个意思是说,如果来自IP地址为192.168.1.222的访问,则启用NET10的路由表中的路由规则
而NET10的路由规则是什么呢?上面已经设置了,走的是192.168.10.1的网段
接下来,使LINUX可以NAT(这里不再细说HOW TO了)

[color=blue:710319d809]5、让所有人可以访问192.168.10.xx(这个IP不便说出来)[/color:710319d809]
因为其余人都走了172.17.1.1这个路由,所以他们是无法访问192.168.10.xx的
怎么才能实现呢?再添加个策略就可以了!
[code:1:710319d809]
ip rule add to 192.168.10.xx pref 10001 table NET10
[/code:1:710319d809]
这句话的意思是说,所有人,如果目的IP是192.168.10.xx,则临时使用NET10的路由表
这样做,安全会不会有安全问题呢?路由变了,他们会不会访问到专用网络呢?
不会的,因为路由规则是to 192.168.10.xx,也就是目标是96时,才该路由的,访问别的网站还是走原来的路由。
如果说访问到专用网络的机器,也就只有10.xx这一台而已。
这里,我们还可以做一个小技巧,不告诉别人192.168.10.xx的地址,只告诉他们网关192.168.1.1上有这个服务
iptables -t nat -A PREROUTING -d 192.168.1.1/32 --dport 21 -j DNAT --to 192.168.10.xx:21

[color=blue:710319d809]6、防止其他人篡改IP地址而获得特殊权限[/color:710319d809]
arp有个静态功能CM,不是C,大家可能知道
如果给一个IP地址强行绑定一个非他自己的MAC,会怎么样呢?双方会话将会失败!
好,我们来利用这一点!

首先,我写了一个文件iproute.c
[code:1:710319d809]
#include <stdlib.h>
#include <stdio.h>
main ()
{
        int i;
        for(i=2;i<255;i++)
                printf("192.168.1.%d\t\t00:00:00:00:00:00\n",i);
}
[/code:1:710319d809]
gcc iproute.c -o iproute
将编译出一个可执行文件
[color=red:710319d809]注:不应该包括主机IP地址本身,所以从2循环到254(255是广播)[/color:710319d809]

其次,生成一个C的IP地址和全为00的MAC地址
[code:1:710319d809]
./iproute > /etc/ethers
[/code:1:710319d809]

再次,修改IP-MAC匹配列表
vi /etc/ethers
具体怎么该我就不用细说了,相信大家都会

最后,做静态IP-MAC绑定
arp -f

[color=blue:710319d809]7、为了安全,建立防火墙,修改main路由表[/color:710319d809]
默认的路由表应该有192.168.10.0/24和172.17.0.0/16网段的内容,为了安全,可以去掉
另外,如果是AS3的话,还会有169.254.0.0/16的路由,具体为什么我不知道,去掉
然后写一个防火墙教本,利用iptables,把你的机器变得更加坚固!


好了,终于写完了!
昨天和好好先生聊天,他说了一句话让我深有感触!
[color=red:710319d809]“任何东西只要你能活学活用,它的功能都会很强大!”[/color:710319d809]
同志们,努力吧!

javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">

网络拓扑图


 yongpeng 回复于:2004-04-14 18:38:10
Good

 platinum 回复于:2004-04-14 19:33:25
我感觉只要硬件稳定性够,网卡插槽够,完全可以做一个路由器

 不想发言 回复于:2004-04-15 10:31:55
好贴!顶!:em02:

 我是马甲我怕谁 回复于:2004-04-15 19:15:57
看来楼主费了一番苦心,呵呵,可惜没人理会 :mrgreen:

 platinum 回复于:2004-04-16 01:53:05
呵呵,好像是 :oops:

 maldinihjw 回复于:2004-04-16 09:26:21
强~~

 andyliu 回复于:2004-04-16 10:27:25
写得很好,考虑得也很周密。
但普通PC的网卡性能有限,你有没有试过同事有100-200台计算机要求这个LINUX网关交换数据包,没有吧,我可以说,就算你用的是3COM的网卡,基本上也无法负荷。
而用到如此浮动路由网络环境的企业一般也不会考虑用一台PC作为gateway来实现以上功能,所以在商业应用中的实际价值有限,对爱好者的实验环境来说是个好的方法。
不过还是佩服你得水平:)

 platinum 回复于:2004-04-16 10:29:51
看来PC就是PC呀 :mrgreen:

 andyliu 回复于:2004-04-16 11:29:37
申请此帖进精华,此法可以给中小企业的网管们多一个价廉物美的选择。

 platinum 回复于:2004-04-16 11:33:59
[quote:b891770fd2="andyliu"]此法可以给中小企业的网管们多一个价廉物美的选择。[/quote:b891770fd2]
为什么呢?

 andyliu 回复于:2004-04-16 12:01:58
其实LINUX中的ip rule相当于CISCO router的策略路由。
用PC代替专业路由器节约了成本,这就考虑到底是银子重要还是性能重要了。

[color=red:20397ebe95]“这里,我们还可以做一个小技巧,不告诉别人192.168.10.xx的地址,只告诉他们网关192.168.1.1上有这个服务 
iptables -t nat -A PREROUTING -d 192.168.1.1/32 --dport 21 -j DNAT --to 192.168.10.xx:21 ”[/color:20397ebe95]
这个方法好像更简单些,起码解释起来方便,而且画拓扑图也好画些。不过192.168.10.xx网段里如果还有其他机器也要你开放FTP服务,用NAT的方法就无法实现了。 :mrgreen:

 platinum 回复于:2004-04-16 12:50:53
要是那样,就直接把那些192.168.10.xx网段的IP告诉他们,只要在ip rule里加上那些to 192.168.10.xxx的策略,那么用户直接访问192.168.10.xxx时,路由会跟着一起变的:)

 andyliu 回复于:2004-04-16 12:55:03
明白,我只是说用nat没法做到:)

 platinum 回复于:2004-04-16 13:00:33
哦,对,呵呵

如果是CISCO,就可以了吗?
他是怎么实现的呢?

 JohnBull 回复于:2004-04-16 13:04:33
[quote:f421398250="andyliu"]写得很好,考虑得也很周密。
但普通PC的网卡性能有限,你有没有试过同事有100-200台计算机要求这个LINUX网关交换数据包,没有吧,我可以说,就算你用的是3COM的网卡,基本上也无法负荷。
而用到如此浮动路由网络环..........[/quote:f421398250]

别逗了,我不明白为什么这么多人盲目迷信"硬件".
你知道CISCO 4000路由器的CPU和网卡芯片吗?

 andyliu 回复于:2004-04-16 13:07:09
实现什么?
CISCO的NAT(PAT)和LINUX的NAT一回事啊,LINUX下实现不了,CISCO一样啊。

 andyliu 回复于:2004-04-16 13:17:33
[quote:71cda58c42="JohnBull"]

别逗了,我不明白为什么这么多人盲目迷信"硬件".
你知道CISCO 4000路由器的CPU和网卡芯片吗?[/quote:71cda58c42]

具体数据什么的我没查过,但以前我给一家公司实现线路备份,起先用一台PC装RH7.2加3块网卡来实现正常使用时用专线,断线备份线路用ADSL,但实际效果不行,机器经常死机(当然,也有可能我用的计算机不行,我用的是普通的P41.5GCPU芯片兼容机加3c905c网卡,256MDDR内存)。
但我换上了个2611加装IOS c2600-is-mz.122-11.T.bin后,的确稳定的多。
那个公司的客户端计算机台数大约是200台(包括一些测试用服务器)
声明我没有认为CISCO有什么好,只是把我遇见的事说出来而已。

 out 回复于:2004-04-16 14:04:38
[quote:149935a11f="andyliu"]

具体数据什么的我没查过,但以前我给一家公司实现线路备份,起先用一台PC装RH7.2加3块网卡来实现正常使用时用专线,断线备份线路用ADSL,但实际效果不行,机器经常死机(当然,也有可能我用的计算机不行,我用的?.........[/quote:149935a11f]

我也遇到过这种情况,但是是因为网卡是假的,换了块真的3com的网卡就搞定了,感觉linux做防火墙对硬件的要求还是很低的,top看看几乎没有什么占用。

 platinum 回复于:2004-04-16 17:18:30
这个贴子够精华了吗?
是我自己写的哦,参考了一些东西,但一点都没抄袭哦~~ :em03:

 yongpeng 回复于:2004-04-16 23:04:35
3COM have better performance because of card got internal cache memory to buffer traffics.

i got not problem P2/128MB PC be a linux router for 2000+ hosts network. but Freeswan with strong encrytion key, really slow down the PC, that is only component will bring down linux router performance. on the other hand, i always facing cisco router (2500) performance bring down by heavily LAN broadcast. 

Platinum setup migth not be good idea for large scale networks because of complex routing, but serve less than 100 hosts should not be problem. 

For large network router may need to carefully adjust the routing component and firewall rules, take out whatever unnecessary stateful check and nat, or kernel feature like syn cookie, or else just recompile linux as a router.

 platinum 回复于:2004-04-16 23:06:37
多谢大哥指点!

 andyliu 回复于:2004-04-19 12:01:34
虚心学习中

 andyliu 回复于:2004-04-19 12:58:30
啊哦,真的加入原创精华了耶,恭喜恭喜!

 platinum 回复于:2004-04-19 14:27:57
要不是大家帮忙顶,我估计就沉了~~~

 hrcxf 回复于:2004-04-19 16:07:09
eth0 192.111.1.4 255.255.255.0 连接192.111.1.0/24 
eth1 192.111.2.1 255.255.255.0 连接192.111.2.0/24 
eth2 210.xxx.xxx.xxx 255.255.255.248(连接internet) 
1、要求192.111.1.0/24和192.111.2.0/24都能上internet 
2、192.111.2.0/24不能访问192.111.1.0/24 
3、192.111.1.66/32能访问192.111.2.0/24 
除了用iptables实现以外,我想用ip route;ip rule实现.


这是我写的路游策略,不知道错在哪里?
ip route add 192.111.1.0/24 via 192.111.2.1 table goodnet1 proto static 
ip route add default via 201.xxx.xxx.xx table goodnet1 proto static 

ip route add 192.111.2.0/24 via 192.111.1.4 table goodnet2 proto static 
ip route add default via xxx.xx.xxx.xx table goodnet2 proto static 

ip rule add from 192.111.1.0/24 pref 15002 table goodnet1 
ip rule add from 192.111.2.0/24 pref 15003 table goodnet2 
ip rule add to 192.111.1.66 pref 15004 table goodnet2

#ip route flush table goodnet1 
#ip route flush table goodnet2 

/sbin/iptables -t nat -A POSTROUTING -s 192.111.1.0/24 -o eth2 -j SNAT --to xxx.xxx.xxx.xxx
/sbin/iptables -t nat -A POSTROUTING -s 192.111.2.0/24 -o eth1 -j SNAT --to xxx.xxx.xxx.xxx

 platinum 回复于:2004-04-19 19:00:31
有错误提示吗?
能把最后的信息给我看看吗?
ip route
ip route list table goodnet1
ip route list table goodnet2
ip rule
我看看这四个,里面的IP需要保密的,可以改一下

 aborigen 回复于:2004-04-19 21:05:23
[quote:3af959ca06="andyliu"]

具体数据什么的我没查过,但以前我给一家公司实现线路备份,起先用一台PC装RH7.2加3块网卡来实现正常使用时用专线,断线备份线路用ADSL,但实际效果不行,机器经常死机(当然,也有可能我用的计算机不行,我用的?.........[/quote:3af959ca06]

[code:1:3af959ca06]机器经常死机
[/code:1:3af959ca06]

这个....说不上来.....不过即使linux+ip route都能达到硬件一样甚至更好的效果,是有前提的:用的人很熟悉相关的东西。很多用路由的人没法花很多时间来学习。

 platinum 回复于:2004-04-19 22:36:18
恩,兼容性很重要,有的看着很烂的电脑,性能未必比“联想什么天歇”、方正什么的差,甚至比他们要好N倍(兼容性、稳定性,不是速度)

另外,确实和个人能力也有关系

 llzqq 回复于:2004-04-20 06:50:57
用专业的ROUTER软件ZEBRA做个性能超越CISCO硬件的ROUTER很容易。

 platinum 回复于:2004-04-20 07:39:41
[quote:a1a4710bdc="llzqq"]用专业的ROUTER软件ZEBRA做个性能超越CISCO硬件的ROUTER很容易。[/quote:a1a4710bdc]

也许是我笨吧,我虽然接触过几年的LINUX,但没接触过CCNA和NP,那个软件我一点都不会用,好像就是个路由器

说实话,我不赞同在LINUX上用模拟类似CISCO功能的路由软件,把LINUX搞的和路由器提示一样

 cup_coffee 回复于:2004-07-13 18:11:07
使用PC加网卡对付100-200人上网是没有问题的,并不是说使用cisco路由器一定稳定,使用PC+网卡就不一定不好,具体还是要看你的PC LINUX系统,如果你的LINUX编译的很精简,把很多不必要的东西去掉。那么LINUX可以达到甚至超过路由器。

 cup_coffee 回复于:2004-07-14 09:52:18
为什么使用多路由表来达到呢?使用一个路由表加上访问策略也可以实现啊  :)

 eggfangyi 回复于:2004-10-18 11:22:37
请问楼主:ip route add default via 192.168.10.1
这句的意思是不是将192.168.10.0设置成默认网关

 platinum 回复于:2004-10-18 11:56:35
对,只不过是用另外一种方法来写,用route命令也可以,但我喜欢用iproute

 JohnBull 回复于:2004-10-18 12:41:20
[quote:69d7704e97="andyliu"]
具体数据什么的我没查过,但以前我给一家公司实现线路备份,起先用一台PC装RH7.2加3块网卡来实现正常使用时用专线,断线备份线路用ADSL,但实际效果不行,机器经常死机(当然,也有可能我用的计算机不行,我用的是普通的P41.5GCPU芯片兼容机加3c905c网卡,256MDDR内存)。
但我换上了个2611加装IOS c2600-is-mz.122-11.T.bin后,的确稳定的多。
那个公司的客户端计算机台数大约是200台(包括一些测试用服务器)
声明我没有认为CISCO有什么好,只是把我遇见的事说出来而已。
[/quote:69d7704e97]

Go to hell.
Exactly, you were telling us what you saw, I mean, you saw a lot of idiots on linux.
They can even NOT setup a stable gateway.
I tell you what I did:
I made a gateway for 300 users: Celeron 433 + 2x8139 + 64M RAM.

Understand?

 eggfangyi 回复于:2004-10-18 13:32:41
谢谢楼主,有没有email或QQ的,给我一个,好经常与你探讨!

 Malfoy 回复于:2004-10-18 14:14:54


 andyliu 回复于:2004-10-18 14:46:58
[quote:57587ffd4e="JohnBull"]

Go to hell.
Exactly, you were telling us what you saw, I mean, you saw a lot of idiots on linux.
They can even NOT setup a stable gateway.
I tell you what I did:
I made a gateway for 300 users:..........[/quote:57587ffd4e]
这帖子居然还有人顶........
JonhBull兄,我早同意你的观点了,因为我的确做过相关比较,问题不在linux或cisco,而在网卡和设置.

 eggfangyi 回复于:2004-10-18 16:49:24
呵呵新手上路,不懂的地方有很多。再请教一句:
ip route add throw 0/0 table int1 proto static
整句意思何解,里面的throw、proto static又是什么意思?

 single1002 回复于:2004-10-18 18:16:56
楼主很强喔.但是没有谁会这样做的.带的动吗?用路由器啦
不一定用cisco啦.太贵

 jeffreyli 回复于:2004-10-18 20:47:05
楼主真历害呀,,,,,


什么时候才能到楼主这种地步呢|?
有没有什么秘诀呢?
 :em02: 呵榀

 weizhishu 回复于:2004-10-18 21:38:10
[quote:dd28fa7a1a="andyliu"]
这个方法好像更简单些,起码解释起来方便,而且画拓扑图也好画些。不过192.168.10.xx网段里如果还有其他机器也要你开放FTP服务,用NAT的方法就无法实现了。 :mrgreen:[/quote:dd28fa7a1a]


为什么不可做到,想一下可以的。本来这些nat就是基于ip和port的进行的。
如果他内网还有其它的机器开ftp,你还要通过192.168.10.1让他们进行访问,你在规则中肯定是要换端口的。例如还有192.168.0.50开ftp
iptables -t nat -A PREROUTING -d 192.168.1.1/32 --dport 9999 -j DNAT --to 192.168.10.50:21 
dport肯定是要换的,你不可能用一个端口.iptables+ip route2+tc的功能绝对不比硬件的路由器功能少。

 platinum 回复于:2004-10-18 22:35:11
[quote:d09864386a="single1002"]楼主很强喔.但是没有谁会这样做的.带的动吗?用路由器啦
不一定用cisco啦.太贵[/quote:d09864386a]
带的动,2000个点,正在跑,呵呵~

 ilikedown 回复于:2005-05-29 09:46:57
真强啊 ,可惜无法与楼主取得联系

我有好多问题啊????

vipabc@126.com

 wangyushan 回复于:2005-05-29 11:08:00


 xzjt 回复于:2005-05-29 12:12:10
用基于FREEBSD的mono做路由,用82559网卡P41.8CPU512内存,带2000个点性能绝对不亚于专业路由器,类似的专用OS很多,只要配置好都比专业路由器好,所谓思科的也不过是硬件+OS而已(思科的OS是FREEBSD内核)

 时速小弟 回复于:2005-05-29 12:57:42
一看 发贴的 就是个经验丰富  管理过  大网络的  高手啊!!



 :em11:

 liyanux 回复于:2005-07-07 13:50:10
都是高人呀,小弟佩服佩服,一定好好努力,顶

 jinscan 回复于:2005-07-07 14:26:35
顶~~~~~~~~~~~

 ghbspecial 回复于:2005-09-10 16:25:24
服了,厉害,向楼主学习

 cnadl 回复于:2005-09-10 17:03:43
刚刚看到有人顶白金的早期作品,呵呵,评论一下。

这个需求我觉得这么解决是杀鸡用了牛刀,当然从做试验的角度出发4好的,但是实际中要这么做的话技术的门槛就有点高了。

简单的解决方案:使用iptables的过滤功能,路由开放全部转发,放过允许访问的包,过滤掉其余即可。

补充说明:pbr即策略路由,特指以目的地址以外的其它条件进行路由,比较耗费资源,尽量少做。

讨论:还是这个情况,什么下要使用pbr呢?
给出一个使用pbr较好的拓扑,因为人懒,就不画图了,大家将就看一下吧。


...............---------DDN---------
hub-------|                           |-----------R---------spoke1
...............---------VPN----------

需求一:spoke1中部分用户要走vpn,级别高的用户要走ddn(注意:要使用原地址区别,如果这两者访问的IP不同,依然可以使用传统路由解决),可以使用pbr;

需求二:spoke1中到hub所有地址的视频/音频要走ddn,其他走vpn,则应使用pbr。

这是两个典型场景,大家可以对照下。

总之,运行的东西还是越简单越好,陋见,请指教。

 cnadl 回复于:2005-09-10 17:04:59
一年半过去了,不知道白金有没有做个v2的解决方案。 :mrgreen:  :mrgreen:  :mrgreen:

 bladefenix 回复于:2005-09-10 20:48:53
留名。。方便以后看

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网