通过 VPN 从 WSL2 连接到 SQL Server 实例

通过 VPN 从 WSL2 连接到 SQL Server 实例

我正在尝试使用以下命令从 WSL2(Arch Linux)连接到 SQL Server 实例:

sqlcmd -S tcp:XX.XXX.XXX.XX\\stix -U service_stix -C

但我明白:

Sqlcmd:错误:Microsoft ODBC Driver for SQL Server 18:登录超时已过期。Sqlcmd:错误:Microsoft ODBC Driver for SQL Server 18:MAX_PROVS:定位指定的服务器/实例时出错 [xFFFFFFFF]。Sqlcmd:错误:Microsoft ODBC Driver for SQL Server 18:与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关更多信息,请参阅 SQL Server 联机丛书。

如果尝试:nc -zv XX.XXX.XXX.XX 1433,我得到:Connection to XX.XXX.XXX.XX 1433 port [tcp/ms-sql-s] succeeded!,和

➜  ~ telnet XX.XXX.XXX.XX 1433
Trying XX.XXX.XXX.XX...
Connected to XX.XXX.XXX.XX.
Escape character is '^]'.

在 PowerShell 中:Test-NetConnection -ComputerName "XX.XXX.XXX.XX" -Port 1433,结果为:

ComputerName     : XX.XXX.XXX.XX
RemoteAddress    : XX.XXX.XXX.XX
RemotePort       : 1433
InterfaceAlias   : vnet-site2site
SourceAddress    : 172.SS.SS.S
TcpTestSucceeded : True

发出相同的命令:sqlcmd -S tcp:XX.XXX.XXX.XX\stix -U my_user -C在 CMD/PowerShell 中,我能够连接到实例:

PS C:\Users\Windows11> sqlcmd -S tcp:XX.XXX.XXX.XX\stix -U my_user -C
Password:
1>

是否可以使用 VPN 连接到 WSL2 中的 SQL Server 实例?

SQL Browser 服务肯定正在运行,正如我所说,我可以使用 CMD(使用 SQLCMD)和 NodeJS 应用程序(如 Prisma)从 Wndows 访问数据库。

我认为我缺少 Windows 或 WSL2 部分的一些配置。

但有一个问题:我无法直接访问数据库或服务器来配置某些特定内容,我必须询问 DBA。

VPN: VPN


添加上下文:

我正在尝试使用以下连接字符串结构在 WSL2(Arch Linux)中连接 NodeJS 应用程序(不带 Docker):

DATABASE_URL=sqlserver://XX.XXX.XXX.XX\stix:1433;database=my-database;user=my_user;password=my_pass;integratedSecurity=false;trustServerCertificate=true;

但是我从我的健康检查端点收到一个错误(使用棱镜进行简单查询):

无效prisma.$queryRaw()调用:

查询数据库时出错:转换错误:解析实例 stix 时 SQL 浏览器超时。请检查浏览器是否在端口 1433 中运行以及实例是否存在。

答案1

如果您的应用程序在 WSL1 中运行正常,那么它通常会允许您解决 VPN 问题。

WSL2 和 VPN 的问题在于 WSL2 网络位于虚拟 Hyper-V 交换机和接口上,该交换机和接口在 Windows 主机后面进行 NAT。Windows 网络可能会路由到 VPN,但 WSL2 网络可能不会。

听起来像是这个的某个版本可能是您遇到的问题,但事实上它nc在 WSL2 中仍然可以工作,这使得它不太适合“正常”的 VPN/WSL2 模式。

不过,这里有一些针对 WSL2 可以尝试的事情:

  • 尽管这个问题关于 Cisco AnyConnect,它可能有一些指导。具体来说,有可能。更改InterfaceMetricVPN 适配器似乎是我见过的最好的解决方案之一,但我还没有亲自测试过。第一个方法很简单,所以我会先尝试一下。

  • 在评论中,你询问了有关此问题的任何已知 Github 问题。有两个非常受欢迎的问题(#5068#4277),但由于评论数量众多,很难筛选。不过,上述两个建议都针对这些问题。

  • 我没有看到你正在使用哪个 Windows 版本,但如果你使用的是 Windows 11 Pro 或更高版本,预览版中有一个新的实验性 WSL 功能,允许你创建桥接的 Hyper-V 交换机并告诉 WSL2 使用它。我不确定它是否能解决 VPN 问题,但这是我接下来要尝试的事情之一(在上述之后)。请参阅这篇博文了解详情。

    如果您确实选择这条路线,您可能还需要在 WSL2 内安装并运行 VPN 软件。

相关内容