V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
magicyao
V2EX  ›  程序员

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

  •  
  •   magicyao · 86 天前 · 1279 次点击
    这是一个创建于 86 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 顺利运行,但是——为什么呢

    第 1 条附言  ·  86 天前
    还有一些其他的信息可以提供。
    1 、wcf 服务是突然出现故障的,ssms 访问也是。
    2 、ip 配置等都没有问题。
    3 、在 sqlserver 那台机器上有一个 iis 的.net 服务,可以通过一切可用 ip (包含 localhost ,127.0.0.1 ,0.0.0.0 ,192.168.5.100 )去访问该服务,都没有问题
    11 条回复    2024-09-26 19:15:43 +08:00
    billccn
        1
    billccn  
       86 天前
    防火墙规则查一下?

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

    还有可能是有人乱搞路由表
    yuhuai
        2
    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
        3
    zhangeric  
       86 天前
    这个应该是再配置管理器对应得 ip 地址没有设置吧.你检查一下 ipall 这个设置了么?
    datocp
        4
    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
        5
    cccvno1  
       86 天前
    先命令行 ping 下看看 127.0.0.1 能不能被解析
    能解析的话看看 sqlserver 配置管理器网络配置里有没有加 127.0.0.1
    不能的话看看防火墙和 ipv6 这些配置
    magicyao
        6
    magicyao  
    OP
       86 天前
    @billccn 这个 WCF 程序之前一点问题没有,是突然出现故障的,然后防火墙规则和 sqlserver 管理器里面的 ip 配置是检查过没有问题的,路由表是怎么看?
    magicyao
        7
    magicyao  
    OP
       86 天前
    @yuhuai 这个 WCF 程序之前一点问题没有,是突然出现故障的,ip 配置刚刚也检查过没问题,通过刚刚的 4 、5 排查是可以推论出不存在这个问题,所以这才是吊诡的地方
    magicyao
        8
    magicyao  
    OP
       86 天前
    @zhangeric 刚刚有另外检查过,你看 4 、5 条,本机通过 100 无法访问,服务器 b 可以通过 100 访问,所以我才会觉得吊诡
    zhangeric
        9
    zhangeric  
       86 天前
    @magicyao #8 实在 sqlserver 配置管理器那里找到对应得网络配置里得 tcp/ip,双击打开,弹出得窗口里有个 ip 地址配置页,你可以添加对应得 ip 配置或者直接在 ipall 里配置 1433 端口.
    magicyao
        10
    magicyao  
    OP
       86 天前
    @zhangeric 就是那里配置的,如果没配置好的话,服务器 b 无法通过 192.168.5.100 去访问的,而且在此之前所有的访问都是没问题的,各个地址都有试过
    billccn
        11
    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 服务锁死了但进程还在
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2575 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:59 · PVG 19:59 · LAX 03:59 · JFK 06:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.