Random Thoughts
Recent content on Random Thoughts
马上订阅 Random Thoughts RSS 更新: https://blog.joway.io/index.xml
使用 Surge 提升多网络环境下的流畅开发体验
作为一名后端工程师经常需要在各种网络环境中切换,由于网络拓扑本身的复杂性以及一些网络工具之间的冲突和bug,常常会在切换中造成不必要的麻烦和痛苦。通常很容易在工作中听到同事会问这些问题 :
- 你有开 vpn 吗 ?
- 你开了 ss 了吗 ?
- 你有同时开 ss 和 vpn 吗 ?
- 你 http 代理是不是被顶掉了 ?
如果同是技术同事间交流那可能还容易,如果是技术和非技术间交流网络情况,那简直是一个灾难。
而事实上,在绝大部份时候,我们对于网络拓扑的需求是可被精确描述的,也就是说理想情况下不应当存在一个我为了访问某个服务而手动选择要进入某个网络环境的事情。
这篇文章会介绍我们在构建复杂网络环境中的良好开发体验时踩过的坑以及最终是如何优雅地解决这个问题的过程。
历史方案演变
常见的网络环境有:
- 正常大陆网络
- 能够上国外网站的网络
- 公司内网
- 各个服务器集群的内网
如果你自己还折腾了一些服务器或者家庭网络,那可能还会更加复杂。
之前摸索出的一套还算比较方便的解决方案是 :
- 在本地常驻一个 ss client 并开放 http 代理端口
- 在浏览器上使用
Proxy SwitchyOmega
使 Chrome 都走 ss client 的 http 代理 - 开一个 openvpn 连接到服务器内部网络
这种配置方式能够使得我既能连接所有服务器线上服务和数据库,也能自由地用浏览器去 Google 查一些资料。缺点是丢失了办公室原本的网络环境,另外如果你们服务器有两个完全隔离的子网,那么你可能需要同时连两个 vpn 。而且还有一个不好的是,你的所有非线上服务访问都经过了线上vpn机器的一层代理,让你的访问速度变慢了不说,对服务器也不是一个好事。此外,如果你的一些软件无法手动配置代理,那他们只能默认走 vpn 的网络,对于一些需要访问国外服务器的软件来说就麻烦了。
基于以上缺点,我们又迭代出了另外一个方案:
- 在服务器上安装一个 ss server
- 在本地常驻两个 ss client ,一个指向生产服务器 ss, 一个指向国外 ss , 并开放 socks5 代理端口
- 使用
Proxifier
代理所有本机连接并指定一些规则选择直接访问还是转发到本地的两个 ss client 上。例如我选择让所有 10.1.0.0/16 请求走生产服务器ss,别的都走国外 ss 的那个 client ,同时在 client 里配置好 pac 规则使得国内的依旧直接走本地网络。
这种方案理论上完全实现了我们的所有需求,但是需要的组件太多了,看着就很繁琐,无法推广给团队其它人使用。同时这些规则也很零零碎碎,几乎没什么可维护性 。