曾经为了让所有服务不允许随便访问公网,要访问公网则必须走代理,于是就需要一个非常NB的代理,能应对各种复杂的需求,于是自己写了一个sproxy(Supper Proxy),支持http 隧道代理、https隧道代理、sni代理。
现在,为了一些特殊的需要,需要在代理之后再转发到一个socket5代理,这样就可以与所有的socket5代理(比如: shadowsocks)实现对接,查了一下资料,其实,修改非常简单,我可以只修改两行代码就能搞定,借助golang.org/x/net/proxy 中的socket5代理,至于如何配置是否走代理,简单通过设置环境变量来实现了,如:
1 |
all_proxy=socks5://127.0.0.1:1080 |
尽管只有两行代码,还是学到了不少东西:
- 想让mac上的IDE调试那个需要listen 443的程序,默认IDE不是root启动的,没有权限listen 1024以下的端口,于是通过查资料发现,可以通过端口重定向实现,让需要调试的程序listen 1443, 通过 (http://www.cnblogs.com/fullstack-yang/p/6223960.html ) 提到的方法将443的数据包重定向到 1443, 相关参考: http://www.cnblogs.com/fullstack-yang/p/6224050.html
- socks5不仅可以支持ip地址,还支持域名,可以在socks5之前解析域名,也可以在socks5之后解析域名;原本程序是在socks5之前解析域名的,程序偶尔会调试不通,因为socks5之前通过 114.114.114.114 解析到的 www.google.com 的ip地址是被篡改过的,有时候是Twitter的,有时候是facebook的,还有不知道是谁家的,这种情况就需要把解析域名的事情放到socks5之后做了
- 关于域名被篡改的情况,还可以通过dnscrypt-proxy 来解决,只是,这个需要部署dnscrypt-server,不过也有很多公开的dnscrypt-server,稍微麻烦一些,没尝试
- 或许可以有一种dns-proxy,可以把dns请求转发到socket5,也是挺好的,注意: golang.org/x/net/proxy 中的socks5尚不支持udp (https://github.com/better0332/myproxy/blob/master/proxy/socks5.go) 这里有人实现过,不过star好少
- 也可以自己实现一个dns-server
- 单步调试golang时,提示找不到lldb-server, 解决办法:
1xcode-select --install