如何从 WSL2 Debian 系统访问 SQL Server 实例?

如何从 WSL2 Debian 系统访问 SQL Server 实例?

我想从我的 WSL 2 Debian 系统连接到 SQL Server 实例。这是因为我想用 Python 开发一个 cossplatform 应用程序并进行一些测试。

WSL 1

据我所知,在 WSL 1 中,我只有一个适配器在主机和 WSL 之间共享,因此我只需写入本地地址即可连接到主机端口中的某个东西。例如,要连接在主机中运行的 Jupyter Lab 服务器,我可以直接执行此操作而无需打开任何端口,而且它工作正常

wget http://localhost:8888/lab/tree/example_notebook.ipynb

WSL 2 + Jupyter + 防火墙规则

WSL 2 有一个未决问题开发人员声称将 WSL2 连接设为“私人”而不是“公共”,并使防火墙规则以安全的方式工作。

为了使我的 Debian WSL 2 系统和 Windows 主机系统上的 Jupyter 之间的连接正常工作,我必须在防火墙中添加一条“入站规则”

  • 协议:TCP
  • 端口:8888
  • 公共网络
  • 允许的 IP 地址:[我的 WSL 2 Debian 系统 IP 地址] 在这种情况下,整个子网将是:172.22.160.0/20

如果我对 Windows 适配器进行 ping 操作,则一切正常。我还可以使用 nmap 检查端口是否正确打开

$ nmap -p 8888 172.22.160.1 -Pn
Starting Nmap 7.80 ( https://nmap.org ) at 2022-09-22 14:40 CEST
Nmap scan report for [PC-NAME] (172.22.160.1)
Host is up (0.00040s latency).

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

但是我尝试像在 WSL1 系统中那样下载笔记本,它不起作用 :/

wget http://172.22.160.1:8888/lab/tree/example_notebook.ipynb

我也尝试过禁用防火墙,但结果还是一样。

有办法吗?我尝试了 GH 线程中提到的其他方法,但没有找到解决方案。

WSL 2 + SQL Server + 防火墙规则

SQL Server 在我的 Windows 主机上的 cmd 中运行良好,以下命令:

sqlcmd -S [PC-NAME]\SQLEXPRESS -U user_name -P password -d db_name

但是在我的 WSL2 Debian 系统中,我甚至无法 ping 该实例,因为端口始终被“过滤”,即使我禁用防火墙,也会收到此信息:

$ nmap -p 1433 172.22.160.1 -Pn
Starting Nmap 7.80 ( https://nmap.org ) at 2022-09-22 15:19 CEST
Nmap scan report for APD-PC (172.22.160.1)
Host is up.

PORT     STATE    SERVICE
1433/tcp filtered ms-sql-s

我的 SQL Server 实例正在监听远程连接。

我不知道为什么这个端口与我可以毫无问题地打开的 8888 不同。

SQL 服务器

cmd我的 SQL Server 实例正在运行。我可以在控制台中使用此命令连接到我的 Windows 主机:

sqlcmd -S 172.22.160.1\SQLEXPRESS -U username -P password -d database_name

它在本地运行良好,我可以毫无问题地运行一些查询。但如果我从我的 WSL2 Debian 系统尝试,它不起作用即使没有禁用防火墙。主要原因是没有真正的联系。我不知道是否需要

sqlcmd -S PCNAME\SQLEXPRESS -U username -P password -d database_name

我尝试过

  • 禁用我安装的 Windows 防火墙和 VPN 软件。令人惊讶的是,禁用防火墙会将某些端口的状态从已过滤变为已关闭,而不是打开,即使 Jupyter 正在这些端口中运行。端口 8888 可以按预期工作,但其他端口(如 80 或 8081)即使没有防火墙也保持关闭状态。
  • 添加正确的防火墙规则对不同端口的作用不同。我没有发现任何规律,它有点随机。
  • 我有启用 TCP/IP 协议在 SQL Server 配置管理器中我尝试了几种配置。
  • 我启用了防火墙设置名称是虚拟机监控
  • 还有另一个开放的GH 问题请求相同的访问权限

相关内容