LinuxSir.cn,穿越时空的Linuxsir!

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

请熟悉iptables的朋友来看看这个:

[复制链接]
发表于 2004-1-12 21:23:18 | 显示全部楼层 |阅读模式
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -o eth0 -j SNAT --to 192.168.1.12
这是nbxmedia版主在精华贴中:简单方法建立squid+iptable的透明代理中的方法。在这第一句中是端口转向,第二句是做了一个源地址映射,我也按照这篇文章进行了配置,开始我也以为是透明代理做成了,可是后来仔细检查发现不对劲。首先,我的squid单独使用已经正常。但是这里的这两句,我只要第二句就可以上网,但这是NAT方式啊,我的squid并没有启作用啊,为了证明,我关掉了squid客户端也可以正常上网。而我只留第一句就没有反应了,作透明代理还需要什么呢?据说在squid中需要编译的时候加载什么模块,我是redhat9默认安装的,我也不知道到底行不行,如果不删除squid有什么方法可以看到它加载了哪些模块呢?有没有什么方法进行重新加载呢?
发表于 2004-1-13 12:19:12 | 显示全部楼层
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
有第1句就可以了啊 你的squid是3128吗 先在浏览器里设置代理服务器看看能不能正常上网 先测试SQUID是不是工作了
 楼主| 发表于 2004-1-13 13:19:34 | 显示全部楼层

我的squid是3128,也可以正常工作。

在客户机上添加代理是可以上网的,但是用iptables这一句确不行,改来改去都不行。
 楼主| 发表于 2004-1-13 13:35:14 | 显示全部楼层

就像上面,如果第一句就可以了

为什么每个介绍透明代理的资料上都有两句呢?如果透明代理可以成功,那么再加第二句的理由又是什么呢?不至于是双保险吧:)
发表于 2004-1-13 16:11:44 | 显示全部楼层
你要更多的注意他的上下文

eth1连接内部网络,网段为192.168.11.0/24
eth0连接外网,网段为192.168.1.0/24(网关的外网地址是192.168.1.12)

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

这句的作用是把从内网进入网关,目标端口为80的访问转交给squid(假设默认squid为3128),如此,内网的机器不需要在浏览器(IE等)中设置代理服务器地址,其对外访问在进入网关时自动被强行转交给squid了,这就是透明的含义(不需要客户端设置)。

iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -o eth0 -j SNAT --to 192.168.1.12

如果你希望客户机只能看网页,并且内部有正常运作的dns server,并且客户机均使用这些内部dns server,这一句可以不要;

一般情况下,不是这样,所以需要这句为客户机提供除了“浏览端口为80的网站”以外的能力,比如上qq、ftp等等。
 楼主| 发表于 2004-1-13 16:53:32 | 显示全部楼层

我的配置也是一样的啊

eth1为外网,哦,我想起来了,我做网关的机器是在局域网内的,所以我把第二句改成了:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 192.168.0.226
我的内网卡接得是192.168.1.0段,我的"外网卡"地址是:192.168.0.226
这样设置以后,我的内网机器是可以上网的,但是透明代理无法进行,请问这跟我的"外网"也是局域网有关系么?
发表于 2004-1-13 18:20:08 | 显示全部楼层
对iptables所知不多,在这和各位探讨,不对之处,请指正。

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
这一句是配置“透明代理”用的,只有在安装了squid并正确运行了才会有效。

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 192.168.0.226
这一句是配置局域网1(192.168.1.0/24)内机器访问外网(192.168.0.0/24)用的。

所以,只要有第二句,就可以实现"上网"。

如果只有第二句,没有第一句,那局域网1(192.168.1.0/24)内的机器也可以实现“上网”,并也不需要在客户端进行什么端口指定,也可以说是一种“透明上网”。

而在安装并运行了squid后,则需要第一句的配合,才能实现透明上网。

在这里,我对“透明上网”的理解是:客户端机器不需要进行任何的配置,就可以实现上网。

不对之处,请指正。
 楼主| 发表于 2004-1-13 21:13:23 | 显示全部楼层

现在的问题是第一句无法实现

我也找不到是哪里的错误
发表于 2004-1-14 09:31:09 | 显示全部楼层
linux的困难之处和乐趣就在这里了。
 楼主| 发表于 2004-1-14 11:43:55 | 显示全部楼层

我现在只体会到了困难

再搞搞就没有乐趣了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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