Closed phonezhou closed 5 months ago
换tproxy
以下解决方案在ubuntu测试有效: Linux下sing-box tun模式的DNS解析,在systemd-resolved服务之后。默认情况下systemd-resolved提供的DNS服务只监听127.0.0.53:53,而且即使你使用iptables把传入DNS请求转发到127.0.0.53也会被拒绝,因为默认设置下这个DNS服务要验证源IP地址是否为本地地址。这样就造成,客户端配置DNS地址为sing-box所在服务器地址,但是DNS解析失败的情况。有些客户端(如安卓手机)看似DNS解析成功,但其实是IPv6 DNS成功(因为无法配置,没有指向sing-box所在服务器),IPv4 DNS是失败的。
你可以试一试运行nslookup baidu.com 127.0.0.53
应该有结果,但是nslookup baidu.com 127.0.0.1
却没有结果。
如果想要让这个DNS服务监听其他主机的DNS请求,需要以管理员权限修改配置文件/etc/systemd/resolved.conf
,在文件下面的配置部分增加两行:
DNSStubListenerExtra=0.0.0.0
DNSStubListenerExtra=::
意思是让DNS服务对任意IPv4和IPv6地址开放,然后重启systemd-resolved服务
sudo systemctl restart systemd-resolved
这样systemd-resolved就会接受并答复所有IPv4和IPv6的传入DNS请求,满足透明代理的DNS配置要求。在另一台主机(客户端)上验证:
$ nslookup baidu.com x.x.x.x #x.x.x.x为sing-box所在服务器地址。
Server: x.x.x.x
Address: x.x.x.x#53
Non-authoritative answer:
Name: baidu.com
Address: ??.??.??.??
可以查看sing-box日志journalctl -xfu sing-box
,确认接收到dns查询请求。
安全性和高效性矛盾:即使你按照上述做法成功了,依然存在安卓手机无法配置IPv6 DNS地址,造成IPv6 DNS查询泄露的问题。关闭IPv6又会造成很多优质低延迟IPv6 CDN转发节点无法使用。
Operating system
Linux
System version
ubuntu22.04
Installation type
Original sing-box Command Line
If you are using a graphical client, please provide the version of the client.
sing-box 1.84
Version
Description
我在使用sing-box做透明代理,配置好后,运行没有报错,但局域网机器把网关和DNS指向sing-box机器后,无法上网,大神们提供个排查方向吧。
拓扑:PVE下面虚拟 光猫->ikuai主路由->ubuntu(singbox)->客户端
ubuntu22.04清况 1.IP转发已开 echo 1 > /proc/sys/net/ipv4/ip_forward 2.nftables清空 3.tun模式代理
客户机win10(192.168.1.4) 1.CN网无法上 2.Google外网无法上 3.nslookup 获取不了 IP 4.微信能收到信息,那应该是UDP没有问题 5.在metacubexd看,是有192.168.1.4的链接
请问这个情况我应该怎么排查,大神们提供个排查方向吧!感谢
Reproduction
拓扑:PVE下面虚拟 光猫->ikuai主路由->ubuntu(singbox)->客户端
ubuntu22.04清况 1.IP转发已开 echo 1 > /proc/sys/net/ipv4/ip_forward 2.nftables清空 3.tun模式代理
客户机win10(192.168.1.4) 1.CN网无法上 2.Google外网无法上 3.nslookup 获取不了 IP 4.微信能收到信息,那应该是UDP没有问题 5.在metacubexd看,是有192.168.1.4的链接
请问这个情况我应该怎么排查,大神们提供个排查方向吧!感谢
Logs
No response
Integrity requirements