sqlserver 本地无法通过网络连接,局域网内其他主机却可以连接

86 天前
 magicyao

sqlserver 本地无法通过网络连接,局域网内其他主机却可以连接

近期出现了一个奇怪的问题,不确定是哪方面的原因

服务拓扑

两台服务器

  1. A 服务器 [ 192.168.5.100 ] :redis 、mongo 、sqlserver 、一个 wcf 服务主要用于缓存更新
  2. B 服务器 [ 192.168.5.150 ] :一些后端服务
  3. A 服务器有两张网卡,之前已经被禁用一张。

问题情况

  1. wcf 无法连接本地 redis ,后续重启服务器、重启 redis 、重启 wcf 服务莫名其妙可以连接 redis 了,这里应该存在某个网络问题,顺便检查了所有服务的启用情况,都在启用中。

  2. wcf 可以连接 redis 之后,发现无法连接 sqlserver ,遂排查端口占用,redis 无端口占用,发现 wcf 端口被 [ NT Kernel & System ] 这个 system 服务占用,于是修改 wcf 端口,然而还是没有解决这个问题。

  3. 遂排查 sqlserver ,这时候吊诡的情况终于出现了,使用 ssms 进行访问

    1. 计算机名访问 sqlserver 可以
    2. localhost 访问 sqlserver 可以
    3. 127.0.0.10.0.0.0访问 sqlserver 不可以
    4. 192.168.5.100访问 sqlserver 不可以
    5. 在服务器 B 通过192.168.5.100访问服务器 A 的 sqlserver 可以
  4. 补充:之前出现过同样的问题,初步认定为是双网卡导致的,于是禁用了一张网卡,当时这个问题就被解决,现在这个问题再出现,可能也与双网卡有关,但是不知道关系在哪

问题:如果排查 sqlserver 的时候,仅仅出现前四步可以认定为没有开放远程,但是第五步就……很吊诡了

后续处理:将 wcf 中 sqlserver 的连接字符串中的 127.0.0.1 修改为 192.168.5.100 ,随后 wcf 顺利运行,但是——为什么呢

1279 次点击
所在节点    程序员
11 条回复
billccn
86 天前
防火墙规则查一下?

还有 SQLServer 是可以设置哪个 IP 监听,没有监听的 IP 用来访问就无效。

还有可能是有人乱搞路由表
yuhuai
86 天前
去 SQL Server Configuration Manager 网络配置下的 TCP/IP ,IP3,4,5 这几个配置是否 Enabled 和 Active 以及是否正确配置端口号,如果你找不到 Configuration Manager,看这个 https://learn.microsoft.com/zh-cn/sql/relational-databases/sql-server-configuration-manager?view=sql-server-ver16
zhangeric
86 天前
这个应该是再配置管理器对应得 ip 地址没有设置吧.你检查一下 ipall 这个设置了么?
datocp
86 天前
大家对 sqlserver 这个防火墙有没有深入研究,或者说 sql 自身是不是也有什么重启规则

公司的 ERP 一直有问题,程序员说是网络问题。。。

1 。今年的服务器一开始没有上 windows 自带防火墙
2 。由于一直咬定网络有问题,这次用了移动的 5G 网络来测试,一开始的 7 天一直没问题,似乎一直到我启用了 windows 防火墙,5G cpe 开始反复的出问题。。。就是同事反应一天掉个 3 次线
3 。后来通过狂 ping 服务器,确实又出现了当天没掉线的情况
@echo off
echo 检查网络是否联通来,长时间没反应请点右上角 关闭
:check
ping -n 1 192.168.5.34|find "TTL"
IF ERRORLEVEL 1 goto startConnect
IF ERRORLEVEL 0 goto check
pause > nul
::这里进行命令的执行等操作,操作的满足条件就是网络通畅
:startConnect
echo %time:~0,2%%time:~3,2%%time:~6,2% >>a.txt
goto check
pause>nul

4 。由于用的华为的 s5735 交换机,无线 192.168.5.x 跨 vlan 访问 192.168.1.x 的服务器,最后一直搞不清楚什么问题,不开防火墙也不行啊。
::netsh advfirewall reset
::netsh advfirewall set allprofiles state off
netsh advfirewall firewall del rule name="srv_icmp"
netsh advfirewall firewall del rule name="srv_svchost"
:::netsh advfirewall firewall del rule name="srv_mssqlt"
:::netsh advfirewall firewall del rule name="srv_mssqlu"
netsh advfirewall firewall del rule name="srv_sqlservr"
::netsh advfirewall firewall del rule name="srv_sqlbrowser"
::
::netsh advfirewall firewall add rule name="srv_icmp" protocol=icmpv4:8,any dir=in action=allow
netsh advfirewall firewall add rule name="srv_icmp" protocol=icmpv4:any,any dir=in action=allow
netsh advfirewall firewall add rule name="srv_svchost" dir=in action=allow protocol=TCP localport="20,21,49152-65535"
:::netsh advfirewall firewall add rule name="srv_mssqlt" dir=in action=allow protocol=TCP localport="135,1433,1434,4022"
:::netsh advfirewall firewall add rule name="srv_mssqlu" dir=in action=allow protocol=UDP localport="1434"
netsh advfirewall firewall add rule name="srv_sqlservr" dir=in action=allow program= "D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\sqlservr.exe" enable=yes
netsh advfirewall firewall add rule name="srv_sqlservr" dir=out action=allow program= "D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\sqlservr.exe" enable=yes
::netsh advfirewall firewall add rule name=srv_sqlbrowser" dir=in action=allow program= "C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes

5 。上次似乎 sqlserver 本身也有什么 reset 的机制


至今无法保持长连接,除了狂 ping 以后。反正客户端/软件端/网络/服务器端/防火墙,各种妖怪,至今排除不了这个问题。。。
cccvno1
86 天前
先命令行 ping 下看看 127.0.0.1 能不能被解析
能解析的话看看 sqlserver 配置管理器网络配置里有没有加 127.0.0.1
不能的话看看防火墙和 ipv6 这些配置
magicyao
86 天前
@billccn 这个 WCF 程序之前一点问题没有,是突然出现故障的,然后防火墙规则和 sqlserver 管理器里面的 ip 配置是检查过没有问题的,路由表是怎么看?
magicyao
86 天前
@yuhuai 这个 WCF 程序之前一点问题没有,是突然出现故障的,ip 配置刚刚也检查过没问题,通过刚刚的 4 、5 排查是可以推论出不存在这个问题,所以这才是吊诡的地方
magicyao
86 天前
@zhangeric 刚刚有另外检查过,你看 4 、5 条,本机通过 100 无法访问,服务器 b 可以通过 100 访问,所以我才会觉得吊诡
zhangeric
86 天前
@magicyao #8 实在 sqlserver 配置管理器那里找到对应得网络配置里得 tcp/ip,双击打开,弹出得窗口里有个 ip 地址配置页,你可以添加对应得 ip 配置或者直接在 ipall 里配置 1433 端口.
magicyao
86 天前
@zhangeric 就是那里配置的,如果没配置好的话,服务器 b 无法通过 192.168.5.100 去访问的,而且在此之前所有的访问都是没问题的,各个地址都有试过
billccn
86 天前
@magicyao 命令行: netsh int ipv4 sh route

另外我在想你说 WCF 端口被占用,应该是它的 TCP 端口共享功能,就是多个程序可以监听同一个 TCP 端口,内核按照他们请求的内容分发到相应的程序。你可以用这个文档里面的 iplisten 和 urlacl 确定一下是不是正常: https://learn.microsoft.com/en-us/windows-server/networking/technologies/netsh/netsh-http

我有点怀疑是你原先有个 WCF 服务锁死了但进程还在

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1075874

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX