本文將告訴您,如何停用執行下列其中一個作業系統的 DNS 伺服器的 DNS 遠端管理:
- Microsoft Windows Server 2003
- Microsoft Windows 2000 Server
您可以使用本文所提到的方法,增強組織內執行 DNS 伺服器服務的電腦安全性。
如需有關影響 Windows
Server 2003 和 Windows 2000 Server 中 DNS 伺服器服務的問題的詳細資訊,請造訪下列 Microsoft 網站:
概觀
根據預設,DNS 伺服器服務允許使用許多介面進行遠端管理。DNS 伺服器服務啟動時,會繫結至暫時範圍的動態連接埠。這個連接埠是由
DNS Microsoft Management Console (MMC) 嵌入式管理單元和 DNS Windows Management
Instrumentation (WMI) 提供者所使用。您可以使用下列登錄項目,控制 DNS 伺服器服務是否允許遠端管理:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters
數值名稱:RpcProtocol
數值類型:REG_DWORD
數值資料:0x4
下列值適用於 RpcProtocol 登錄項目:
- 0x1
這個值相當於 DNS_RPC_USE_TCPIP 的設定 - 0x2
這個值相當於 DNS_RPC_USE_NAMED_PIPE 的設定 - 0x4
這個值相當於 DNS_RPC_USE_LPC 的設定
注意 0x4 的值會限制 DNS RPC 介面只能進行本機程序呼叫。這僅允許進行本機管理。
停用遠端管理的影響
當您將 RpcProtocol 登錄項目設定為 0x4 時,DNS 伺服器服務的遠端管理就會遭到停用。因此,您無法使用 RPC 或
Windows Management Instrumentation (WMI) 管理 DNS 伺服器。在這種情況下,您無法再從遠端位置執行 DNS
伺服器管理工具。不過,您還是可以使用本機管理工具來管理 DNS 伺服器,也可以透過終端機服務連線執行遠端管理 DNS 伺服器。
將
RpcProtocol 設定為 0x4 並不會影響到 DNS 查詢、DNS 動態更新、DNS 區域轉送等等。
注意 如果下列情況成立,DNS 伺服器服務的本機系統管理和組態可能無法作用:
- 您想要管理的伺服器的主機名稱長度為 15 個字元。
- 您使用伺服器的主機名稱來選擇伺服器。
如果要解決這個問題,請在您使用 DNS 伺服器系統管理工具進行管理時,指定電腦的完整網域名稱 (FQDN)。
停用 DNS 伺服器服務的遠端管理
警告
如果您使用「登錄編輯程式」或其他方法不當地修改登錄,可能會發生嚴重問題。您可能需要重新安裝作業系統,才能解決這些問題。Microsoft
不保證可以解決這些問題。請自行承擔修改登錄的一切風險。
如果要停用透過 RPC 功能遠端管理執行 DNS
伺服器服務的電腦,請依照下列步驟執行:
- 按一下 [開始],按一下 [執行],輸入
regedit,然後按一下 [確定]。
- 找出並按一下下列登錄子機碼:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters
- 在 [編輯] 功能表上,指向 [新增],然後按一下
[DWORD 值]。
- 在 [新數值 #1] 方塊中,輸入
RpcProtocol,然後按下 ENTER。
- 用滑鼠右鍵按一下 [RpcProtocol],然後按一下
[修改]。
- 在 [數值資料] 方塊中,輸入
4,然後按一下 [確定]。
- 結束 [登錄編輯程式],然後重新啟動 DNS 伺服器服務。如果要重新啟動 DNS 伺服器服務,請依照下列步驟執行:
- 按一下 [開始],按一下 [執行],輸入
cmd,然後按一下 [確定]。
- 在命令提示字元中輸入下列命令,然後按下 ENTER:
net stop dns && net start dns
將 RpcProtocol 登錄值部署至多部電腦
您可以利用指令碼來部署 RpcProtocol 登錄值。這可讓您輕鬆地在多部電腦上停用 DNS
伺服器服務的遠端管理。如果要執行這項操作,請依照下列步驟執行:
- 使用具有權限可以修改 DNS 伺服器的帳戶登入網域。例如,以網域系統管理員的身分登入。
- 建立所有 DNS 伺服器的清單。如果要執行這項操作,請在命令提示字元中執行下列命令:
dsquery * -filter "(servicePrincipalName=DNS*)" -attr dNSHostName -l > dns_servers.txt
如有必要,請手動編輯建立用來指定所有 DNS 伺服器的 dns_servers.txt
檔案。例如,這個命令只會擷取設定做為 DNS 伺服器的網域控制站。因此,您必須手動新增設定做為成員伺服器的 DNS 伺服器。
注意 您可以在 DNS 嵌入式管理單元中,使用每個區域 [DNS
zone 內容] 對話方塊中的 [名稱伺服器]
索引標籤,以決定要新增至這個清單的 DNS 伺服器名稱。 - 如有必要,請在命令提示字元中使用 cd 命令,以切換至 dns_servers.txt 檔案儲存所在的目錄。
- 輸入下列命令,然後按下 ENTER:
for /f %i in (dns_servers.txt) do reg add \\%i\HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters /v RpcProtocol /t REG_DWORD /d 4 /f
這個命令會新增值為 0x4 的 RpcProtocol 登錄項目。 - 停止所有電腦上的 DNS 伺服器服務。如果要執行這項操作,請輸入下列命令,然後按下 ENTER:
for /f %i in (dns_servers.txt) do sc \\%i stop DNS
- 啟動所有電腦上的 DNS 伺服器服務。如果要執行這項操作,請輸入下列命令,然後按下 ENTER:
for /f %i in (dns_servers.txt) do sc \\%i start DNS
確認多部電腦都已設定 RpcProtocol 登錄項目
如果要查詢伺服器,以及確認是否已設定 RpcProtocol 登錄項目,請依照下列步驟執行:
- 登入已設定 RpcProtocol 登錄項目的 DNS 伺服器。
- 將下列指令碼複製到文字檔案,然後將檔案命名為 Dnsquery.cmd:
Echo Comparing registry value for: > dns_errors.txt echo HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters >> dns_errors.txt
echo Data Value for "RpcProtocol" >> dns_errors.txt echo. >> dns_errors.txt echo. >> dns_errors.txt
Echo Errorlevel 1 - Failed to compare registry values >> dns_errors.txt
Echo Errorlevel 2 - Reg values compared are different >> dns_errors.txt echo. >> dns_errors.txt
echo. >> dns_errors.txt echo ===================================================== >> dns_errors.txt
set _MachineName=
for /f %%i in (dns_servers.txt) do ( call :TEST %%i )
:TEST
Set _MachineName=%1
echo %_MachineName%
reg.exe compare "HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters" "\\%_MachineName%\HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters" /v RpcProtocol
if %_MachineName% == "" echo 0 > nul
if %errorlevel% == 0 echo 0 > nul
if %errorlevel% == 1 Echo Computername: %_MachineName% Errorlevel returned: 1 - Failed >> dns_errors.txt
if %errorlevel% == 2 Echo Computername: %_MachineName% Errorlevel returned: 2 - Different >> dns_errors.txt
:End
rem exit
注意 這個指令碼會比較遠端電腦上的 Parameters 登錄子機碼,與指令碼執行所在電腦上的 Parameters
登錄子機碼。
重要 這個指令碼不可以有尾端空白字元。 - 按兩下 Dnsquery.cmd 檔,加以執行。
移除多部電腦上的 RpcProtocol 登錄值
如果要復原設定 RpcProtocol 登錄值的作業,請依照下列步驟執行:
- 使用具有權限可以修改 DNS 伺服器的帳戶登入網域。例如,以網域系統管理員的身分登入。
- 啟動命令提示字元,然後使用 cd 命令,以切換至 dns_servers.txt 檔案儲存所在的目錄。
- 輸入下列命令,然後按下 ENTER:
for /f %i in (dns_servers.txt) do reg delete \\%i\HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters /v RpcProtocol /f
- 停止所有電腦上的 DNS 伺服器服務。如果要執行這項操作,請輸入下列命令,然後按下 ENTER:
for /f %i in (dns_servers.txt) do sc \\%i stop DNS
- 啟動所有電腦上的 DNS 伺服器服務。如果要執行這項操作,請輸入下列命令,然後按下 ENTER:
for /f %i in (dns_servers.txt) do sc \\%i start DNS