树莓派科学上网
树莓派的pip下载shadowsocks老是报错,本身对树莓派系统也不是很了解
搜索一番后发现有个轻量级的shadowsocks,github上给出了python源码,大概2000行左右,https://github.com/linw1995/lightsocks-python
go版本好像功能更全一点,但我没用过go
fork下来折腾了一下,代码有一个bug,改完就可用了,不知道是不是作者故意的。
过程当中学到了几点:
关于socks5这个协议
- socks5 client需要把ip层的packet都截住,然后发往本地1080端口
- client由系统(windows可设置socks代理)或软件设置(例如chrome的switchyomega,这个设置起来更灵活,不过只能封装http的数据)。
- 树莓派设置的时候比较麻烦,系统没有直接设置socks代理的软件,最后是通过命令行启动chromium,加上代理参数才可以代理http数据。
- #todo 以后可以自己写个客户端socks5代理,或者自己设计一个代理协议。
- socks5代理又叫Circuit-level Gateway,有别于一般的Application-level Gateway,从gateway可以看出是最初是让内网电脑访问外网的服务的。
- socks5位于osi参考模型中的session layer,位于传输层(TCP)之上,应用层之下,所以使用tcp/udp的应用都可以使用socks5来转发。
设置步骤:
- 开启本地lslocal.py,远程计算机开启lsserver.py。
- 设置本地代理,上外网。
- 本前面两个脚本加入到开机启动daemon
- 完。
PS.
- 加密方法比较原始,可改进,不过居然可以用。
- 处理tcp的库使用asyncio,使用协程处理并发
- 并发数,buf,一次recv的字节数对带宽,延迟,计算资源的影响。
- 感谢原作者这个带有tutorial性质的socks5教程
- 另外有个外国人写的socks5 server,不过这个只是实现了本地socks5数据的监听 https://rushter.com/blog/python-socks-server/
Written on January 14, 2018