遇到一例服务器无法访网页的问题:ping IP 是正常的,ping域名会报错找不到IP地址,服务器可以远程,网络本身没有问题,判断属于系统内部问题,尝试下面的命令不行
netsh winsock reset
ipconfig /flushdns
ipconfig /registerdns
奇怪的是nslookup是能正常解析到的,最后发现是DNS注册表被改了,是被一个VPN软件修改的,解决方法是删掉DnsPolicyConfig这个子目录,然后重启,机器网络就完全正常了
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\DnsPolicyConfig
reg delete "HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\DnsPolicyConfig" /f
Remove-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\DnsPolicyConfig" -Recurse -Force
类似现象的问题:
现象:本地连接ncpa.cpl打不开、任务管理器taskmgr打不开、cmd或powershell卡住、eventvwr打不开、浏览器卡住、RDP远程卡住、ping ip是通的、ping域名没有反应、云监控agent报错并丢失基础监控图像、openvpn等业务服务报错、系统服务CryptSvc报错、系统服务NlaSvc报错(以上现象,重启机器后全都恢复正常)
整体上,是相近的case
因为dnscache服务太重要了
dnscache对应的svchost在一些情况下耦合了好几个很关键的系统服务,dnscache出问题,则牵一发动全身
也许触发条件就是特定业务,比如openvpn,至少从注册表来说,openvpn会改动dnscache服务的注册表,而dnscache服务对应的svchost.exe是关键系统进程,并且在一些情况下会耦合好几个关键系统服务,可能会导致svchost.exe死锁,最终在一定条件下卡死,只能重启机器解决,具体可以参考下我这篇文档
dnscache服务很关键,我们要警惕一些软件比如openvpn对dnscache服务的注册表的改动
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\DnsPolicyConfig
对于耦合的关键服务,如果想解耦变成独立的(own模式),以dhcp服务为例,可以这样调整
sc.exe config dhcp type= own obj= LocalSystem
1703及其之后的系统(即server2019、2022),在≥3.5G内存的机器上,svchost.exe默认是解耦关键系统服务的,<3.5G的机器上,svchost.exe则默认是耦合模式。 1703之前的低版本系统(2008R2、2012R2、2016),不论内存多大,svchost.exe默认都是耦合模式,即Dnscache、CryptSvc、NlaSvc等关键系统服务是耦合在同一个pid的svchost.exe的。 耦合模式的情况下,Dnscache有问题的时候会影响cryptsvc和网络通讯(比如影响内网域名解析继而影响云监控等内网服务上报数据),并会导致整个系统卡顿、远程卡死,尤其是涉及用户登录、证书验证的场景,比如远程、浏览器等。有现场的系统可能伴随Cryptographic Services(CryptSvc)、Network Location Awareness(NlaSvc)的报错日志。针对这种情况,可以试试临时解决方案(kill dnscache对应的pid)。
powershell能打开的话,执行这几句powershell:
sc.exe queryex DNSCache
sc.exe queryex cryptsvc
$DNSCachePID=(((sc.exe queryex DNSCache) |findstr PID) -split ":")[1].Trim()
taskkill.exe /f /pid $DNSCachePID
sc.exe start DNSCache 2>&1 >$null
sc.exe start cryptsvc 2>&1 >$null
tasklist /svc|findstr /i "dns cryptsvc"
sc.exe queryex DNSCache
sc.exe queryex cryptsvc
powershell不能的话,打开cmd:
tasklist /svc|findstr /i "dns cryptsvc" 看下dnscache对应的pid,然后执行
taskkill.exe /f /pid 后面跟dnscache对应的pid,kill后会自动拉起一个新的pid
如果powershell、cmd、TAT都无法下发指令,且图形界面也无法重启dnscache服务,则只能重启机器恢复
如果powershell、cmd、TAT都无法下发指令,且图形界面也无法重启dnscache服务,则只能重启机器恢复
如果powershell、cmd、TAT都无法下发指令,且图形界面也无法重启dnscache服务,则只能重启机器恢复
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。