免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2120 | 回复: 9
打印 上一主题 下一主题

网上流传的“iptables+squid实现透明代理”是否有点不妥?希望大家来讨论。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-02 20:46 |只看该作者 |倒序浏览
网上盛传的squid+iptables实现透明代理的教程我看了不少,包括CU里的,但我觉得不妥!
CU里以前也讨论过,但没看到过结果
1、到底有没有真正的透明代理?
http://bbs.chinaunix.net/viewthread.php?tid=243014&highlight=透明代理
2、假透明代理,怎么回事?
http://bbs.chinaunix.net/viewthread.php?tid=242650&highlight=透明代理
发上面两个帖子的作者和我的思想是一样的。

网上盛传的教程步骤:
环境:eth0连公网:a.b.c.d eth1连内网:192.168.1.0/24
1、squid能正常运行后,修改squid.conf文件添加以下字段
http_port 3128
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

2、建立启动脚本iptables命令
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to a.b.c.d

3、客户端设置192.168.1.0/24内的地址,网关设为eth1的地址,DNS设置公网DNS就实现透明代理

OK,问题出来了,iptables 第二句到底在配合squid中起了什么作用?如果停止squid服务,内网一样可以上网,可以看出第二句只是起了共享上网作用。但是不要第二句,所谓的透明代理根本无法实现。

我买了一本参考书,《Redhat Linux 9网络服务》中关于squid+iptables透明代理讲的也很简单,但是绝对没有SNAT这一句。

希望大家能够讨论一下,好的原创教程能促进学习,但错误的教程却是误人子弟阿!

[ 本帖最后由 virtuaboy 于 2006-8-3 08:02 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-08-02 21:22 |只看该作者
哈哈,它是从下往下匹配的吧。

会不会是这个脚本是为了备份呢(SQUID OVER的情况下?)

论坛徽章:
0
3 [报告]
发表于 2006-08-02 23:31 |只看该作者
不是备份的问题,如果没有SNAT这一句的话,前面的都是白搞,上不了的,已经试过好N次了。

论坛徽章:
0
4 [报告]
发表于 2006-08-02 23:37 |只看该作者
其实没有真与假这个概念,只是原理而已。

第二句是有用的,在透明代理的环境中,至少你用客户端打开个Web站点时,你先进行的DNS查询,然后才是发送HTTP请求,正是第二句完成了你的DNS查询,第一句完成了HTTP代理。

[ 本帖最后由 Badmi 于 2006-8-2 23:38 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-08-02 23:40 |只看该作者
原帖由 virtuaboy 于 2006-8-2 23:31 发表
不是备份的问题,如果没有SNAT这一句的话,前面的都是白搞,上不了的,已经试过好N次了。


你的  code:
  1. iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp--dport 80 -j REDIRECT --to-ports 3128
复制代码


这边打错:
  1. tcp--dport 80
复制代码


应该是:
  1. tcp --dport 80
复制代码


另外我个人的建议是:

1. 请执行 iptables-save 后把结果贴出来看,也就是你认为所有该透明代理的配置都设定好时候的状态。

2. 标题请取好看一点的描述,因为你有歧视他人的味道,引起他人不愉快的用字。你大可以说我的 "透通代理" 似乎无法工作就好,而不是使用这种标题用语。

==

论坛徽章:
0
6 [报告]
发表于 2006-08-02 23:45 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2006-08-03 08:26 |只看该作者
首先对标题感到抱歉,我已经改了,但我却是没有歧视他人的意思,另外感谢kenduest 上次给我的帮助。

1、iptables 第一句,我是从网上粘贴过来的,我也是觉得有错误。
我自己的是iptables 很简单,就是怕出错,所有的链我检查了默认都是ACCEPT
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A PREROUTING  -i eth1-p tcp --dport 80 -j REDIRECT --to-port 3128

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source a.b.c.d

这一句我加和不加都试过。

2、我所说的 squid能正常工作,意思是局网内的计算机,将代理服务器地址设置进浏览器,就可以正常访问网页。

[ 本帖最后由 virtuaboy 于 2006-8-3 08:43 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2006-08-03 20:20 |只看该作者
原帖由 Badmi 于 2006-8-2 23:37 发表
其实没有真与假这个概念,只是原理而已。

第二句是有用的,在透明代理的环境中,至少你用客户端打开个Web站点时,你先进行的DNS查询,然后才是发送HTTP请求,正是第二句完成了你的DNS查询,第一句完成了HTTP代 ...



上面不是说得很清楚了吗?把第二行删除,再用ip 地址访问网站,就应该可以验证了,如果其它iptables 没有问题的话。

论坛徽章:
0
9 [报告]
发表于 2006-08-03 20:28 |只看该作者
经过自己的摸索,终于找到了答案,根本不用SNAT这第二句就可以实现透明代理。
我还是把《Redhat Linux 9网络服务》中关于dport转发到3128端口这一句仔细想了想。
它的原句是这样的,但是没有声明自己的网络环境

  1. iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
复制代码

我的环境是单网卡共享,ppp0和eth0。突然想起这本书的以前的网络服务都是分eth0接外网,eth1接内网。
我将这一句改成

  1. iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j REDIRECT --to-port 3128
复制代码

就OK了。但是内网和ppp0怎么连通?我不是很理解。因为内网的网关指向的是eth0,哪位大侠还请告知。
所以网上盛传后面加上SNAT的一句的教程都是错误的,这样的代理起不了任何限制作用。

论坛徽章:
0
10 [报告]
发表于 2006-08-03 20:34 |只看该作者
原帖由 Badmi 于 2006-8-2 23:37 发表
其实没有真与假这个概念,只是原理而已。

第二句是有用的,在透明代理的环境中,至少你用客户端打开个Web站点时,你先进行的DNS查询,然后才是发送HTTP请求,正是第二句完成了你的DNS查询,第一句完成了HTTP代 ...


谢谢你的回复,但是第二句不仅可以完成DNS查询,而且可以可以代理上网,比如本意是通过squid限制内网只能浏览WEB,但加上这一句,内网的任何功能都俱全了。
我的透明代理已经设置成功了,客户机只需要设置IP 地址、子网掩码、网关指向squid服务器,DNS 不用设置就可以上滴
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP