基本概念不多解釋了,直入主題。GNU HTTP Tunnel (http://www.nocrew.org/software/httptunnel.html)是一個(gè)開源的http-tunnel項(xiàng)目,包括了tunnel server(hts命令)和tunnel client(htc命令),有(x)nix和windows版本。我們就用它來建立自己的tunnel。
1。靜態(tài)tunnel。
http-tunnel是一個(gè)完全透明的通道,直接將你的連接forward給目標(biāo)服務(wù)端口,因此當(dāng)你連接tunnel的本地偵聽端口時(shí),就相當(dāng)于直接連接到目標(biāo)服務(wù)端口。例如你要建立一條可以訪問外部POP3服務(wù)器的隧道,可以建立如下連接:
htc ------------> http proxy ------------------------> hts------------------------------> POP3 serve
(localhost:8888) (proxyhost:3128) (tunnelserver:80) (pop3server:110)
在你自己的機(jī)器上運(yùn)行htc,外部充當(dāng)tunnel server的機(jī)器上的80端口運(yùn)行hts,htc將數(shù)據(jù)打包成http請(qǐng)求,通過proxy連接到hts,hts解包后將連接forward給POP3服務(wù)器。命令如下:
在tunnel server機(jī)器上:
hts --forward-port pop3server:110 80
(將pop3server替換成實(shí)際的IP)
在本地機(jī)器上:
htc --forward-port 8888 --proxy proxyhost:3128 tunnelserver:80
(將proxyhost和tunnelserver替換成實(shí)際的IP)
通過這樣的配置,你可以用Outlook或Foxmail連接本機(jī)的8888端口,就相當(dāng)于直接連接到POP3服務(wù)器了。
2。動(dòng)態(tài)的tunnel。
上面建立了一條可以訪問POP3服務(wù)的隧道,但缺點(diǎn)是只能訪問某一個(gè)指定的POP3服務(wù)器,要訪問其他的服務(wù)器還得按同樣的方法再建立一條隧道,很不方便。既然hts可以將連接forward給POP3服務(wù)器,那讓它forward給一個(gè)SOCKS5服務(wù),不是就可以實(shí)現(xiàn)動(dòng)態(tài)的tunnel,可以連接任意服務(wù)了嗎?yeah!沒錯(cuò)!我們建立這樣的連接:
htc ------------> http proxy ------------------------> hts------------------------------> SOCKS5 serve
(localhost:8888) (proxyhost:3128) (tunnelserver:80) (socks5server:1080)
命令就不說了,照第一點(diǎn)改一下就行。這樣就相當(dāng)于在localhost:8888運(yùn)行了一個(gè)SOCKS5服務(wù),設(shè)置一下你的網(wǎng)絡(luò)程序(Outlook,NetAnt,FlashGet,QQ......),讓他們通過SOCK5訪問網(wǎng)絡(luò),就OK了。
3。利用http proxy的CONNECT支持。
大多數(shù)httpproxy支持CONNECT命令,但一般只支持CONNECT到外部服務(wù)器的443(https)端口。這是為了允許訪問外部的https服務(wù)。由于porxy對(duì)于CONNECT的連接是直接轉(zhuǎn)發(fā),不做任何分析處理或緩存,所以利用CONNECT可以獲得比較快的速度。
由于hts和htc不支持CONNECT連接,我們可以使用另一個(gè)專門支持CONNECT的程序DesProxy http://desproxy.sourceforge.net
來建立一個(gè)tunnel。由于使用CONNECT建立了直接的TCP連接,不需要將數(shù)據(jù)按http格式打包和解包,所以連tunnel server也不需要了,只需要在你原來運(yùn)行hts機(jī)器上運(yùn)行一個(gè)SOCKS5就行了,連接如下:
desproxy -------------> http proxy ----------------------> SOCKS5 server
(localhost:8888) (proxyhost:3128) (tunnelserver:443)
desproxy命令的用法:
desproxy remote_host remote_port proxy_host proxy_port local_port
在這里remot_host,remote_port就是tunnelserver:443,proxy_host,proxy_port是porxyhost:3128,local_port就是8888。
注意必須把SOCKS5運(yùn)行在443端口,如果運(yùn)行在其他端口的話,CONNECT請(qǐng)求會(huì)被http proxy拒絕。同樣,我們?cè)趌ocalhost:8888得到了一個(gè)可以訪問外部的SOCK5服務(wù)。
4。最簡(jiǎn)單,最安全而且快速的方式:利用SSH + CONNECT。
實(shí)際上SSH提供了SOCKS5的功能,利用ssh客戶端或PuTTY可以在本地建立一個(gè)SOCKS5服務(wù),而且PuTTY也直接支持http proxy,最大的好處是ssh的數(shù)據(jù)連接是加密的,保證了數(shù)據(jù)的安全。使用ssh的連接如下:
PuTTY(或plink) ------------> http proxy ---------------------> ssh server
(localhost:8888) (proxyhost:3128) (tunnelserver:443->22)
首先我們要讓sshserver在443端口偵聽,ssh默認(rèn)端口是22,我們可以修改ssh的配置,或用iptables將443端口重定向到22端口,服務(wù)端的配置就OK了。然后在PuTTY建立一個(gè)newsession,填上ssh服務(wù)器的ip和port;在"Connection->Proxy"頁,填上httpproxy的ip和port;在"SSH -> Tunnels"頁,"Sourceport"填本地的端口,在這里我們用8888",Destination"選"Dynamic",按"Add"將這個(gè)forwardport加上,就OK了。配置完成后,用PuTTY登陸上ssh,用netstat-an可以看到PuTTY已經(jīng)在localhost:8888偵聽了,這是一個(gè)SOCKS5服務(wù),下面改怎么用,就不用我羅嗦了吧:-)。另外在"SSH"頁,可以根據(jù)要求選擇"Protocoloptions"。保存session后,也可以用命令行的plink命令來利用這個(gè)session:
plink -load session_name (session_name就是session保存的名稱)
登陸后效果也一樣。
聯(lián)系客服