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

相關文章
相關標籤/搜索