我在 Linux 机器上使用 OpenVPN,我需要一种方法来将此设置推送到客户端,以便能够在 *.example.com 内访问 machine.example.com。我尝试使用 openvpn 的配置来执行此操作,但似乎如果客户端使用 Windows 则不起作用。
为了解决这个问题,我需要一个 bat 文件来在建立 vpn 连接后更改 windows 客户端机器上的 dns 搜索路径。
答案1
wmic nicconfig where "description='NAME OF THE ADAPTER HERE'" call setdnsserversearchorder("10.0.0.1", "10.0.0.2")
要查看可以使用此类 (Win32_NetworkAdapterConfiguration) 执行的所有有趣的其他操作,请参阅这里或查看方法文档。
wmic nicconfig call /?
编辑:正如我后来指出的,你可能想要其中之一:
wmic nicconfig where "description='NAME OF THE ADAPTER HERE'" call setdnsdomain("yourdomain.tld")
(因此在官方文档中 yourdomain.tld 就像“microsoft.com”一样)。
或者
如果您想更改搜索域的顺序(如果您有很多域,您可以尝试setdnssuffixsearchorder()
。
wmic nicconfig where "description='NAME OF THE ADAPTER HERE'" call setdnssuffixsearchorder("yourdomain1.tld", "yourdomain2.tld")
如果您想将此应用于每个卡或适配器,您可以说任何不为空的。我没有测试过这一点,也不知道这对您系统上的操作系统和基于 VPN 的虚拟适配器有何影响,所以请测试一下前破坏生产箱)。 因此,重新审视上面的例子。
wmic nicconfig where "description=!=null" call setdnssuffixsearchorder("yourdomain1.tld", "yourdomain2.tld")
再次查看上面的警告。因此,如果你想在一个快速而肮脏的批处理文件中执行此操作,只需执行类似这样的操作(此时针对特定适配器,我希望你知道在复制我的一个半心半意的脚本之前是否需要应用于所有适配器。我做了Pastebin 上给你一个非常垃圾的东西。希望对您有帮助。我已将其转储到下面的屏幕。使用批处理文件时,请确保“引用您的适配器名称”并引用“您的域名”,否则会产生非常糟糕的结果,使您的计算机崩溃,这非常无趣。
@ECHO OFF
IF NOT %1=="" GOTO CHECKPARAM
ECHO You did not mention an adapter for me to configure.
ECHO Goodbye!
GOTO :EOF
:CHECKPARAM
REM Make sure that other than setting the adapter name,
REM you actually have a domain set.
IF NOT %2=="" GOTO CONFIGDNS
ECHO You did not supply a domain you want configured.
ECHO Goodbye!
GOTO :EOF
:CONFIGDNS
%WINDIR%\system32\wmic.exe nicconifg "where description='%~1'" call setdnsdomain("%~2")
IF %ERRORLEVEL%==0 GOTO :EOF
ECHO Uh-oh. WMIC seems to have not exited gracefully.
ECHO The error code was %ERRORLEVEL%.
ECHO Goodbye!
:EOF
答案2
我认为您可以使用来做到这一点wmic
,但我不确定如何做。
每个版本的 Windows 都有一个名为附加主要和连接特定的 DNS 后缀这可能会有帮助。