自建代理节点与固定出口 IP 的折腾记录
起因很简单:我手头有几台散在不同地方的机器,平时调试接口、拉依赖、看文档,出口 IP 老是变,同一个服务今天能通明天就换了个出口,排查起来特别烦。我就想,能不能自己搭一个固定出口的代理节点,平时走它,出口稳定,出了问题也知道去哪台机器上查。
先说清楚边界
这篇只记我自己的折腾过程。节点是我自己的 VPS,客户端是我自己的虚拟机和本地机器,不涉及别人的账号和服务。文章里不贴任何密钥、口令、UUID 和 Token,只讲思路、配置结构和踩过的坑。
节点这边的选择
VPS 上我一开始只装了一个协议,跑起来没问题,但后来发现不同网络环境下表现差别很大。有的网络对长连接不友好,断一下就得手动重连;有的网络延迟抖动大,网页能打开,视频会议就卡。
后来我改成两个协议并行:一个是 vless,特点是轻、开销小,适合平时浏览和拉包;另一个是 hysteria2,走 UDP,弱网下反而稳一些,适合延迟抖动大的时候用。两个入口共用同一台机器,出口 IP 是一样的,这样不管走哪个协议,对外看到的地址不变,调试的时候少了很多变量。
服务端配置我刻意写得很简单:监听端口分开,日志只记连接数和错误,不记具体访问内容。最开始我图省事把日志开得很全,结果磁盘几天就涨了不少,后来改成只保留关键错误,定期轮转。还有一个教训:防火墙只放行了 TCP,hysteria2 的 UDP 没放行,客户端一直连不上,我查了半天配置,最后才发现是云厂商安全组和系统防火墙两层都要放行。
虚拟机上的客户端
客户端我放在一台虚拟机里,用 sing-box 做接入。选它主要是配置是一份 JSON,节点、路由规则、出站都写在一个文件里,改起来直观。我的做法是:
- 出站写两个节点,vless 和 hysteria2,平时默认走 vless,手动切到 hysteria2 对比;
- 入站只在本机监听,不对外暴露;
- 路由规则先写得很保守,只有明确需要走代理的域名才走节点,其他流量直连,避免一股脑全走代理导致内网服务也绕远路。
刚开始我把规则写反了,内网地址也走了代理,结果局域网里的服务访问变慢,还以为是节点问题。后来把内网段和常用直连域名加到直连规则里,才恢复正常。这个顺序很重要:先保证直连不坏,再逐步加代理规则。
本地 mixed 入口
虚拟机调通之后,本地机器也要用。我在本地也跑了一个 sing-box,入站用 mixed 模式,也就是一个端口同时支持 HTTP 和 SOCKS。这样浏览器、命令行工具、包管理器都能用同一个入口,不用每个工具单独配不同的协议。
本地 mixed 入口我只绑了回环地址,不绑局域网地址。之前有一次我图方便绑了 0.0.0.0,结果同网段的其他设备也能连进来,虽然没出事,但想想就后怕,马上改回只监听本地。
验证方法也很土,但管用:先关掉代理,查一次出口 IP;再打开代理,查一次出口 IP;切 vless 和 hysteria2 各查一次。三次走代理的结果应该都是 VPS 的地址,和直连的地址不一样。如果某一次查出来还是本地地址,说明那次请求根本没走代理,规则肯定写漏了。
几个具体的坑
第一,时间不同步。有一段时间节点连上就断,日志里看不出大问题,后来发现是 VPS 的系统时间漂了不少,改成自动同步时间后就稳了。
第二,MTU 和分片。有个别网站能打开首页,打不开大页面,最后是把路径 MTU 相关设置调小才解决。平时不太会想到这一层,但大包过不去的时候,表现就是间歇性打不开。
第三,DNS 泄露。只代理了 HTTP 流量,DNS 还是本地解析,结果有的域名解析结果和代理出口不一致,访问就时好时坏。后来把 DNS 也统一走代理侧解析,规则才算真正闭环。
第四,别把所有流量都扔给一个节点。我一开始为了省事全量代理,结果节点一抖,所有服务一起抖。现在是按需走代理,关键服务直连,节点只承担它该承担的那部分,反而整体更稳。
现在的用法
现在我的日常是这样:本地 mixed 入口常开,直连规则兜底,需要固定出口的时候走节点,不需要的时候直连。虚拟机里的 sing-box 配置和本地的配置结构保持一致,改规则的时候两边一起改,不会出现一边通一边不通的尴尬。
回头看,这次折腾最大的收获不是多了一个节点,而是把出口、路由、DNS 这三件事分开想清楚了。出口固定只是结果,真正起作用的是:规则写保守一点,日志留关键的,验证每次都用出口 IP 说话。以后再加节点,我也是按这个套路来,先单协议跑通,再加第二个协议做对比,最后才把规则放宽。
- 点赞
- 收藏
- 关注作者
评论(0)