Total Pageviews

Sunday, 4 October 2020

利用wssocks-by-genshen翻墙

 登陆linux vps,安装nodejs环境和go环境,以及yarn(参见https://briteming.blogspot.com/2019/09/ndejs-yarn.html)

git clone https://github.com/genshen/wssocks wssocks-by-genshen

cd wssocks-by-genshen

cd status-web

yarn install

yarn build

(此步会在当前目录下,生成build目录)

cd $GOPATH

go get -u -v github.com/rakyll/statik

(go最低需为1.13版)


cd ~/wssocks-by-genshen

go install

(可执行文件wssocks就会出现在$GOBIN/下。)


然后运行:

wssocks server --addr :1089 --tls --tls-cert-file /root/.acme.sh/urdomain.com/fullchain.cer --tls-key-file /root/.acme.sh/urdomain.com/urdomain.com.key --auth_key 316C5EBF1C04CC21B5016789


不过此命令是运行在前台的,我们可以利用systemd把该命令运行为service:

nano /etc/systemd/system/wssocks-using-tls-parameters.service

cat /etc/systemd/system/wssocks-using-tls-parameters.service

[Unit]

After=network.target


[Service]

ExecStart=/root/go/gopath/bin/wssocks server --addr :1089 --tls --tls-cert-file /root/.acme.sh/urdomain.com/fullchain.cer --tls-key-file /root/.acme.sh/urdomain.com/urdomain.com.key --auth_key 316C5EBF1C04CC21B5016789

Restart=always

[Install]

WantedBy=multi-user.target


然后,运行:

systemctl start wssocks-using-tls-parameters

systemctl enable wssocks-using-tls-parameters

服务器端搭建完成。


(上面用到了acme.sh申请的letsencrypt证书,其实使用自签名的证书也是ok的:)



从上面可见,wssocks提供了“--tls --tls-cert-file /root/.acme.sh/urdomain.com/fullchain.cer --tls-key-file /root/.acme.sh/urdomain.com/urdomain.com.key”参数。如果不使用它的这个参数,我们也可利用nginx做反向代理,代理wssocks所监听的端口1089.


下面,在服务器上,另开一个wssocks进程,以监听端口1088为例,说明如何设置nginx。修改nginx的配置文件如下:

server {

  listen         80;

  server_name     urdomain.com;

  return          301 https://$http_host$request_uri;

}


server {

  listen    447 ssl; 

  server_name  urdomain.com;

  ssl_certificate      /root/.acme.sh/urdomain.com/fullchain.cer;

  ssl_certificate_key  /root/.acme.sh/urdomain.com/urdomain.com.key;


  location / {

    proxy_set_header Host            $http_host;

    proxy_set_header Upgrade $http_upgrade;

    proxy_set_header Connection "upgrade";

    proxy_http_version 1.1;   

    proxy_pass http://127.0.0.1:1088;

  }

}


重启nginx.

如果你不想编译wssocks,你可以下载程序作者提供的可执行文件:

wget https://github.com/genshen/wssocks/releases/download/v0.5.0-beta.3/wssocks-linux-amd64

chmod 755 wssocks-linux-amd64


然后运行:

/root/wssocks-linux-amd64 server --addr :1088 --auth_key 316C5EBF1C04CC21B5016788

不过此命令是运行在前台的,我们可以利用systemd把该命令运行为service:

nano /etc/systemd/system/wssocks.service

cat /etc/systemd/system/wssocks.service

[Unit]

After=network.target


[Service]

ExecStart=/root/wssocks-linux-amd64 server --addr :1088 --auth_key 316C5EBF1C04CC21B5016788

Restart=always


[Install]

WantedBy=multi-user.target


然后,运行:

systemctl start wssocks

systemctl enable wssocks

服务器端搭建完成。



在本地机器mac上。

git clone https://github.com/genshen/wssocks wssocks-by-genshen

cd wssocks-by-genshen

cd status-web

yarn install

yarn build

cd $GOPATH

go get -u -v github.com/rakyll/statik


cd ~/wssocks-by-genshen

go install

(可执行文件wssocks就会出现在$GOBIN/下。)


如果你不想编译,也可直接下载可执行文件:

wget https://github.com/genshen/wssocks/releases/download/v0.5.0-beta.3/wssocks-darwin-amd64


chmod 755 wssocks-darwin-amd64


~/wssocks-darwin-amd64 client --addr 127.0.0.1:1083 --remote wss://urdomain.com:1089 --key 316C5EBF1C04CC21B5016789


针对第二个服务器端进程的客户端命令:

~/wssocks-darwin-amd64 client --addr 127.0.0.1:1082 --remote wss://urdomain.com:447 --key 316C5EBF1C04CC21B5016788


然后,设置浏览器的socks5代理服务器地址为127.0.0.1 ,端口为1083或1082,浏览器即可翻墙。


上面的urdomain.com是购买的付费域名,那么上面这么操作后,浏览器即可翻墙。

如果urdomain.com是你注册的免费的可解析的域名,那么此域名有可能已被gfw封锁,无法解析,导致用客户端命令连接不上服务器。解决办法:

sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1


运行某个ss客户端程序。


cd ~/dns-tcp-socks-proxy;sudo ./dns_proxy

(用法详见https://briteming.blogspot.com/2019/07/dns-tcp-socks-proxysocks-proxydns.html)


然后运行上面的客户端命令。

(如果你合拢了mac机器的机盖,需先运行

sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1 


sudo killall dns_proxy;cd ~/dns-tcp-socks-proxy;sudo ./dns_proxy


然后重新运行客户端命令.如果运行客户端命令后,还是不能连上服务器,那就再运行一次客户端命令,通常就能连上了。)


然后,设置浏览器的socks5代理服务器地址为127.0.0.1 ,端口为1083或1082,浏览器即可翻墙。


实测使用wssocks的--tls --tls-cert-file /root/.acme.sh/urdomain.com/fullchain.cer --tls-key-file /root/.acme.sh/urdomain.com/urdomain.com.key”参数的方法比使用nginx做反向代理的方法更坚挺。

因此所使用的客户端命令相应的为:

~/wssocks-darwin-amd64 client --addr 127.0.0.1:1083 --remote wss://urdomain.com:1089 --key 316C5EBF1C04CC21B5016789


项目地址:https://github.com/genshen/wssocks

https://github.com/genshen/wssocks/issues/28


相关帖子:

https://briteming.blogspot.com/2021/04/wssocks-by-mikubill.html

https://briteming.blogspot.com/2020/05/websocks.html

https://briteming.blogspot.com/2018/04/haskellwstunnel-by-erebe.html


No comments:

Post a Comment