最近搞了个openwrt的router,以往都用代理来上网,可是代理每次都要设置端口啊,代理IP这些,以为很心烦。如今好了,用openwrt搭建一个透明代理,让全部接上这个router的人都经过代理上网,还能够对他们监控和进行一些规则设定: )vim
个人Local proxy是这样的,如图:服务器
个人squid版本为2.7ssh
很是多的电脑接入个人openwrt,我用的是淘宝买的DB120。感受还不错,而后我ssh进入openwrt。tcp
1 ssh 192.168.8.1 –l root
随后输入密码,进入登录界面,先安装squid。工具
1 opkg update 2 opkg install squid
安装完后,和对PC机Linux的squid操做同样,编辑squid.conf网站
1 vim /etc/squid/squid.conf
按照另外一篇个人另外一篇《Linux network proxy and route》里边对squid.conf的配置后,要多添加点东东。首先说一些相关的语法:ui
cache_peer [上层proxy主机名] [proxy角色] [proxy port] [icp port] [额外参数]spa
cache_peer_access [上层proxy主机名] [allow|deny] [acl名称]设计
主要是用acl设计一个名称后,再以cache_peer_access去放行或者拒绝读取。代理
好了,个人上层proxy是172.16.54.159,因此在squid.conf里边添加:
1 cache_peer 172.16.54.159 parent 3128 3130 proxy-only no-query no-digest
这样就成功设置了上层proxy,下面如何强制全部在192.168.8.x网段的人都必定要用个人proxy上网呢?也就是说每台机不用设置proxy也能够直接使用openwrt的proxy上网。其实很简单,继续在squid.conf里边的http_port中添加:
1 http_port 3128 transparent
保存后退出,启动squid就能够了,很简单吧?固然这里只是简单的配置了,若是还想要更多的功能,须要本身去了解下squid.conf就能够了,我比较懒,就作到这么多了: >
还有一些问题须要注意,怎么知道本身的squid.conf启动了呢?
可是只是作了squid.conf的配置还不行呢,必须把端口80重定向到3128才能够哦,否则用了透明代理也上不了网呀:<
网上有些人是这么作的,因此在终端输入:
1 opkg install iptables-utils iptables-mod-nat-extra 2 iptables-save > iptables.org 3 iptables –t nat –A PREROUTING –i br-lan –p tcp --dport 80 –j REDIRECT --to-ports 3128
第1行是openwrt安装iptables的一些工具,第2行是保存如今的iptalbes设置,若是之后不想用透明代理,就能够直接在终端输入:
1 iptables-restore iptables.org
这样就恢复原状了嘛J
第三行是用iptables重定向80到3128,网上好多人好像均可以,可是我遇到一个问题,就是我输入这个命令之后,出现:
iptables: No chain/target/match by that name
我到如今还没弄清楚怎么回事呢,在网上也找了很久,好像是某些模块没编译进内核,可是根据openwrt官网上说的,我应该编译进去了。我后来用了另外一个命令来redirect,如今也运行得不错,凑合着用吧。
我这么作的,在终端输入了:
1 iptables –t nat –A PREROUTING –i br-lan –p tcp --src 192.168.8.0/24 --dport 80 –j DNAT --to 192.168.8.1:3128
结果成功运行了,能够访问网站,我对iptables也不是很熟悉,等熟悉了再分析吧:>