Total Pageviews

Thursday 16 June 2016

利用一个基于erlang的proxy程序翻墙

首先在linux vps上,按此文http://briteming.blogspot.com/2014/02/linux-vpserlang.html搭建erlang环境和rebar环境。

然后,
git clone https://github.com/jiangmiao/proxy jiangmiao-proxy
cd jiangmiao-proxy


root@AR:~/jiangmiao-proxy# ls
LICENCE     proxy.go  README.txt
monitor.rb  proxy.erl proxy.sh  


root@AR:~/jiangmiao-proxy# rebar compile
root@AR:~/jiangmiao-proxy# ls
LICENCE     proxy.beam proxy.go  README.txt
monitor.rb  proxy.erl proxy.sh  
root@AR:~/jiangmiao-proxy# erl -s proxy back_start 0.0.0.0 8781 -detached
(此命令的意思是在服务器上监听8781端口。“-detached”的作用是让命令以daemon方式运行,即在后台运行)
不要在服务器上的命令erl -s proxy back_start 0.0.0.0 8781 -detached的前面加上erlc proxy.erl && ,否则翻墙速度会变得较慢。
这样服务器端就搭建起来了。
你可以在~/jiangmiao-proxy/里,把erl -s proxy back_start 0.0.0.0 8781 -detached保存为
start-jiangmiao-proxy.sh

在客户机器上。
程序作者未提供windows系统下的客户端。只能自己在mac或linux桌面系统下,按此文http://briteming.blogspot.com/2014/02/linux-vpserlang.html编译erlang环境和rebar。
然后,
git clone https://github.com/jiangmiao/proxy jiangmiao-proxy
cd jiangmiao-proxy
rebar compile


yudeMacBook-Air:jiangmiao-proxy brite$ ls
LICENCE proxy.erl
README.txt proxy.go
monitor.rb proxy.sh
proxy.beam


yudeMacBook-Air:jiangmiao-proxy brite$ erl -s proxy front_start 服务器的IP 8781 127.0.0.1 8780 -detached
(此命令的意思是在本机监听8780端口,然后转发到服务器的8781端口。最终通过服务器去访问目标网站的数据。“-detached”的作用是让命令以daemon方式运行,即在后台运行)
这样客户端就搭建起来了。
你可在jiangmiao-proxy目录里把erl -s proxy front_start 服务器的IP 8781 127.0.0.1 8780 -detached保存为start-jiangmiao-proxy.sh

然后设置浏览器的socks5代理为127.0.0.1:8780,即可翻墙。
注意:在客户机器上,运行erl -s proxy front_start 服务器的IP 8781 127.0.0.1 8780 -detached即可。 不要在此命令的前面加上erlc proxy.erl && ,否则翻墙速度会变得较慢。

如果你突然不能翻墙了,可能是客户机器上的erl退出了,运行bash
start-jiangmiao-proxy.sh即可。如果erl没退出,则运行ps aux|grep erl ,找到该erl命令所对应的pid号,然后kill 它的pid号(从而杀死该进程),然后
运行bash
start-jiangmiao-proxy.sh从而重启该进程-重启客户端程序)即可。


项目地址:https://github.com/jiangmiao/proxy

相关帖子:http://briteming.blogspot.com/2016/06/erlangproxy.html
----------------
在用这个程序翻墙时,搞两下就翻不了墙了,需要频繁的重启客户端程序才行,挺烦的。此程序明显没有shadowsocks-erlang(http://briteming.blogspot.com/2015/11/shadowsockserlangshadowsocks-erlang.html)和make-proxy(http://briteming.blogspot.com/2015/11/erlangsocks5make-proxy.html)那么稳定。所以不建议用本文所述的程序翻墙!

shadowsocks-erlang和make-proxy也是基于erlang的翻墙程序。这2个程序比本文所述的程序稳定好用多了。
---------------
它的Go语言版更好用。
进入jiangmiao-proxy目录后,
root@AR:~/jiangmiao-proxy# ls
LICENCE     proxy.go  README.txt
monitor.rb  proxy.erl proxy.sh 
root@AR:~/jiangmiao-proxy# mkdir gospace
root@AR:~/jiangmiao-proxy# cd gospace
root@AR:~/jiangmiao-proxy/gospace# export GOPATH=`pwd`
(意思就是把GOPATH设为当前目录~/jiangmiao-proxy/gospace/,所以命令也可改为
export GOPATH=~/jiangmiao-proxy/gospace/)
root@AR:~/jiangmiao-proxy/gospace# go get github.com/jiangmiao/proxy
root@AR:~/jiangmiao-proxy/gospace# ls
bin  src
root@AR:~/jiangmiao-proxy/gospace# cd bin
root@AR:~/jiangmiao-proxy/gospace/bin# ls
proxy
root@AR:~/jiangmiao-proxy/gospace/bin# nohup ./proxy back :7781 > /dev/null &
不过命令: ./proxy back :7781 > /dev/null &容易退出,我们可利用systemd来把该命令运行为service:
nano /etc/systemd/system/jiangmiao-proxy.service
其内容为:
[Unit]
After=network.target

[Service]
ExecStart=/root/go/gopath/bin/proxy back :7781
Restart=always

[Install]
WantedBy=multi-user.target
 


然后运行:
systemctl start jiangmiao-proxy
systemctl enable jiangmiao-proxy

这样,这个proxy程序的go版的服务器端就搭建好了。


在客户机器mac上。
先安装好go环境。
然后
git clone https://github.com/jiangmiao/proxy jiangmiao-proxy  (上面已做过)
cd jiangmiao-proxy
mkdir gospace
cd gospace
export GOPATH=`pwd`
go get github.com/jiangmiao/proxy
(当前目录下会生成bin目录,src目录)
cd bin
./proxy front your_vps_ip:7781 127.0.0.1:7780
这样,这个proxy程序的go版的客户端就搭建好了。

设置浏览器的socks5代理为127.0.0.1:7780,即可翻墙。