我正在尝试使用以下命令从 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。
添加上下文:
我正在尝试使用以下连接字符串结构在 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,它可能有一些指导。具体来说,这有可能这。更改
InterfaceMetric
VPN 适配器似乎是我见过的最好的解决方案之一,但我还没有亲自测试过。第一个方法很简单,所以我会先尝试一下。在评论中,你询问了有关此问题的任何已知 Github 问题。有两个非常受欢迎的问题(#5068和#4277),但由于评论数量众多,很难筛选。不过,上述两个建议都针对这些问题。
我没有看到你正在使用哪个 Windows 版本,但如果你使用的是 Windows 11 Pro 或更高版本,预览版中有一个新的实验性 WSL 功能,允许你创建桥接的 Hyper-V 交换机并告诉 WSL2 使用它。我不确定它是否能解决 VPN 问题,但这是我接下来要尝试的事情之一(在上述之后)。请参阅这篇博文了解详情。
如果您确实选择这条路线,您可能还需要在 WSL2 内安装并运行 VPN 软件。