Total Pageviews

Wednesday, 7 April 2021

利用vproxy翻墙

 在Linux vps上。

wget https://github.com/wkgcass/vproxy/releases/download/1.0.0-ALPHA-4/vproxy-runtime-linux.tar.gz

tar xvf vproxy-runtime-linux.tar.gz

wget https://github.com/wkgcass/vproxy/releases/download/1.0.0-ALPHA-4/vproxy-1.0.0-ALPHA-4.jar -O vproxy.jar 

mkdir certs-for-vproxy

cd certs-for-vproxy

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3650

openssl rsa -in key.pem > key.decrypt.pem

cat cert.pem key.decrypt.pem > certkey.pem

openssl pkcs12 -export -in certkey.pem -out certkey.p12

第三句命令会让你输入私钥的密码、证书的各种信息。其中,证书信息只有CN/Common Name是需要注意的,其他都可以随意填写。 Common Name这里,建议填写为你的服务器的公网ip。

第四句会将私钥解密,会要求你输入刚才设置的密码.

第五句将证书和私钥放到同一个文件certkey.pem里。

第六句将证书私钥放到pkcs12文件中,方便部署使用,文件命名为certkey.p12

启动:

/root/vproxy-runtime-linux/bin/java -Deploy=WebSocksProxyServer -jar /root/vproxy.jar listen 2200 auth myusername:mypassword ssl pkcs12 /root/certs-for-vproxy/certkey.p12 pkcs12pswd p12-file-password

此命令是运行在前台的。因此我们利用boa把该命令运行在后台:

boa /root/vproxy-runtime-linux/bin/java -Deploy=WebSocksProxyServer -jar /root/vproxy.jar listen 2200 auth myusername:mypassword ssl pkcs12 /root/certs-for-vproxy/certkey.p12 pkcs12pswd p12-file-password && reboot

服务器端搭建完成。(参考:https://github.com/asdltqlawsl/anti-gfw-websocks-doc/blob/master/docs/server%E9%83%A8%E7%BD%B2.md)

在客户机器Mac上。

安装jdk11的Mac版。到这里https://www.oracle.com/java/technologies/javase-jdk11-downloads.html 下载jdk-11.0.10_osx-x64_bin.dmg,安装它。

然后,wget https://github.com/wkgcass/vproxy/releases/download/1.0.0-ALPHA-4/vproxy-1.0.0-ALPHA-4.jar -O vproxy.jar 

wget https://raw.githubusercontent.com/wkgcass/vproxy/dev/doc/websocks-agent-example.conf 

(https://github.com/wkgcass/vproxy/blob/dev/doc/websocks-agent-example.conf)

我的server端使用的是自签名证书,这里还需要增加一步-将自签名证书打到keystore文件里: 

keytool -importcert -file 从服务器上下载的证书文件cert.pem -alias 随便设置一个名字 -keystore ~/vproxy-cert.keystore -storepass 替你的keystore文件所设的密码 

(参考https://blog.csdn.net/moonpure/article/details/82836517)

nano websocks-agent-example.conf 

cat websocks-agent-example.conf

agent.listen 11080

proxy.server.auth myusername:mypassword

agent.cacerts.path ~/vproxy-cert.keystore

agent.cacerts.pswd my-set-password

agent.gateway off

agent.strict off

agent.pool 10

proxy.server.list.start

     websockss://vps-public-ip:2200

proxy.server.list.end


proxy.domain.list.start

/.*/

proxy.domain.list.end



配置文件的详细说明,这里说明一下关键项的含义,后面会说一下最佳实践:

  • agent.listen 监听端口,它是socks5代理,我把端口设置为11080
  • agent.cacerts.pathagent.cacerts.pswd path对应了上一步证书配置时的keystore路径,pswd表示密码。如果服务端使用的是正常CA签发的证书,那么这两个配置项可以省略
  • agent.cert.verify 表示是否开启整数校验,默认on表示开启,可以设置为off,这样可以不设置自定义证书链也能正常使用
  • agent.gateway 表示启动网关模式。如果开启,那么这个agent可以被任何“能够访问你的计算机的人”访问到(否则只有本机能访问)。如果你需要让其他机器使用代理功能(比如手机平板,或者其他人的设备),那么这一项需要设置为on,否则为了安全考虑,设置为off
  • agent.gateway.pac.address 表示对外暴露一个pac接口。如果开启,那么agent会额外监听一个端口来响应pac文件的请求。这个pac文件会告诉别人,应该使用agent来代理连接。如果想让iOS设备访问本机进行代理,那么这个pac文件是必要的。此外,如果这一项开启,那么上面的agent.gateway也要开启,否则别人没办法访问到这个agent
  • proxy.domain.list 允许配置域名后缀、正则表达式、pac文件等规则。这个常用的pac文件是可以正常使用的。也就是说,你可以放心的让所有流量都经过agent,然后agent会自动处理哪些需要代理哪些不需要。如果你愿意,你可以根据模板中的注释配置你需要过滤的域名/ip。如果你需要将任何经过agent的流量都送到server端做代理,那么你可以只配置一项:/.*/,表示匹配任何字符,这在chrome+switchyomega的情况下非常有用。
启动:
java -Deploy=WebSocksProxyAgent -jar ~/vproxy.jar ~/websocks-agent-example.conf
不要关闭此终端,然后设置浏览器的socks5  proxy为127.0.0.1 ,端口为11080,浏览器即可翻墙。

参考:https://github.com/asdltqlawsl/anti-gfw-websocks-doc/blob/master/docs/agent%E9%83%A8%E7%BD%B2.md

https://github.com/wkgcass/vproxy/issues/20

项目地址:https://github.com/wkgcass/vproxy/
使用教程:https://github.com/asdltqlawsl/anti-gfw-websocks-doc

No comments:

Post a Comment