网上查找资料部分原因是 TLS 协议太旧、库版本太旧被放弃支持,问题是现在都什么年代了,更何况我是在用 ubuntu 20.04.03,也一直保持最新的软件包和内核,实际遇到的问题都不是这些库、协议太旧的原因
有没有一个可能是要访问的域名被墙、DNS 污染,RST 重置、SNI 间歇阻断?
因为最近要开大会了......
中共中央政治局会议决定,中国共产党第十九届中央委员会第七次全体会议于2022年10月9日在北京召开。中共中央政治局将向中共十九届七中全会建议,中国共产党第二十次全国代表大会于2022年10月16日在北京召开。(新华社)今天某个后台应用在调用某个 API 出现了异常
它需要调用一个接口: https://data.xxxx.sh/v2.6/auth/?sign=aJiJ6WVNoq9qtiAZ9tnxkY78L0aVw&t=348f2574
巧的是,接口后端访问做了负载均衡,在境内、外都部署了服务器,来加速访问和简单冗余灾备
调试期间,关闭了负载均衡,使用境外服务器解析API域名,一切正常
当境内去解析这个域名时,抛出异常,手动 curl 访问该接口,返回
curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection to data.xxxx.sh:443
使用当前异常的Linux环境 ping 一下这个域名,返回了一个被 墙/DNS污染 的结果:59.24.3.174
,莫名躺枪......,不死心,我的域名就这么完了??
已经异常的情况下(被墙了不算),建议开启 DNSEC, 域名系统安全扩展(DNS Security Extensions),简称DNSSEC。开启DNSSEC,可有效防止DNS欺骗和缓存污染等攻击。它是通过数字签名来保证DNS应答报文的真实性和完整性,能够保护用户不被重定向到非预期地址
使用 https://ping.pe/ 进一步检查,可以看到在国内的许多 POP 测试节点上都被污染,除了深圳地区有幸逃过一劫,国内全部污染,国外访问均正确解析到了 Cloudflare
这里判断应该是在国内的运营商DNS缓存被污染了,实际测试我发现不少公共 DNS 也全部中招,感觉不对劲
阿里系:223.5.5.5/223.6.6.6
腾讯系(DNSPod):119.29.29.29/119.28.28.28/182.254.116.116/182.254.118.118
114 DNS 倒是正常:114.114.114.114
解决办法很简单:一个是把境内服务器的 DNS 改为未被污染缓存的公共 DNS,如 114.114.114.114
临时修改,修改后立刻生效,重启后失效:vi /etc/resolv.conf
我在修改时,服务器是腾讯云,看了下腾讯搞了个内网 DNS 服务,默认分配了 127.0.0.53
醉了,感觉不太好动,经简单测试,动了之后,它绑定了一些内网解析的服务会失效,如 默认的 ubuntu 源是腾讯云镜像,走的是内网,还发现可能会影响腾讯云自家的对象存储 COS 的内网传输的DNS智能解析调度,其他副作用:还不知道有多少坑在后面等着我
权衡再三,临时直接 hosts 强制解析 API 域名接口到了 cloudflare 的 CDN 任播 ip 上面去了,真是一堆破事
或者干脆换个域名,修改前后端应用的 被污染域名至新域名,但是还可能被再次污染,且需要更改域名配置,不太方便
我既然处理这个问题,就打算做绝搞干净,临时可以先改 hosts,后续腾出手来,我这里使用了其他方案,本地使用代理客户端挂上一个 IPLC 的梯子,并在本地开放 一个 socks5 的端口方便 curl 调用
然后针对域名解析本身上面,开启 DNSSEC
DNS 由 socks5 做远端解析,随便墙、污染,我就不换域名
最后修改默认前后端的配置文件及相关 curl 参数
先修改默认 curl 调用参数 /etc/profile
新增一行 alias curl='curl -x socks5://127.0.0.1:1080'
source /etc/profile
生效后,直接 curl 访问接口,成功通过 socks5 远端 DNS 解析避免了污染,同时也代理了所有网络流量避免后续其他污染风险
感谢作者的解决方案,帮我解决了一个大问题,这个问题,以前从没碰到过,ping的时候,还是返回正确的ip,我一度怀疑是证书的问题。后来想想,应该是中国移动把解析到海外的域名给劫持了。不知道他们这么做的目的是什么?加速访问?