Android端通过Shadowsocks无法访问本地域名的问题排查
让我来帮你分析一下这个问题——从你描述的情况来看,问题大概率出在Android手机端,而不是服务器端,毕竟服务器的DNS日志已经确认返回了正确结果,而且Linux端完全正常。下面是具体的排查和解决思路:
1. 检查Shadowsocks客户端的DNS配置
你使用的Shadowsocks 4.8.4是比较旧的Android版本,它的默认DNS处理逻辑可能存在疏漏:
- 打开SS客户端的设置,找到「DNS设置」选项:尝试切换为「使用远程DNS」或「使用SOCKS5 DNS」(不同版本措辞可能略有不同),而非默认的「系统DNS」。因为如果用系统DNS,手机本地的DNS缓存或系统DNS服务可能没走SS代理,导致虽然IP Tools能查到正确结果,但Firefox访问时用的是未代理的系统DNS,没触发服务器端的dnsmasq规则。
- 也可以手动在SS客户端填写自定义DNS服务器(比如服务器的公网IP),强制DNS请求走SS隧道到服务器端的dnsmasq处理。
2. 检查Firefox for Android的代理与DNS设置
- 确认Firefox已正确使用SS代理:进入Firefox设置→「网络设置」,选择「使用系统代理设置」,或手动配置SOCKS5代理(地址填
127.0.0.1,端口填你SS客户端设置的本地端口)。 - 关闭Firefox的「DNS over HTTPS」功能:如果开启了DoH,Firefox会绕过系统/SS的DNS设置,直接用自身的DNS服务器查询。你可以在Firefox设置里搜索「DNS over HTTPS」,将其关闭后再尝试访问。
3. 清理Android系统DNS缓存并检查ROM代理规则
- Android 5.1.1的系统DNS缓存可能干扰解析,你可以先重启手机清除缓存;如果有ADB权限,也可以用命令手动清除:
adb shell ndc resolver flushdefaultif。 - 你使用的Resurrection Remix定制ROM可能自带网络优化或代理优先级设置,导致SS代理没有完全覆盖所有APP的网络请求。可以检查ROM的「网络设置」或「开发者选项」,确认是否有强制所有APP走代理的开关,开启后再测试。
4. 用IP直接访问验证Nginx配置
你可以尝试绕开域名解析,直接验证Nginx的配置是否能被手机端访问:
- 用Termux等终端工具执行curl命令测试:
curl -x socks5://127.0.0.1:本地SS端口 -H "Host: my.domain" http://服务器公网IP - 如果这条命令能正常返回页面内容,就进一步确认是DNS解析环节没有在Firefox中正确触发SS代理的DNS处理。
内容的提问来源于stack exchange,提问作者petrikoz
相关产品推荐
相关产品推荐

