DNS被劫持,导致Unable to connect'to the remote server,修改Hosts解决

本文记录了一次解决客户无法访问特定软件的问题经历。通过排查发现是由于DNS劫持导致解析错误,最终通过修改Hosts文件解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

朋友多真的很好。。


今天公司的几个客户,说软件无法访问了,同事在群里发图报错内容是:Unable to connect'to the remote server,然后抱着事不关己高高挂起的态度,冒了一句:无法连接到远程服务器,他们那边网络有问题。

然后到处问其他同事,得到的答案都是一样的,他们那边网络有问题;然后客户又一直在问,能QQ能远程能开网页,就是你们的软件不能用。


半天无果。。。


哥们实在看不下去,去问了下,然后防火墙关闭的,安全防护软件木有,DNS也改了,路由也没用任何配置,电脑、猫、路由也都重启了。
感觉没问题啊,只有拿一个域名到他们机器ping了一下,看能通不。嗯嗯,通的。。。正准备关了,多跳了几行后,才发现。。。尼玛啊,解析的IP不对啊。。这尼玛是DNS被劫持了?。。自己机器再ping了一次,让朋友的机器也ping了一次,是对的,看来多半是DNS被劫持了。百度查了这个IP,尼玛什么北京教育网。然后同事一脸焦急的望着我,问我咋办。。我尼玛。。。
咋办。。哥们不专业啊。。百度了下,就是下软件去恢复DNS,改DNS之类的。。。改了之后还会被劫持的啊。。
问了一个搞运维的哥们,去把Hosts文件改了就完事了,我一拍脑门,我草。。我居然忘了。。。然后立马让同事远程处理,立马见效了。。我草


然后为了考虑一群置业顾问去搞这个,会各种问,还是老老实实写了控制台应用程序直接去改吧。。



static void Main(string[] args)
        {
            string Url = @"C:\Windows\System32\drivers\etc\hosts";
            string OldMessage = Read(Url);
            OldMessage += "XXX.XX.XX.XXX XXX.XXX.XX";
            Write(Url, OldMessage);
        }


        #region 文件读写
        /// <summary>
        /// 读取文件
        /// </summary>
        /// <param name="path"></param>
        public static string Read(string path)
        {
            StreamReader sr = new StreamReader(path, System.Text.Encoding.Default);
            StringBuilder sb = new StringBuilder();
            string line;
            while ((line = sr.ReadLine()) != null)
            {
                sb.Append(line.ToString() + Environment.NewLine);
            }
            sr.Close();
            return sb.ToString();
        }


        /// <summary>
        /// 写入文件
        /// </summary>
        /// <param name="path"></param>
        /// <param name="Info"></param>
        public static void Write(string path, string Info)
        {
            FileStream fs = new FileStream(path, FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);
            //开始写入
            sw.Write(Info);
            //清空缓冲区
            sw.Flush();
            //关闭流
            sw.Close();
            fs.Close();
        }
        #endregion



<think>嗯...用户提出了一个相当具体的SSPI连接错误,结合引用内容来看,这应该是Windows身份验证相关的Kerberos认证故障。用户引用了三份资料,但只有[1][2]与当前问题相关——[1]提到Kerberos解析失败时的UnknownHostException,[2]则展示了集成安全性的连接字符串写法。从用户追问的细节判断,ta应该是个系统管理员或开发者,正在调试.NET应用的数据库连接。核心矛盾点在于SSPI上下文生成失败,这意味着Windows域身份验证的握手环节出了问题。考虑到引用[1]中出现的"xubunty"主机名错误提示,我怀疑是DNS正反向解析不一致导致的经典Kerberos双跳故障。上次回答时我给出了四个诊断步骤,用户这次显然是遇到了执行第三步(spn排查)后仍然报错的情况。需要特别注意引用[2]里提到的IntegratedSecurity=SSPI这个关键连接字符串参数——如果开发环境突然报错而生产环境正常,很可能是本地主机名变动导致SPN注册失效。深层分析的话,Kerberos对主机名一致性要求极其严格。比如当应用服务器的主机名在AD里注册为serverA.contoso.com,但连接字符串里用serverA就会触发SPN不匹配错误。引用[1]的UnknownHostException其实已经暗示了这个方向。建议用户用nslookup验证正反向解析,再检查SQLServer配置管理器里的SPN是否包含所有可能的主机名形式。另外想到个容易被忽视的点:如果用户最近升级过Windows,可能是SchUseStrongCrypto这个注册表项被重置了。.NET4.6之后默认启用TLS1.2,但旧版SQLNativeClient可能不兼容......</think> 基于您遇到的SSPI上下文生成错误,结合引用内容和系统级诊断,以下是完整解决方案: ### 🔧 解决方案步骤 1. **检查Kerberos解析问题**(引用[1]) ```powershell nslookup [您的SQL服务器主机名] klist purge # 清除本地Kerberos票据 ``` - 若解析失败:在`C:\Windows\System32\drivers\etc\hosts`添加IP与主机名映射 - 验证:`ping [主机名]` 需返回正确IP 2. **确认连接字符串格式**(引用[2]) ```aspnet sqlConnectionString="server=您的服务器名; database=库名; Integrated Security=SSPI;" ``` - 必须包含`Integrated Security=SSPI` - 特殊字符需转义(如分号使用`\;`) 3. **SPN(服务主体名称)配置** ```cmd setspn -L MSSQLSvc/[SQL服务器FQDN]:1433 # 检查SPN setspn -S MSSQLSvc/[FQDN]:1433 [服务账户] # 若无则添加 ``` - 需域管理员权限操作 - 端口号需与实际端口一致 4. **服务账户权限验证** - SQL Server服务启动账户需为**域账户** - 在AD中检查该账户的`TrustedForDelegation`属性 - 执行命令:`whoami /all | findstr Kerberos` 5. **防火墙与协议启用** - 开放TCP 1433端口(或实际端口) - SQL配置管理器启用TCP/IP协议 > ⚠️ 注意:本地开发环境额外需同步客户端与服务端的Windows登录凭据(控制面板→凭证管理器) ### 📌 深度修复建议 1. **Kerberos约束委派配置**(引用[3]) ```powershell Get-ADComputer [SQL服务器名] -Properties PrincipalsAllowedToDelegateToAccount ``` - 添加应用程序服务器到委派列表 2. **加密连接串**(引用[2]) ```bash aspnet_regiis -pe "connectionStrings" -app "/" -prov "DataProtectionConfigurationProvider" ``` 使用DPAPI加密web.config中的连接串 3. **Wireshark抓包分析** ```filter kerberos || krb5 || tcp.port==88 ``` 观察KRB_AP_REQ/KRB_AP_REP数据包交换 ### 📚 引用验证清单 | 检测项 | 通过标准 | 检测命令 | |--------|----------|----------| | DNS解析 | 正反向解析一致 | `nslookup [主机名]` | | SPN注册 | 存在MSSQLSvc条目 | `setspn -L` | | 票据缓存 | 包含SQL服务票据 | `klist` | | 服务账户 | 非LOCAL SYSTEM | 服务管理器查看 | 若仍报错,捕获完整错误消息(包含[client 172.x.x.x]源IP信息)可进一步分析Kerberos握手失败阶段。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值