Linux 版 (精华区)

发信人: tcpip (偶的昵称改了), 信区: Linux
标  题: ipchains使用小结(透明代理网关)(转寄)
发信站: 哈工大紫丁香 (Mon Mar  6 12:49:19 2000), 转信

发信人: peny (在汪洋中无法停游的鱼), 信区: Linux       

标  题: ipchains使用小结(透明代理网关)

发信站: BBS 水木清华站 (Mon Mar  6 06:23:35 2000)

这几天想为实验室做一个透明网关,以前也做过,

不过是在2.0.34的kernel上用ipfwadm做的,现在用RedHat6.0,

2.2.5的kernel,就把ipchains的东西看了一下,在bbs.smth.org

看了一下别人的讨论,又在www.chpcc.edu.cn上找了篇ipchains HowTo,

加上man和IP alias mini-HowTo,自己配了一下。

在配的过程中觉得大家的讨论非常有用,但就是不好找(对我这种懒人:)

今夜无法入睡,就把讨论整理一下好了,算是一个回报。

(标题里包含了ipchains,透明,网关,代理等字样,实是为了方便/ ?)

1、【 在 DBPZ (小石头※从头再来) 的大作中提到: 】

 升级到RH 6.0,  ipfw不能用了,请问怎样配置ipchains做透明网关?

**andrewleu (淡入淡出)答道:

ip chain 和ip masqua... 有一个一一对应的关系

比如:

Old command: ipfwadm -F -p deny

New command: ipchains -P forward DENY

Old command: ipfwadm -F -a m -S 192.168.0.0/24 -D 0.0.0.0/0

New command: ipchains -A forward -j MASQ -s 192.168.0.0/24 -d 0.0.0.0/0

ip chain 还能传送icmp包,不过觉得用不找就没研究过.

**czhu (国姓爷)说:

有ipfwadm-wrapper, 就是ipfwadm

**vertex (happy hacking)深沉的说:

ipchains have been totally rewriten .

ipfwadm is supported by linux kernel <= 2.0.x

ipchains is supoorted by linux kernel <=2.2.x

the next ip masq admin tools will be netfilter in 2.4.x

the 2.3.x series is now used netfilter written by the same author of ipchai

ns.but not the ipfwadm.

2、 【 在 Lamborghini (寻找欧宝中) 的大作中提到: 】

:  近日安装RH6,内河是重新编译过的2.2.5smp,装了两块Intel EtherExpress PRO100

+:  ,一块做192.168.5.2是内部网的gateway,另一块是192.168.1.150,连接外部网络,

:  可是现在ping的情况却是这样的:

:                      192.168.5.2   192.168.1.150 192.168.5.*   192.168.1.

*:  内部机器192.168.5.*  OK            OK            OK            failed

:  外部机器192.168.1.*  failed        OK            failed        failed

:  这个是不是也太严格了一点?我想要的是内部网的机器能够访问外部的,而外部的

不能:  访问内部就可以啦,有谁知道这是怎么会事吗?

:  我的ipchains 初始化文件如下:

:  ipchains -F forward

:  ipchains -P forward DENY

:  ipchains -P input ACCEPT

:  ipchains -P output ACCEPT

:  ipchains -A forward -j MASQ -s 192.168.5.0/24 -d 192.168.1.0/24

:  哪位牛人能告诉我怎么回事啊?别说是kernel版本太低,或者是没有编译过啊,这

两:  个原因可以排除

**vertex (lancelord)答道:

以上的ipchains的配制没有问题.

我想你的问题好象是 网络的转发功能没有打开...

forward 打开了么..

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

or  {

        edit /etc/sysconfig/network

        forward=true or yes..

        then.

        /etc/rd.c/init.d/network restart.

}

3、【 在 manChair (风儿) 的大作中提到: 】

:  做过的大虾小虾请出手吧

:  怎么把内部的ip变成可以直接连出去的呢

:  都需要增加哪些chains呀

:  不太明白, 文挡里面没有离子啊,

:  多谢了

**hsen (若弱)答道:

如下

#!/bin/sh

#10.1.255.254是网关地址

ipchains -F input

ipchains -F forward

ipchains -F output

ipchains -N acc-in

ipchains -N ext-in

ipchains -F acc-in

ipchains -F ext-in

ipchains -P input ACCEPT

ipchains -P output ACCEPT

ipchains -P forward MASQ

ipchains -A input -s 10.1.0.0/16 -j acc-i

ipchains -A input -d 10.1.0.0/16 -j ext-in

ipchains -A acc-in -d 10.1.255.254 -j RETURN

ipchains -A acc-in -s 10.1.255.254 -j RETURN

ipchains -A acc-in -s 202.xxx.xxx.xxx -j RETURN

ipchains -A acc-in -d 162.105.0.0/16 -j RETURN

ipchains -A acc-in -d 166.111.0.0/16 -j RETURN

ipchains -A acc-in -d 202.38.0.0/16 -j RETURN

ipchains -A acc-in -d 202.112.0.0/13 -j RETURN

ipchains -A acc-in -d 202.192.0.0/12 -j RETURN

ipchains -A acc-in -d 210.32.0.0/12 -j RETURN

ipchains -A acc-in -d 159.226.0.0/16 -j RETURN

ipchains -A acc-in -d 210.72.0.0/13 -j RETURN

ipchains -A acc-in -d 203.93.0.0/17 -j RETURN

ipchains -A acc-in -d 161.207.0.0/16 -j RETURN

ipchains -A acc-in -d 168.160.0.0/16 -j RETURN

ipchains -A acc-in -d 202.24.0.0/22 -j RETURN

ipchains -A acc-in -d 202.88.0.0/13 -j RETURN

ipchains -A acc-in -d 202.96.0.0/12 -j RETURN

ipchains -A acc-in -d 203.88.0.0/22 -j RETURN

ipchains -A acc-in -d 203.90.0.0/22 -j RETURN

ipchains -A acc-in -d 203.196.0.0/22 -j RETURN

ipchains -A acc-in -d 203.208.0.0/22 -j RETURN

ipchains -A acc-in -p tcp -d 0.0.0.0/0 4000 -j RETURN

ipchains -A acc-in -p udp -d 0.0.0.0/0 4000 -j RETURN

ipchains -A acc-in -s 10.1.2.122 -j RETURN

ipchains -A acc-in -s 10.1.2.191 -j RETURN

ipchains -A acc-in -s 10.1.3.12 -j RETURN

ipchains -A acc-in -s 10.1.3.55 -j RETURN

ipchains -A acc-in -s 10.1.2.112 -j RETURN

ipchains -A acc-in -s 10.1.1.9 -j RETURN

ipchains -A acc-in -j REJECT

4、单网卡可以用ipchains吗?

**jgsun (Gany)答道:

现学现卖的说:

1. 用ip alias把内部网的网关与eth0绑定,这样同一个网卡就同时对应了两个ip地址,

   say 166.111.x.x and 192.168.1.1,这就完全等价于两个网卡对应两个地址,内部

   网的packets送往192.168.1.1,经过系统对packets的重新包装后,再经166.111.x.x

   送出,而internet送往内部网的packets先进166.111.x.x,由系统解包后,再竟

   192.168.1.1送往内部网.

2. 在rc.local中加上

   ipchains -F forward

   ipchains -P forward DENY

   ipchains -P input ACCEPT

   ipchains -P ouput ACCEPT

   ipchains -A forward -s 192.168.1.0/24 -j MASQ

注意,ip4_forward要打开

就齐活.

5、【 在 lank (大郑) 的大作中提到: 】

:  一用cuteftp 就报

:  error opening data socket

:  原来用socks5代理出去就没事,

:  为啥?

**starw (孤星)答道:

modprobe ip_masq_ftp

或者试试打开cuteftp->options->firewall->pasv mode

**很多人说:

insmod ip_masq_ftp

6、 ipchains有logs的吗?

【 在 oasis2k (伤信) 的大作中提到: 】

:  我想知道有谁用过的的机器作网关,我想得到这些资料

:  在哪里可以找到ipchains的日志文件??//bow

**janus (beater)答道:

ipchains -l ...

/var/log/messeges

7、内部局域网的机器用的是WIN98和NT,需要有什么设置吗?

答:把IPCHAINS的那台机器地址设为网关, DNS地址照旧

8、CuteGuy关于代理服务器的心得:

Linux下比较成熟的代理服务器软件是Squid。

透明代理这个说法不是很确切,我想你应该指的是NAT技术,

有时候又叫做“透明网关”,说白了,就是在IP层将内部网络

发往外部网络的IP数据报源地址转换成有效的出口地址,将外

部返回的IP数据报转发给原请求方,内部主机虽然使用的是内部

地址,但是只需要将“透明网关”主机内部地址设置为本机网关,

不需要任何其它设置就可以直接上网了,如果NAT做得好的话,

就好象没有经过什么东西直接上的网一样。所以叫“透明”。

NAT的好处是与高层协议基本无关,而代理服务器就是与高层

协议有关的,分为FTP代理、HTTP代理、telnet代理.......

这样在增加新的应用的时候,如果使用NAT技术,就不需要考虑

是否能够通过代理出去。当然NAT的缺点是不能象代理那样通过

设置磁盘Cache来提高效率。

Windows下支持NAT技术的典型软件是Winroute,Linux则在内核

中包含ipchains/ipfw可以支持NAT。还有商业防火墙软件大都支持

NAT,某些路由器也支持。

NAT通常在IP地址不够,必须使用内部地址的时候使用。163的

10.x.x.x实际上就是内部地址,通过NAT出去的。

9、CuteGuy (这个春天有点冷)当年的问题:

:  一个机房因为IP地址不够,原来用NT Server+MS Proxy做代理,速度太慢,

:  现在准备用Linux做IP地址映射,内部IP为192.168.1.X,可以透明访问外部

:  大家觉的用什么软件做好呢?

:  另外,现在这台机器已经装了TLC 3.0.2 PR1,内核针对router优化编译过,

:  网卡分别是3C905和D-Link 530TX,主机为Dell PII 300,64MRAM,大概要带

:  五十台左右上网的机器,这样的配置合适么?感谢!:))

**yhuang (cat)的解答:

就用它吧,不用改系统了,具体参考<<ip伪装HOWTO>>, 我简要介绍一下:

 1. 首先让你的两块网卡都跑起来,用/sbin/ifconfig确认一下,我的是这

    样的:

lo        Link encap:Local Loopback

          inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0

          UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1

          RX packets:2689 errors:0 dropped:0 overruns:0

          TX packets:2689 errors:0 dropped:0 overruns:0

eth0      Link encap:Ethernet  HWaddr 48:4F:4D:F9:0E:5E

          inet addr:202.115.65.140  Bcast:202.115.65.255  Mask:255.255.255.

0          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:180600 errors:0 dropped:0 overruns:0

          TX packets:13896 errors:0 dropped:0 overruns:0

          Interrupt:4 Base address:0x300

eth1      Link encap:Ethernet  HWaddr 00:80:C8:E1:DE:CF

          inet addr:192.9.201.250  Bcast:192.9.201.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:29567 errors:0 dropped:0 overruns:0

          TX packets:15848 errors:0 dropped:0 overruns:0

          Interrupt:3 Base address:0x340

    要有两个eth?才对.

    3.然后打开内核的IP forward, 在/etc/sysconfig/network里面应有这样一句:

      FORWARD_IPV4="yes"

    4. 让Linux在启动时装入ip_masq模块并设置IP转发规则, 在/etc/rc.d/rc.local

       里添加下面的几行:

/usr/sbin/ipfwadm -F -p deny

/usr/sbin/ipfwadm -F -a m -S 192.168.xxx.xxx/24 -D 0.0.0.0/0

/sbin/modprobe ip_masq_cuseeme

/sbin/modprobe ip_masq_ftp

/sbin/modprobe ip_masq_irc

/sbin/modprobe ip_masq_quake

/sbin/modprobe ip_masq_raudio

/sbin/modprobe ip_masq_vdolive

    5. 注意:不要启动routed、gated等网关程序, 两根网线不要插反了。

****peny注:我老土,配了ip alias, 配好routed,配好ipchains,可是就是不能

            出内部网,折腾了一个下午,最后看到yhuang (cat)的这篇,关键是

            这第五条,不能启动routed。我自己想透明网关,自然而然的把它当

            router来配了。

10、【 在 suzhe (I Love Linux) 的大作中提到: 】

:  用modem带20台机器同时上网,为了省电话费还要实现自动拨号

:  和挂断功能.

:  本来想用squid做个缓冲代理,可是一用squid,diald自动拨号就

:  不灵了,真气人!

:  另外服务器上的sendmail不知为什么不能转发邮件,哪位大虾知

:  道如何配置sendmail实现外发邮件的功能,请指教一下.另外是不是

:  qmail要好用一些?

**emprise (富国强兵)的回答:

我是直接在/etc/mail/access中允许对大多数域名的转发,如

net  RELAY

com  RELAY

然后 make access.db, 再让sendmail重读配置文件就可以了

这样不用重新生成sendmail.cf, 比较省事的说.

11、xsz (勇哥~努力!~奋斗!)的高级应用

**xsz (勇哥~努力!~奋斗!)大声发问:请问有没有人这么用ipchains的?

用ipchains做了个route,连接两个子网:192.168.1.0,166.111.2.0,

现在在166.111.2.0里有台机器166.111.2.3跑的是NT Server,用来做

PDC,然后192.168.1.0内部的机器通过使用lmhosts文件注册该PDC并

跨网段登录到该PDC上,直到此为止一切都是正常的,即子网内的机器

可以看到PDC及192.168.1.0网段内的所有机器,但是却看不到166.111.2.4

这台同是域内的机器(该机器也在lmhosts内注册了),使用windows的

search computer能够找到该机器,使用\\166.111.2.4的方法也能访问

该机器上的资源,但是反之,从PDC或者是166.111.2.4上却不能看到

192.168.1.0内的机器,查找也找不到,问题描述得查不多了,我有以下

几个问题:

1. 能否使192.168.1.0内的机器不用查找而直接在network neighbour

   里看到166.111.2.0里的机器?如果能,该如何配置192.168.1.0内

   的windows 9x/nt客户机?

2. 能否使166.111.2.0里的机器直接从网邻中直接访问192.168.1.0

   中的机器?如果能,该如何配置166.111.2.0内的机器或者该如何

   设置ipchains?

其实说白了就是个跨网段的NT单域模型,中间用个linux box连接起来,

只不过我以前没做过类似的实验,有点找不着北,不知道这个反向访问

子网内的机器该如何操作,有经验的大侠给点提示. //bow

下面开始了乱哄哄的回应

**scaner (我是一头猪,默默去等待)犹豫了一下:

需要配个网桥了, 不然ipx包出不去

只要能让ipx包出去, 怎么都可以了,

我个人认为

**xsz (勇哥~努力!~奋斗!)不满的说:

我不用ipx,用的纯tcp/ip协议,连netbeui都不用,一贯如此,

还有什么地方要注意吗?

**starw (孤星)跳了出来,嬉皮笑脸:

1 samba带的wins服务开了没有?把linux作为内部机器的wins server

  或者用外面的NT行不行,不清楚啦,你看看samba的东东吧

2 我想除了ipchains的配置外,外面的机器需要加上相应的路由

  估计每台机器都要加吧,或者直接加在2.1(网关?),不过这个可能性

  不太大吧,嘻嘻

我没干过这些啊,纯属虚构,如有雷同......

**ruster (氰化钾)思考了一下,断然说道:

大概可以这样做的,仅仅是个想法,没试过

从192.168.1.0到166.111.2.3的包不MASQ.这需要动166.111.2.0的路由

从192.168.1.0到外地的包仍然MASQ.

将网关做成一个wins中继器.

**xsz (勇哥~努力!~奋斗!)的要求还很高:

问题是我不可能动到166.111.2.0的路由,我只能想办法在192.168.1.0

的子网上下功夫,如果把192.168.1.1配成个wins server的话能行吗?

我试过在PDC(166.111.2.3)上设置wins可是没有任何效果:(

**ruster (氰化钾)高深莫测,不愧为剧毒:

可以的,问题是你必须想个办法让166.111.2.*访问到你的内部网.

将192.168.1.1设置成外部机器的缺省网关?

如果你用MASQ那么wins好像是不起作用的

大体上应该和净化区里面带DMZ的防火墙系统的方案差不多吧,

到166.111.2.*的包不MASQ,到外面的包MASQ,在内部和166.111.2.*之间加一个

wins proxy.我没试过,你可以试试看

**scaner (我是一头猪,默默去等待)不甘寂寞:

那我觉的用tcp的可能性不大牙,

如果没有特殊配置, tcp没法通过ipmasq

穿到内部来了, 而smb服务又不能随便换

端口. 个人观点

**xsz (勇哥~努力!~奋斗!)看了看scaner (我是一头猪,默默去等待),

一声冷笑:

呵呵,我说一个我做的实验吧:

在166.111.2.3上配置双IP(166.111.2.3/166.111.2.1,192.168.1.5/192.168.1.1),

配置双网关是为了寻址192.168.1.0网段时能够找到合适的路由,然后在166.111.2.3

上的lmhosts文件了加上注册地址192.168.1.0网段内的机器名的解析,这时候从

166.111.2.3上是能够访问到192.168.1.0内的机器的,只是这个时候同样在网邻里

是看不到的,只能直接用\\192.168.1.2(或\\机器名)的方式访问,但是这样消耗了

一个内部IP,而且必须配置双网关,在正常网络里双网关常导致寻径失败,经常

网络连接就会莫名其妙的断掉,所以只能说是个权宜之计:(

**ruster (氰化钾)再支一招:

这样吧.你把windows客户的网关指向166.111.2.3试试.

**xsz (勇哥~努力!~奋斗!)得寸进尺:

是指把外部的166.111.2.*的机器的网关改成166.111.2.3吗?

可这样的话岂不是所有的数据都从166.111.2.3走了?那我的

166.111.2.*的优势不就没有用上?

**ruster (氰化钾)吐血:

又要马儿跑,又要马儿不吃草,您这个....:(

**xsz (勇哥~努力!~奋斗!)忽然大叫一声,脸上一阵狂喜,

狂喜里又透着莫名其妙:

刚刚又测试了一把,结果居然通了,偶faint,天知道上回为什么不通,

不过结果并不理想(tracert的结果很慢),就当是个纯技术测试吧.

呵呵,搞了这么多天的互通,也算终于有个结果了,罢手了:)

**MrX (毛线球)这时凑了过来:

:  In my case, the other Sub net can see the other sub net in the net neigh

bor,

:  but when click, reported with 找不到网络路径。用IP访问则可以。//sigh.

**xsz (勇哥~努力!~奋斗!)一面盘算等会找哪个mm陪自己去吃饭,

一面漫不经心的支吾:

呵呵,这个我在内部网访问外部网时已经解决了:)

而且这应该是最容易解决的啊

关键是现在通过外部访问内部时还是有问题,

如果按前面一位朋友说的用:

ipchains -A forward -s 192.168.1.0/24 -d 166.111.2.0/24 -j ACCEPT

ipchains -A forward -s 192.168.1.0/24 -d ! 166.111.2.0/24 -j MASQ

ipchains -A forward -s 166.111.2.0/24 -d 192.168.1.0/24 -j ACCEPT

ipchains -A forward -s ! 166.111.2.0/24 -d 192.168.1.0/24 -j MASQ

的方法的话,内外互相访问没问题,可是内部却上不了

internet了,真是faint

现在正在研究这个chains怎么设置才行呢:(

呵呵,提示一点:

ipchains + lmhosts/wins

单向的话前面的例子多了,双向的话看我刚才的那个ipchains策略

(其实是前面一个大侠指点的,我照样画了一个:P)就可以了

我一直没有试wins,因为没装wins server:PP,等哪天有空拿samba

试试它的wins吧,记得内外网段内的机器都要写好对应的lmhosts

**MrX (毛线球)一脸的失望:

hehe. 我早已用了WINS了,就是觉得LMHOSTS输入烦才想是否有其他法门的。

双向我不会,也不想用。

看来还的用LMHOSTS。

多谢。

--

※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.114.77.21]


--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:208.012毫秒