这个问题听起来有点矛盾,但其实是网络配置中一个很常见的场景,核心在于:“没网”这个说法需要明确是指哪一端没网。

通常有两种截然不同的情况:
1、设备(客户端)没网,但DNS服务器本身有网(最常见的情况,比如公司内网、校园网、虚拟专用网络下的环境)。
2、DNS服务器本身也没网(那就不可能转发到公网DNS,只能用其他方式解决,比如本地hosts或内网DNS缓存)。
下面针对这两种情况,分别说明如何实现。
情况一:客户端没网,但DNS服务器(路由器/内网服务器)有网

这是最常见的“DNS透明代理”场景,客户端的请求被强制传递到一台能访问公网的内部DNS服务器,由这台服务器代替客户端查询公网DNS(如8.8.8.8 或114.114.114.114)。
本质:内网DNS服务器做“递归查询”+“转发器”。
实现方法(以最常见的Linux + dnsmasq为例):
1、确保DNS服务器本身能上网(能ping通8.8.8.8 或1.1.1.1)。
2、安装并配置dnsmasq(或BIND、Windows Server的DNS角色等):

# 安装 dnsmasq(假设是 Ubuntu/Debian)
sudo apt install dnsmasq 编辑/etc/dnsmasq.conf,核心配置如下:
# 监听所有网卡(或指定内网接口)
interface=eth0
bind-interfaces
# 重要:禁止 dnsmasq 从本机 /etc/resolv.conf 获取上游,而是手动指定公网DNS
no-resolv
# 设置转发目标(公网DNS)
server=8.8.8.8
server=1.1.1.1
# 允许哪些内网网段来查询(根据你的实际网段修改)
listen-address=192.168.1.13、启动服务:
sudo systemctl restart dnsmasq4、修改客户端的DNS设置:将客户端的DNS服务器指向这台内网DNS服务器的IP(例如192.168.1.1)。
5、防火墙放行:确保内网设备能向该IP的53端口(UDP/TCP)发送DNS请求。
结果:客户端虽然“没网”(比如没有设置网关或路由受限),但只要它的DNS请求被指向了这台有公网访问能力的内部DNS服务器,那么这台内网DNS服务器就会代为向公网DNS查询,并将结果返回给客户端。客户端实际上是通过DNS隧道间接获取公网资源(例如能从IP直接访问,但域名解析交给了内网服务器)。
如果连内网DNS服务器都无法访问公网(例如完全离线、被物理隔离、或防火墙封了出站用户数据报协议53端口),那么不可能直接转发到公网DNS,公网DNS需要三层网络连通性(IP可达+路由+防火墙允许)。
这时有几个变通方案(按推荐度排序):
1、使用DNS over HTTPS(DoH)或DNS over TLS(DoT):
- 如果内网服务器能出站访问公网但只是53端口被封锁(通常企业级防火墙会封传统DNS端口,但允许HTTPS/TLS端口),可以配置支持DoH/DoT的转发器(如unbound、stubby、dnsmasq 配合dnscrypt-proxy)。
- 配置dnsmasq支持DoH(需要自行编译或使用dnsmasq-2.80+ 结合dnscrypt-proxy 作为上游)。
- 示例:使用dnscrypt-proxy 监听127.0.0.1:5353,dnsmasq 的server=127.0.0.1#5353,这样内网服务器虽“没传统网”,但能通过HTTPS隧道访问公网DNS。
2、离线DNS缓存/预置记录:
- 如果网络完全隔离、没有出站能力(比如病毒实验室、内网测试环境),根本无法转发,只能在内网搭建权威DNS服务器,手动添加需要的域名记录(zone文件),或者使用/etc/hosts文件的批量版本。
- 无法动态获取公网域名的实时解析结果。
3、通过其他协议代理DNS:
- 比如在能上网的机器上开启SOCKS5代理,然后在DNS服务器上通过proxychains 运行dig 或unbound,但这非常不推荐,效率极低且不稳定。
请先确认你的“没网”是指:
客户端没网 ✅解决方案: 按情况一,在路由器或一台能上网的Linux服务器上搭建内部DNS转发器,让客户端把DNS指向这台服务器。
DNS服务器本身也没网 ❌解决方案: 必须首先打通DNS服务器到公网IP的通讯(开防火墙、加路由、或使用HTTPS隧道),否则无法实现“转发公网DNS”。
网络环境是物理隔离/完全离线 ❌不可能实现,只能使用本地hosts或内网DNS服务器手动记录。
如果你是在公司内网或家庭路由器环境下,客户端无法上网(比如你只想让某些设备通过代理或VPN上外网,但DNS查询希望直接解析),最干净的做法是:
1、 在路由器(或旁路网关)上开启dnsmasq。
2、 配置server=8.8.8.8 或server=114.114.114.114。
3、 将客户端的DNS服务器手动填写为这个路由器的IP。
这样,客户端的DNS请求会直达内网路由器,路由器代为查询公网DNS,然后返回结果。客户端的其他网络流量(HTTP/S)如果被拦截,依然无法访问,但域名解析是正常工作的。
如果你能描述更具体的网络拓扑(没网”是指没有默认网关,还是防火墙封了所有端口,还是物理断开),我可以给出更精确的配置方案。
文章摘自:https://idc.huochengrm.cn/dns/27853.html
评论
牛如之
回复在没有网络连接的情况下,可以通过配置DNS转发器,将本地DNS请求转发到已连接到互联网的设备,实现公网DNS解析。
明逸思
回复在没有网络连接的情况下,可以通过将本地DNS服务器配置为公网DNS服务器的IP地址,并设置DNS转发,实现公网DNS解析。
连又琴
回复这个问题探讨了在不同网络环境下,如何实现没网状态下的DNS转发到公网DNS,主要分为客户端没网但DNS服务器有网和DNS服务器本身没网两种情况,分别给出了相应的解决方案。