源问题在 #633 后来算是不了了之了。
另外补充一个问题,因为下面提及的相同原因,socks5模式下,也是不能通过域名上网的。
我进过深入研究,已经排查到原因,因为Android下不是标准的Linux系统,没有/etc/resolv.conf文件。
而golang标准库中的net模块是通过解析/etc/resolv.conf文件获取到DNS服务器地址的。由于不能获取到,会使用默认值127.0.0.1:53,而本地又没有开启DNS服务所以就报错了。
解决办法有5个(前两个都需要root权限):
/etc/resolv.conf文件,文件内容 nameserver 114.114.114.114,优点是最简单粗暴,缺点是不够灵活,而且小米手机官方root是权限不足够的;getprop net.dns1可以获取到Android系统下正确的DNS,由于需要占用53号端口,所以需要root权限;frp中代码中自行解析DNS,个人认为这个是比较的解决办法,并且便于交叉编译,希望能完成;golang源码中的net模块,用定制版编译器编译frp;你提到的四个解决方法中,方案三是可取的,我个人目前没有这方面的开发计划,如果有需求可以自行修改源码提 PR,尽量在最小的改动下实现这个功能,如果需要改动较多,可能暂不考虑在这个项目中实现。
考虑一种可能的简单修改: 通过修改 net.DefaultResolver 的 Dial 函数来将 dns 查询请求转发到用户指定的 ip 和 端口。
或者在frp里面所有Dail的地方,预先用 nslookup命令 解析好域名?
@linkerlin 你提的这个方法,需要修改所有 Dial 调用的地方,如果可以通过修改 net.DefaultResolver 的 Dial 函数来实现,相当于只需要在初始化时全局修改一次,相对来说,改动更小。
我是提交#633事件的人。termux需要安卓5.0才能使用,不一定所有人都有。
你能不能发一个文档,如何在termux上编译,给不会开发的人阅读
https://github.com/golang/go/issues/8877
go 上讨论跟这个应该是一个问题吧
如果不想自己编译,可以直接下载我编译好的二进制文件即可,后面的一大堆东西可以不用看了
frps.zip
frpc.zip
安装 com.termux.apk.zip, com.termux.boot.apk.zip(可选,这个是用来执行自启动脚本的),然后打开termux APP
安装并启动openssh,由于手机端不方便输入命令,使用电脑ssh到手机,方便操作(可选)
cd ~/.ssh
# 如果~/.ssh 目录下没有id_rsa.pub文件,执行命令 ssh-keygen 即可生成
php -S 0.0.0.0:5000
pkg install openssh curl
sshd
# http://xxxxxx/id_rsa.pub为你的电脑公钥
curl http://YOUR_IP_ADDRESS:5000/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh root@YOUR_IP_ADDRESS -p 8022
golangpkg install golang
frp源码go get github.com/fatedier/frp
frps和frpccd $HOME/go/src/github.com/fatedier/frp/cmd/frpc
go build
cd $HOME/go/src/github.com/fatedier/frp/cmd/frps
go build
@fei-ke 确实是同一个问题,上面讨论了三年多了,我不指望能在那边得到解决
其实还可以用第三方库,比如:https://github.com/miekg/dns 。这样就不用自己实现整个DNS的RFC了。
安卓终端模拟器,如果因dns变化导致连接失败,进程不会重启,有什么办法让进程守护吗
补充添加v0.21.0的已编译版本
frpc-0.21.0.zip
frps-0.21.0.zip
赞。但问题是我服务器用的是0.20.有多个0.20的客户端在运行。真纠结
准备明天在我的耻辱机上试一下。不知道能不能跑起来。好纠结
补充添加v0.21.0的已编译版本
frpc-0.21.0.zip
frps-0.21.0.zip
没跑起来,
cannot link executable "./frpc-0.21.0" "/data/data/com.termux/files/usr/lib/libtermux-exec.so" is 64-bit instead of 32-bit....
嗯...试着在termux上执行一下termux-chroot,虚拟一个chroot,这样程序就应该可以找到正确的resolv.conf了,也不用自己编译了。
你们为啥不装一个linux deploy呢?我都部署了个网站在我机子上跑了。。。
已经2020了,还是不行
@svengong https://github.com/fatedier/frp/blob/master/conf/frpc_full.ini#L56
上面的 history 中有对应 commit。
Most helpful comment
用termux编译的方法如下
如果不想自己编译,可以直接下载我编译好的二进制文件即可,后面的一大堆东西可以不用看了
frps.zip
frpc.zip
安装 com.termux.apk.zip, com.termux.boot.apk.zip(可选,这个是用来执行自启动脚本的),然后打开
termuxAPP安装并启动
openssh,由于手机端不方便输入命令,使用电脑ssh到手机,方便操作(可选)golangfrp源码frps和frpc