树莓派科学上网

树莓派的pip下载shadowsocks老是报错,本身对树莓派系统也不是很了解

搜索一番后发现有个轻量级的shadowsocks,github上给出了python源码,大概2000行左右,https://github.com/linw1995/lightsocks-python

go版本好像功能更全一点,但我没用过go

fork下来折腾了一下,代码有一个bug,改完就可用了,不知道是不是作者故意的。

过程当中学到了几点:

关于socks5这个协议

  1. socks5 client需要把ip层的packet都截住,然后发往本地1080端口
    • client由系统(windows可设置socks代理)或软件设置(例如chrome的switchyomega,这个设置起来更灵活,不过只能封装http的数据)。
    • 树莓派设置的时候比较麻烦,系统没有直接设置socks代理的软件,最后是通过命令行启动chromium,加上代理参数才可以代理http数据。
    • #todo 以后可以自己写个客户端socks5代理,或者自己设计一个代理协议。
  2. socks5代理又叫Circuit-level Gateway,有别于一般的Application-level Gateway,从gateway可以看出是最初是让内网电脑访问外网的服务的。
  3. socks5位于osi参考模型中的session layer,位于传输层(TCP)之上,应用层之下,所以使用tcp/udp的应用都可以使用socks5来转发。

设置步骤:

  1. 开启本地lslocal.py,远程计算机开启lsserver.py。
  2. 设置本地代理,上外网。
  3. 本前面两个脚本加入到开机启动daemon
  4. 完。

PS.

  1. 加密方法比较原始,可改进,不过居然可以用。
  2. 处理tcp的库使用asyncio,使用协程处理并发
  3. 并发数,buf,一次recv的字节数对带宽,延迟,计算资源的影响。
  4. 感谢原作者这个带有tutorial性质的socks5教程
  5. 另外有个外国人写的socks5 server,不过这个只是实现了本地socks5数据的监听 https://rushter.com/blog/python-socks-server/
Written on January 14, 2018