解决Samba作为WINS服务器时总是把某个服务器名称解释为错误IP地址的问题

作者:Sender  来源:WaveCN.com  发布日期:2015-05-11  最后修改日期:2015-05-11

  手头的LINUX网关兼任了很多工作,其中包括了作为内网的WINS服务器。这个设定的原因是...算了不表。某天,突然发现之前好好的某个网络共享死活连不上去。于是进行各种检查,最重要的表现是:

  • 用IP地址访问网络共享是否可行?是。
  • 用服务器名访问网络共享是否可行?否。

  照旧怀疑是否各种IP设置的问题?是否WINDOWS的某些网络相关服务(尤其是 TCP/IP NetBIOS Helper 这个服务)是否被停掉?甚至怀疑了WINSOCK是否被破坏......一番折腾,仍然不行。

  没辙了,上网乱找,找到一个很旧很旧的小软件: NBLOOKUP (https://support.microsoft.com/en-us/kb/830578)。这个软件一直都没有被 Microsoft 纳入到正式的NetBeui工具(比如常用的NBTSTAT)家族中。用这个工具检查发现,它返回的服务器名称解释结果是不正常的,具体一点,就是服务器的名称未能解释成正确的IP地址,而是解释成了这台服务器在之前使用的另外一个地址。下面是这个工具的输出例子:

C:Userssender>nblookup wings

Recursion is on

Querying WINS Server: 192.168.1.6
NetBIOS Name: wings
Suffix: 20

Name returned: WINGS
Record type: Unique
IP Address: 192.168.1.10 (注:实际应该是192.168.1.33)

  这就有点奇怪了。按说NETBEUI的工作机制,它是不存在名称缓存,所有的解释都是即时发组播包去查询的。由于客户端计算机设置了LINUX网关作为WINS服务器,于是开始怀疑问题出在网关的Samba上。通过在网关上直接抓包(WireShark也是必须要掌握的工具),发现网关的Samba服务对于WINS解释请求都是立即回应,没有进行任何组播查询的。仔细去看文档,原来Samba负责进行WINS解释的nmbd服务的工作方式和WINDOWS本身的实现有所不同。Samba的nmbd服务可能是出于减少网络广播的目的,会在内部维持一个服务器的解释列表,文件名是wins.dat。通过locate找到这个文件的位置是:

/var/cache/Samba/wins.dat

  停掉服务然后删除这个文件,再重启服务:

service smb stop
rm /var/cache/Samba/wins.dat
service smb start

  目测wins.dat文件自动被重建。再在客户端上通过nblookup进行测试,一切正常了。附带一提的是在Linux下,Samba也提供了类似nblookup的工具,名称为nmblookup,这里就不浪费时间去介绍了。

  最后一个问题是为何这个IP地址改了这么久,直到今天才出事?认真想了一下,才发现其实是很多事情掩盖了这个问题:
  1、改IP后为了保证兼容性,旧IP被作为第二IP地址依然保留在适配器的设置中,直到最近几天才删掉;
  2、删掉旧IP后直到发现问题的这一段时间内,这个网络共享都是通过之前创建的、基于新IP而不是服务器名称的网络驱动器去访问的;
  3、直到网络大调整,网络驱动器删除重建时,问题就跳了出来。

  结论就一个字:囧。

 

本栏目相关
  •  2014-11-19 修改arpwatch使通知邮件主题显示IP地址(我的CentOS 源码包修改实例)
  •  2015-05-11 解决Samba作为WINS服务器时总是把某个服务器名称解释为错误IP地址的问题
  •  2022-12-12 Linux Kernel 日志排错分析和处置三例
  • 微信订阅号二维码

    本页网址二维码:

    本栏目热门内容
  • Acrobat虚拟PDF打印机执行打印时挂起,解决办法竟然...
  • LINKSYS交换机登录WEB界面显示不正确的解决方法
  • 又一次RAID 5阵列故障记录
  • 解决VMware vSphere ESXi 5.0 Update 1 中虚机不能...
  • 修改CentOS发行信息以绕过Dell服务器BIOS更新和DSET...
  • 解决虚拟化运行的 Windows Server 2003 标准版出现...
  • Windows Server 2008 重命名域和域控制器
  • Intel Nehalem CPU Errata 导致 VMWare ESXi(vSpher...
  • 一次很精神的电脑组装过程记录(但不是自己的电脑)...
  • 解决MySQL Cluster 备份总是失败,提示文件已存在的...
  • MegaCli安装及使用杂记
  • 解决WSUS显示客户端不全的问题
  • 解决 VMWare vSphere 6 客户端无法修改用户密码
  • 解决Windows Server 2008 R2域控制器显示无法连接到...
  • 本站服务器RAID 5阵列双硬盘失效挽救记录
  • 网站数据库从MySQL 5.0升级到5.6的记录
  • 解决MariaDB使用Percona XtraBackup增量备份出错
  • DELL PowerEdge 820 报CPU3 INTERNAL ERROR 的解决...
  • Linux 下的分区调整工具GParted实战
  • 修改arpwatch使通知邮件主题显示IP地址
  • 程序员漫画:如何用8种不同的编程语言去解救公主
  • 解决很好用的多合一即时通信软件pidgin的崩溃问题
  • 解决Samba WINS服务的错误解释问题
  • 使用 GParted 进行虚拟机硬盘分区调整操作
  • 解决Squid代理HTTP时在浏览器出现Content Encoding ...
  • 用Delphi编写使用到ADO的DLL的一些问题
  • 网站简单改版
  • 索尼系列手提电脑备份失败,出现700错误的解决办法
  • Dell R900服务器 BMC firmware incompatible with C...
  • 更多...