LinuxSir.cn,穿越时空的Linuxsir!

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

简单方法建立squid+iptable的透明代理

[复制链接]
发表于 2003-11-29 14:30:09 | 显示全部楼层 |阅读模式
版权声明:本文随便大家转载,但是要说明出处为linuxsir就行
帮某网吧配置的,参考文章:
http://www.chinaunix.net/jh/38/62061.html
http://www.chinaunix.net/jh/38/107156.html
http://www.chinaunix.net/jh/38/63081.html
本文在没有说明的前提下,一般命令都是需要在终端下使用。

硬件环境:赛扬2.4G,256M DDR,865PE主板,两个Intel的pro100网卡,eth0为对外网卡,eth1为对内网卡。
系统:slackware9.1(因为安装快,而且设置也快)
系统安装:
分区:
/                    4G
/home           5G
/var               4G
/var/cache     25G
swap             512M
分区格式为reiserfs
为了方便,安装了KDE环境,配置完后卸载(下次偶用zhcon+w3c算了)。
安装没什么可说明的,Slackware的安装虽是文本界面,但是也算简洁,只要记得将ipfoward装上,然后启动时让它自动加载就是了。

配置:
1、网卡:
首先运行命令netconfig,配置对外网卡eth0,内网ip地址为192.168.1.12
然后修改/etc/rc.d/rc.inet1.conf,配置对内网卡eth1:
内容如下:
# Config information for eth1:
IPADDR[1]="192.168.11.254"     #IP地址
NETMASK[1]="255.255.255.0"    #掩码
USE_DHCP[1]=""
DHCP_HOSTNAME[1]=""

2、安装squid:
首先到这里下载:
http://www3.linuxpackages.net/pa ... ABLE4-i486-2rob.tgz
我就是用这个,应该是没问题的。
增加squid用户及组:用adduser命令吧,向导式的,最好把squid的home目录设定在/var/cache里
手动命令也可以:
groupadd squid
useradd -g squid -d /var/cache squid
slackware下还要设置一个地方才能用squid:修改/etc/services建立端口3128的tcp侦听,加上一行:
squid     3128/tcp      #squid proxy
这个要重启机器才能生效。
安装:终端下进入squid安装文件所在的目录,比如你下载在root目录下,运行installpkg /root/squid*.tgz
KDE下可以用kpackages安装,更简单

3、设定squid:
squid的配置文件在/etc/squid/squid.conf(老实说很讨厌squid的原配置文件,注释太多了,宁可它另开一文做配置说明)
配置如下:
#打开3128端口
http_port 3128
#cache的内存容量
cache_mem 64 MB
#cache的目录及容量,我是设定为12G
cache_dir ufs /var/squid/cache 12000 16 256
#允许网吧内所有机器访问
http_access allow all
#squid的运行用户及组
cache_effective_user squid
cache_effective_group squid
#http加速端口设置,透明代理能用上
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
httpd_accel_host virtual
保存,然后用squid -Z来定位缓存目录,如果出现失败,就chmod 777 /var/cache

现在先测试一下squid是否能用,运行squid:
squid
测试一下是否有进程
ps -aux | grep squid
如果有,我们随便找一台网吧上的机器试试,在IE的连接处设置代理:
地址:192.168.1.12,端口:3128,如果能上网,那恭喜你,已经差不多能完成了,如果不行,看看是哪里的设置出了毛病。

设置iptables:
当然我们不能要求网吧的客人们都设置IE或QQ的代理(-__-),这就是透明代理的好处,
因为网吧不仅仅是用来浏览网页或者聊Q,网络游戏连接需要各种端口,所以不能用iptables -F去丢包了
在/etc/rc.local下加入如下几行:
#加载iptables的相关模块:
modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
#把80端口的包全部转向3128端口
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
#ip转向,192.168.11.0/24为内网网段
iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -o eth0 -j SNAT --to 192.168.1.12

运行/etc/rc.d/rc.local,到此设置全部完毕,看看能不能上网,找一台内网的机器,设定IP地址为
192.168.11.2,网关为192.168.11.254,现在试试不用代理能否直接上网,用IE或者QQ试试看,如果成功了,就拿去给人家用吧。
难点在于配置iptables,偶也是弄半天才行,一般都是内网客户机用代理上网就可以,但是改IP就不行,呵呵。
如果大家在安装slackware上遇到什么问题,可以到本站linux版块上咨询,windrose和struggle两位斑竹恭候您的大驾。
最后说一点,那个网吧管理员说现在浏览网页比原来快了好几倍。呵呵,最近想考虑一系列用linux替代在网吧中使用windows做服务器的方案(还有路由),下一个研究目标是samba3.0
发表于 2003-11-29 17:02:05 | 显示全部楼层
感谢,有参考价值!!支持
 楼主| 发表于 2003-11-29 18:50:16 | 显示全部楼层
嗯…………samba3.0的相关资料这里有没有?
据说samba3比windows2003的网上邻居快2.5倍
发表于 2003-11-30 22:27:23 | 显示全部楼层
精华

多谢nbxmedia兄,辛苦了。



北南 呈上
发表于 2003-12-1 10:34:55 | 显示全部楼层
请教:echo "1" >/proc/……与echo 1 >/proc/……有何区别吗?
还有为何斑竹的网关设置为:254而非12呢?
发表于 2003-12-1 11:26:25 | 显示全部楼层

呵呵,请教大侠,我这样做错在哪里呢?

配置为:eth0为外部IP,eth1为内部IP,192.168.0.2。通过教育网与internet连接。squid工作正常,只差transparent proxy一直没有设置成功了。
我的脚本如下:
#!/bin/sh
echo "1" >/proc/sys/net/ipv4/ip_forward(此处应该是打开FORWARD吧,但我不知我安没有安装ipforward,该怎样查看呢?)
/sbin/iptables -F -t nat(清除以前的NAT规则吧)
iptables -t nat -I PREROUTING -i eth1 -p tcp -s 192.168.0.0/24 -d 192.168.0.2 --dport 80 -j ACCEPT(因为我的这台代理装了,web服务,从网上看到的说是要添加这一句,不知对否?)
iptables -t nat -A PREROUTING -i eth1 -p tcp -s 192.168.0.0/24 --dport 80 -j DNAT --to 192.168.0.2:3128(这句应该是转发所有局域网内的数据包到内网卡吧,呵呵一知半解啊)
iptables -t nat -A POSTROUTING -o eth0 -p tcp -s 192.168.0.0/24 -j SNAT --to 192.168.0.2
之后运行iptables -t nat -L 屏幕显示如下:
chain PREROUTING (policy ACCEPT)
num  target  prot opt  source          destination
1    ACCEPT  tcp  --  192.168.0.0/24  192.168.0.2  tcp dpt:http
2    DNAT    tcp  --  192.168.0.0/24  anywhere    tcp dpt:http to:192.168.0.2:3128
chain POSTROUTING (policy ACCEPT)
num target prot opt     source     destination
1    SNAT  tcp  --   192.168.0.0/24 anywhere  to:192.168.0.2
局域网里客户机的网关设置为:192.168.0.2,DNS为代理服务器上的DNS。但是还是不能实现透明代理上网呢,呵呵,还望高手赐教!
发表于 2003-12-1 17:34:06 | 显示全部楼层
   
发表于 2003-12-1 17:34:07 | 显示全部楼层
  
发表于 2003-12-1 17:47:15 | 显示全部楼层

hehe,我这样做错在哪里呢?请各位大虾指正!

发表于 2003-12-1 17:49:33 | 显示全部楼层
ptables -t nat -I PREROUTING -i eth1 -p tcp -s 192.168.0.0/24 -d 192.168.0.2 --dport 80 -j ACCEPT(因为我的这台代理装了,web服务,从网上看到的说是要添加这一句,不知对否?)
用prerouting链怎么行呢:ask iptables -A INPUT --dport 80 -j ACCEPT
透明代理应该iptables -t nat -A PREROUTING -i eht1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
建议先看看iptables的基础吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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