Skip to content

再次探讨 #633 安卓上运行ARM版本,不能使用域名,只能使用IP的问题 #700

Description

@iineva

源问题在 #633 后来算是不了了之了。
另外补充一个问题,因为下面提及的相同原因,socks5模式下,也是不能通过域名上网的。

我进过深入研究,已经排查到原因,因为Android下不是标准的Linux系统,没有/etc/resolv.conf文件。
golang标准库中的net模块是通过解析/etc/resolv.conf文件获取到DNS服务器地址的。由于不能获取到,会使用默认值127.0.0.1:53,而本地又没有开启DNS服务所以就报错了。
解决办法有5个(前两个都需要root权限):

  1. 自行创建/etc/resolv.conf文件,文件内容 nameserver 114.114.114.114,优点是最简单粗暴,缺点是不够灵活,而且小米手机官方root是权限不足够的;
  2. 在Android上运行一个DNS服务,我用的是godns,修改部分源码,通过命令getprop net.dns1可以获取到Android系统下正确的DNS,由于需要占用53号端口,所以需要root权限;
  3. frp中代码中自行解析DNS,个人认为这个是比较的解决办法,并且便于交叉编译,希望能完成;
  4. 修改golang源码中的net模块,用定制版编译器编译frp
  5. 使用Android真机直接编译:本人使用的方法是,termux下安装golang,然后直接编译二进制,无DNS问题。
  • golang标准库中的相关源码:

https://golang.org/src/net/dnsclient_unix.go#L169

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions