openwrt 透明代理上网

最近搞了个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

  •   上层proxy主机名:其实就是上层proxy的IP,个人就是172.16.54.159
  •  Proxy角色:这部proxy是咱们的上层(parent),仍是邻居sibling的协做proxy?在这里,咱们要向parent proxy拿数据,因此确定是parent啦: )
  • Proxy port:固然就是端口号啦,通常都是3128. 由于我比较懒,因此不改设置…
  • Icp port:一般是3130
  • 额外参数:针对parent proxy,想要对它操做的行为设定。主要有:
  1. Proxy-only:向parent proxy要数据不会存储到本地proxy的服务器,下降本地proxy的负担。
  2. Weight=n:权重,由于能够指定多部上层的proxy服务器,因此能够设定哪一个比较重要。N越大表示这部proxy越重要!
  3. no-query:向上层proxy须要拿数据,能够不发送icp封包,以下降主机的负担。
  4. no-digest:表示不向附近主机要求创建digest记录表格
  5. no-netdb-exchange:表示不向附近的proxy主机送出imcp封包要求。

 

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启动了呢?

  1. ps –aux 看看是否有squid的进程
  2. netstat –an 看是否有用户链接到squid所监听的ip及端口

 

可是只是作了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也不是很熟悉,等熟悉了再分析吧:>

相关文章
相关标签/搜索