在 Windows Server 運行 Xray:啟動、權限與故障復原

在 Windows Server 運行 Xray:啟動、權限與故障復原

Ryan Foster
2026年10月11日· 6 分鐘讀完

在 Windows Server 運行 Xray,可用專用低權限帳戶配合工作排程器,在開機時啟動。本文以 Windows Server 2022 x64、Xray v26.3.27 和一條 VLESS/REALITY 連線,說明故障、升級及撤銷檢查。指引根據官方資料整理,未完成作者端到端自測。

關鍵要點

  • 一般 Xray 執行檔並非原生 Windows 服務,由單一排程工作直接管理。
  • 執行帳戶只可讀取程式及設定,只有日誌目錄可寫入。
  • 僅容許一個可信客戶端來源及一個 TCP 連接埠,保留獨立管理途徑。
  • 出現監聽或設定檢查成功,仍不等於代理認證成功。

何時適合在 Windows Server 運行 Xray?

先用自建責任與復原清單確認維護人。如只需要日常出口,先比較管理 VPS 與使用託管 VPN 的責任,才決定是否承擔 Windows 更新和憑據管理。本文處理 Windows 生命週期,不重寫 Linux 部署。

核心與客戶端的分工說明安裝程式為何不等於設定瀏覽器。也要分清協議、傳輸及混淆層:VLESS、RAW、REALITY 與應用代理設定各有職責。

更改主機前要準備甚麼?

使用獲授權的專用 Server 2022、獨立復原控制台,以及另一部 Windows 客戶端。準備自有或獲明確許可作此實驗的 TLS 1.3 目標,證書須與域名吻合;無法滿足就停止,不隨意借用第三方網站名稱。

記錄防火牆設定檔、輸入規則、監聽連接埠、工作及管理途徑,再經救援途徑重新登入一次。裝置排障基線有助分辨客戶端故障。

示例使用 TCP 24443。執行前替換所有大寫佔位符:SERVER_LISTEN_IP 是主機真正的介面地址,可能位於供應商 NAT 後;SERVER_ADDRESS 是客戶端可到達的端點;TRUSTED_CLIENT_PUBLIC_IP 是伺服器看到的來源,並非客戶端區域網絡地址。

步驟 1:安裝官方套件並完成 Xray Windows 權限設定

在瀏覽器從官方 v26.3.27 下載 Xray-windows-64.zip,保留正常 TLS 驗證,解壓至 C:\Xray\bin,建立 C:\Xray\config、C:\Xray\logs。不用教學鏡像安裝器;記錄版本,日後升級前私下保留舊可信套件。[1]

在電腦管理新增標準本機帳戶 XrayRunner,設定獨立密碼,不加入 Administrators。在本機安全性原則授予 “Log on as a batch job”;域政策可能覆蓋設定,須先確認政策負責人。密碼放在操作者使用的憑據管理工具,不寫入指令碼。

用管理員 PowerShell 限制以下新建目錄,不要將指令套用到共用安裝位置。

$svc = "$env:COMPUTERNAME\XrayRunner"
icacls C:\Xray /inheritance:r
icacls C:\Xray /grant:r '*S-1-5-18:(OI)(CI)F' '*S-1-5-32-544:(OI)(CI)F' "${svc}:(OI)(CI)RX" /T
icacls C:\Xray\logs /grant:r "${svc}:(OI)(CI)M" /T

SID 保留 SYSTEM 及 Administrators 的完整權限,執行帳戶可讀程式與設定、修改日誌。完成後檢查 icacls,包括額外明確授權;關閉繼承不會自動刪除它們,只移除本目錄不合適的權限。

步驟 2:建立單一認證設定並前台檢查

先執行版本、UUID、X25519 指令,私下保存 UUID 和私鑰。此版本供客戶端使用的 X25519 值標示為 Password,填入客戶端 realitySettings.password,不能以伺服器私鑰替代。用密碼管理器產生隨機 16 位十六進制 short ID。[2][3]

C:\Xray\bin\xray.exe version
C:\Xray\bin\xray.exe uuid
C:\Xray\bin\xray.exe x25519
C:\Xray\bin\xray.exe run -test -config C:\Xray\config\server.json
C:\Xray\bin\xray.exe run -config C:\Xray\config\server.json

把下列設定儲存為 C:\Xray\config\server.json,才執行上面最後兩項指令。兩處 OWNED_TLS_NAME 均改為獲准目標名。固定版本源碼使用 clients、network,不能未核對就搬用新版網上示例。

{
  "log": {"error": "C:\\Xray\\logs\\error.log", "loglevel": "warning"},
  "inbounds": [{
    "listen": "SERVER_LISTEN_IP", "port": 24443, "protocol": "vless",
    "settings": {"clients": [{"id": "GENERATED_UUID", "flow": "xtls-rprx-vision"}], "decryption": "none"},
    "streamSettings": {
      "network": "raw", "security": "reality",
      "realitySettings": {
        "show": false, "target": "OWNED_TLS_NAME:443", "xver": 0,
        "serverNames": ["OWNED_TLS_NAME"],
        "privateKey": "GENERATED_PRIVATE_KEY", "shortIds": ["GENERATED_HEX_ID"]
      }
    }
  }],
  "outbounds": [{"protocol": "freedom", "tag": "direct"}]
}

以「以其他使用者身分執行」開啟 PowerShell,用 XrayRunner檢查及前台啟動;此處引號內是介面標籤。管理員成功不證明執行帳戶有讀取權。遇到設定錯誤、私鑰不可讀或連接埠已佔用就停止;註冊工作前關閉前台實例。

步驟 3:設定毋須登入的 Xray Windows 開機啟動

在管理員 PowerShell 註冊一個工作,動作直接執行 Xray,明確指定工作目錄及設定絕對路徑,不使用會分離子程式的啟動器。保存密碼的工作登入方式可在無人登入時啟動。[4]

$action = New-ScheduledTaskAction -Execute 'C:\Xray\bin\xray.exe' -Argument 'run -config C:\Xray\config\server.json' -WorkingDirectory 'C:\Xray'
$trigger = New-ScheduledTaskTrigger -AtStartup
$settings = New-ScheduledTaskSettingsSet -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1) -MultipleInstances IgnoreNew -ExecutionTimeLimit ([TimeSpan]::Zero)
$cred = Get-Credential -UserName "$env:COMPUTERNAME\XrayRunner" -Message 'Task account'
Register-ScheduledTask -TaskName 'Xray-Lab' -Action $action -Trigger $trigger -Settings $settings -User $cred.UserName -Password $cred.GetNetworkCredential().Password -RunLevel Limited
Start-ScheduledTask -TaskName 'Xray-Lab'
Get-ScheduledTaskInfo -TaskName 'Xray-Lab'
Get-NetTCPConnection -State Listen -LocalPort 24443

最多重試三次,間隔一分鐘;忽略重複啟動,常駐程式不設正常執行時限。這是有界策略,不保證解決任何停滯。工作狀態和結果碼只是線索,仍要檢查實際程式及錯誤日誌。

確認帳戶是 XrayRunner、選擇不論用戶是否登入都執行,並保持有限權限。復原控制台可用後才重新開機。密碼或批次登入權限更改後,要更新工作憑據,重做無人登入啟動檢查。

步驟 4:只容許一個客戶端並驗證應用路徑

保持防火牆啟用,預設阻擋非請求的輸入連線。先找該程式或連接埠的寬泛容許規則;新增窄規則不會抵消另一條寬規則。示例假設介面合理屬於 Private;如實際是 Public,明確選用真實設定檔,不為放行而重新分類網絡。[5]

New-NetFirewallRule -Name 'Xray-Lab-TCP' -DisplayName 'Xray Lab TCP' -Direction Inbound -Action Allow -Protocol TCP -LocalPort 24443 -LocalAddress 'SERVER_LISTEN_IP' -RemoteAddress 'TRUSTED_CLIENT_PUBLIC_IP' -Program 'C:\Xray\bin\xray.exe' -Profile Private

供應商防火牆也限制同一來源及連接埠,不向全網開放 RDP,不改救援規則。獨立客戶端使用相同 Xray 版本,把以下設定儲存為 client.json 並替換對應值。伺服器私鑰不離開伺服器。

{
  "log": {"loglevel": "warning"},
  "inbounds": [{"listen": "127.0.0.1", "port": 1080, "protocol": "socks", "settings": {"auth": "noauth", "udp": false}}],
  "outbounds": [{
    "protocol": "vless",
    "settings": {"vnext": [{"address": "SERVER_ADDRESS", "port": 24443, "users": [{"id": "GENERATED_UUID", "encryption": "none", "flow": "xtls-rprx-vision"}]}]},
    "streamSettings": {
      "network": "raw", "security": "reality",
      "realitySettings": {"serverName": "OWNED_TLS_NAME", "fingerprint": "chrome", "password": "GENERATED_PUBLIC_VALUE", "shortId": "GENERATED_HEX_ID"}
    }
  }]
}

執行 xray.exe run -test -config client.json,再執行 xray.exe run -config client.json。Firefox 手動選 SOCKS5 127.0.0.1:1080,啟用 SOCKS5 代理 DNS;核對這次請求的出口 IP,再開啟獲准 HTTPS 目標。結果只涵蓋此請求,不證明全應用、DNS、IPv6 或 UDP 路徑。

用臨時客戶端設定分別試錯誤 UUID、不獲准的伺服器名,均不得完成預期的認證代理請求。TCP 握手或目標站 fallback 回應不等於認證成功。還原正確值並比較診斷,不公開憑據及日誌。

故障、升級和撤銷如何復原?

讀者檢查預期證據停止或復原
執行帳戶不能讀設定啟動失敗,目標請求未成功只修設定 ACL,不授予管理員權限
連續啟動兩次只有一個目標 Xray 程式檢查動作及重複工作,才開放存取
程式異常結束最多三次一分鐘間隔重試查錯誤;未解決便停用工作,離線修復
無人登入時重新開機正確帳戶、監聽及認證請求還原工作憑據或舊設定
客戶端來源改變舊來源規則不再放行核實新地址,只改自有規則

升級前停用及停止工作,確認程式與監聽消失,私下備份程式、設定、ACL 記錄及匯出的工作。新官方套件另行準備,閱讀發行說明,以執行帳戶驗證並重做正向、拒絕檢查。失敗便再次停止,在重開存取前還原上一組程式與設定。

日誌由操作者訂保留政策。本實驗示例是每日查看;達 10 MiB 時停用及停止工作,私下封存 error.log,最多留七份,然後啟動及驗證請求。期間會短暫中斷,這是維護示例,不是 Xray 內置輪替保證;快速增長須調查,不能靠刪除掩蓋。

撤銷時執行下列指令,清除 Firefox 代理、停止客戶端、撤銷供應商規則和連線憑據。確認沒有其他工作使用後才移除 XrayRunner。若仍有監聽,先辨認擁有者,不批量結束所有 Xray 程式。

Disable-ScheduledTask -TaskName 'Xray-Lab'
Stop-ScheduledTask -TaskName 'Xray-Lab'
Remove-NetFirewallRule -Name 'Xray-Lab-TCP'
Get-NetTCPConnection -State Listen -LocalPort 24443 -ErrorAction SilentlyContinue
Unregister-ScheduledTask -TaskName 'Xray-Lab' -Confirm:$true

總結

  • 安裝擁有者與低權限執行帳戶分開。
  • 設定、工作、來源限制與認證請求逐項驗證。
  • 保存上一組套件與設定,以及故障時仍可用的管理途徑。
  • 先停自有工作、撤銷存取,才刪除資源。

常見問題

Xray 是原生 Windows 服務嗎?

一般執行檔不會因為在背景執行就具備服務生命週期。這裏採用工作排程器,不加入 SCM 服務包裝器。

為何要用獨立帳戶?

低權限帳戶限制程式能修改的範圍,同時仍需讀取設定、寫入專用日誌目錄;不能以管理員執行代替權限設計。

設定測試成功就代表能連網嗎?

設定測試只驗證載入內容,不證明供應商防火牆、目標證書、客戶端認證或應用實際路徑可用。

為何重新開機後才失敗?

應查工作憑據、批次登入權限、工作目錄及目標連通性;管理員登入後的前台成功不證明這些條件。

能限制使用流動網絡的客戶端嗎?

規則比對伺服器實際看到的來源。地址改變後先核實,再更新單一授權地址,不擴大至全網放行。

REALITY 錯誤客戶端應證明甚麼?

錯誤 UUID 或不獲准名稱應阻止目標代理工作階段;並不要求底層 TCP 連接埠拒絕每次握手。

其他 Windows 版本可直接照用嗎?

先重新核對套件支援、帳戶政策、排程工作及防火牆。本文基線為 Server 2022,不是經實測的多版本矩陣。

免責聲明:只操作獲授權基礎設施並遵守適用規則。本文按下列官方資料編寫,未在 Windows Server 完成端到端自測。

來源:

  1. Xray-core v26.3.27
  2. Xray v26.3.27 VLESS configuration
  3. Xray v26.3.27 transport configuration
  4. Microsoft Task Scheduler
  5. Microsoft Windows Firewall

Sources checked 2026 年 10 月 11 日。


延伸閱讀:

開啟 3 天免費試用

註冊即可免費體驗全部高級功能。

*只限新用戶;每位用戶只可獲得一次試用。

在 Windows Server 運行 Xray:啟動、權限與故障復原 | AethoVPN