簡易http Proxy搭建
簡易http Proxy搭建
proxy代理翻牆 |
admin5天前91瀏覽0評論
最近學校的網路超級的不爽,原來上下行都能達到幾十M的網速被生生的限制為下行3M,上行0.3M不說而且屏蔽了很多網站,使用的手段相當的齷齪,直接在出口路由上將網站直接指向了127.0.0.1,十分的鬱悶。我的迅雷會員算是廢了,無法在線看視頻了,WTF。
還好最近申請到了Windows Azure的試用名額,除了開著Boinc做WCG任務獲取點XRP就是在閑著,就想著用這伺服器搭建個http proxy脫離學校的魔掌,使用正常的網路。但是普通的http proxy無法訪問那些「不存在」的網站,因此需要該http proxy自動的處理正常網站和被封鎖網站之間的關係。基本的思路是做個路由表使得正常的網站走國內網路,「不存在」網站走國外的代理。
Advertisements
基本需求
硬體
國外vps一台(Digitalocean)
國內vps一台(Windows Azure)
上述兩台伺服器使用的都是ubuntu 12.04.3 LTS
軟體
shadowsocks
obfsproxy
privoxy
squid3
步驟
shadowsocks和obfsproxy
在國外vps上運行shadowsocks和obfsproxy,shadowsocks提供socks代理服務,obfsproxy負責將流量進行混淆,使得代理更加的安全,不使用obfsproxy也可以。這兩個軟體的安裝配置都比較簡單,在各自的官方網站上都有詳細的介紹。這樣國外的vps上的工作已經做完了,重點在於國內vps上的配置。
Advertisements
國內vps上同樣也要先安裝shadowsocks和obfsproxy,不同的是國外安裝的都是伺服器版本,國內安裝的都是客戶端版本不要搞混淆了。配置好后國內的vps上就有了一個可以用的socks代理,通過這個代理可以訪問自由世界的互聯網,沒有偉大的GFW的干擾了。但是很多的服務不支持socks代理,http代理支持的範圍比較廣泛,幸好socks代理轉化為http代理還是比較容易的,使用privoxy就可以了。
安裝privoxy
$ sudo apt-get install privoxy
privoxy的配置比較簡單,只需要指定socks代理的埠和轉化出來的http代理的埠就好,配置文件為/etc/pvivoxy/config
,下面是簡單的例子:
# /etc/privoxy/config
user-manual /usr/share/doc/privoxy/user-manual
confdir /etc/privoxy
logdir /var/log/privoxy
actionsfile match-all.action
actionsfile default.action
#actionsfile block.action
filterfile default.filter
#filterfile user.filter
logfile logfile
forward-socks5 / 127.0.0.1:1234 . #socks代理的埠1234
listen-address *:5678 #轉化的http代理埠5678
toggle 1
enable-remote-toggle 1
enable-remote-http-toggle 0
enable-edit-actions 0
enforce-blocks 0
buffer-limit 5120
#connection-sharing 0
forwarded-connect-retries 3
accept-intercepted-requests 0
allow-cgi-request-crunching 0
activity-animation 1
split-large-forms 0
keep-alive-timeout 0
socket-timeout 120
handle-as-empty-doc-returns-ok 1
privoxy安裝好后我們就有了一個http代理,這個代理可以自由的訪問所有的網路,所有的請求都會轉到國外的vps上執行然後將執行的結果回傳,所有的流量都要在國外轉一圈,這樣訪問國內的網站是很慢的,而且有些國內網站屏蔽了國內ip,這樣的網路體驗並不好。下一步驟就該squid大顯身手的時候了,squid是一個代理和緩存伺服器,可以指定規則使得不同的網路請求走不同的路徑,還有緩存加速的功能,可以加速網路的訪問,squid的安裝比較簡單。
安裝squid
$ sudo apt-get install squid
squid的配置文件位於/etc/squid3/squid.conf
,下面是我使用的配置,稍後我會簡單的介紹下:
#代理伺服器的監聽埠
http_port 9999
##########################
cache_peer localhost parent 5678 0 no-query
# 默認走shadowsocks, 國內ip走國內
acl chinaip dst "/etc/squid3/chinaip"
always_direct allow chinaip
acl ALL src all
never_direct allow ALL
##########################
#內存緩衝區的大小
cache_mem 2048 MB
#設置硬碟緩衝區最大4096MB,16個一級目錄,256個二級目錄。
cache_dir ufs /var/spool/squid 4096 16 256
#設置訪問日誌文件
cache_access_log /var/log/squid3/access.log
#設置緩存日誌文件
cache_log /var/log/squid3/cache.log
#設置網頁緩存日誌文件
cache_store_log /var/log/squid3/store.log
#定義允許名稱為all的http請求。
http_access allow all
squid支持父代理,而且指定了父代理后默認的全部流量都從父代理走,由於GFW的威力日益強大,為了一勞永逸,配置中使用了比較暴力的手段,找出了所有的中國ip,將ip段放在/etc/squid3/chinaip
這個文件中,使國內ip直連,國外ip都通過shadowsocks代理。雖然會使得有些未被牆掉的網站訪問變慢,但是照著GFW這樣瘋狂的勢頭這個方案還是比較行得通的,不用蛋疼的手動添加被牆的網站了。
/etc/squid3/chinaip
中的條目都是形如192.168.1.0/24
或者192.168.1.0/255.255.255.0
,每行一個網段,squid同時支持這兩種網路的寫法。獲取國內的ip地址可以訪問該網站,下載后的文件一般需要使用sed、awd
等工具修改成滿足squid需求的格式。這樣就得到了一個全能的http proxy,國內國外網站隨意遨遊了。
相關文章
nginx 反向代理 google
HTTP/HTTPS自動加密反向代理方案
goagent教程詳細版
透明代理、匿名代理、混淆代理、高匿代理有什麼區別
使用Digital Ocean和shadowsocks來科學上網
Nginx配置proxy_pass轉發的/路徑問題