openwrt 透明代理上網


最近搞了個openwrt的router,以往都用代理來上網,但是代理每次都要設置端口啊,代理IP這些,覺得很心煩。現在好了,用openwrt搭建一個透明代理,讓所有接上這個router的人都通過代理上網,還可以對他們監控和進行一些規則設定: )

我的Local proxy是這樣的,如圖:

 

我的squid版本為2.7

非常多的電腦接入我的openwrt,我用的是淘寶買的DB120。感覺還不錯,然后我ssh進入openwrt。

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的配置后,要多添加點東東。首先說一些相關的語法:

cache_peer [上層proxy主機名] [proxy角色] [proxy port] [icp port] [額外參數]

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM