Cloudflare WARP を Windows Server に無理矢理インストールする

# 目的
Cloudflare WARP を Windows Server に無理矢理インストールして動かしてみます。

:::note warn
Windows Server は Cloudflare WARP の公式サポート対象外です。
そもそもサポート対象外の構成を取ることは非推奨です。
自己責任の範疇でご利用ください。
> - [Known limitations - WARP · Cloudflare Zero Trust docs](https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/troubleshooting/known-limitations/#windows-server)
> **Windows Server**
The WARP client does not run on Windows Server.
Refer to the [downloads page](https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/download-warp/) for a list of supported operating systems.
:::

# 確認した Windows Server OS バージョン
- Windows Server 2016
- Windows Server 2019
- Windows Server 2022

# Cloudflare WARP 最新バージョンダウンロード
以下の PowerShell スクリプトで `C:\Users\Administrator\Desktop` フォルダに Cloudflare WARP 最新（安定）バージョン をダウンロードできます。

```powershell:PowerShell
[System.Net.ServicePointManager]::SecurityProtocol = @([System.Net.SecurityProtocolType]::Tls13,[System.Net.SecurityProtocolType]::Tls12)
$releases = Invoke-RestMethod -Uri "https://install.appcenter.ms/api/v0.1/apps/cloudflare/1.1.1.1-windows-1/distribution_groups/release/public_releases" -Method GET
$latest_release_id = ConvertFrom-Json $releases[0].id
$latest_release_json = Invoke-RestMethod -Uri "https://install.appcenter.ms/api/v0.1/apps/cloudflare/1.1.1.1-windows-1/distribution_groups/release/releases/${latest_release_id}" -Method GET
$latest_download_url = $latest_release_json.download_url
Invoke-WebRequest $latest_download_url -OutFile "C:\Users\Administrator\Desktop\Cloudflare_WARP_Release-x64.msi"
```

# 参考：普通にインストールすると起動失敗
ダウンロードした `Cloudflare_WARP_Release-x64.msi` を起動するとインストール自体は完了しますが、起動時に `The Cloudflare WARP service is not available. Try rebooting.` エラーが出ます。
このエラーはこのまま再起動しても状況は改善しないため、[WLAN を有効化](#wlan-有効化)した上でインストールするようにしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/91e68662-63a9-2967-54ec-6c609fb1bb57.png)


# WLAN 有効化
以下の記事を見ると、

- [WARP installed on server 2019 cant start the service - Zero Trust / WARP - Cloudflare Community](https://community.cloudflare.com/t/warp-installed-on-server-2019-cant-start-the-service/538745/6)
- [How to install Cloudflare WARP (1.1.1.1) on Windows Server](https://yeahlinux.com/how-to-install-cloudflare-warp-1-1-1-1-on-windows-server/)
- [Installing Cloudfalre Warp on Windows Server - Tiernans Mini Blog](https://miniblog.tiernanotoole.ie/posts/cloudflare-warp-on-windows-server/)

[Windows Server のワイヤレス LAN (WLAN) サービス](https://learn.microsoft.com/ja-jp/windows-server/networking/technologies/wlan/wireless-networking) を有効化することで動かすことができるようなので、やってみます。

> Windows Server のワイヤレス LAN (WLAN) サービスは、ワイヤレス ネットワークの構成、検出、接続を行うための機能です。
> ...
> WLAN 機能は、既定では Windows Server にインストールされていません。
> ...
> このサービスは、Windows クライアント デバイスに既にインストールされており、既定で有効になっています。


```powershell:PowerShell
Install-WindowsFeature -Name Wireless-Networking
```

```powershell:result
Success Restart Needed Exit Code      Feature Result
------- -------------- ---------      --------------
True    Yes            SuccessRest... {Wireless LAN Service}
WARNING: You must restart this server to finish the installation process.
```

再起動が必要なので、再起動します。

```powershell:PowerShell
Restart-Computer -Force
```
# インストール
その後 `Cloudflare_WARP_Release-x64.msi` を起動してインストールしましょう。
インストール自体は問題なく進められます。

> サービストークンを使ってサイレントインストールする場合は、以下のコマンドでインストールします。
> ```powershell:PowerShell
> $CLIENT_ID='YOUR_CLIENT_ID'
> $CLIENT_SECRET='YOUR_CLIENT_SECRET'
> 
> msiexec /i "Cloudflare_WARP_Release-x64.msi" /qn `
> ORGANIZATION="your-team-name" `
> SERVICE_MODE="warp" `
> ONBOARDING="false" `
> SWITCH_LOCKED="false" `
> AUTO_CONNECT="0" `
> AUTH_CLIENT_ID="${CLIENT_ID}" `
> AUTH_CLIENT_SECRET="${CLIENT_SECRET}"  
> ```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/4a8dc8ab-f42f-aecf-3cfe-24b02b212fe0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/082bd76c-b1a7-6cd3-ec6a-5ac5587f8f86.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/f941b1e5-215d-afa4-5722-4edfc950a076.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/5ec38e81-0637-d08b-8c66-9175559dd1bc.png)

# 動作確認

普通にインストールしただけでは起動しなかった Cloudflare WARP が動作し始めました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/f1c49fd2-5ed2-9234-bb54-e81f6390837c.png)

RDP 等でリモートから接続している場合には、すぐに WARP を ON にすると接続できなくなる可能性があります。
事前にプライベート IP から接続に切り替えるか、Zero Trust アカウントの WARP 設定で [Split Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/configure-warp/route-traffic/split-tunnels/) としてリモート接続元 IP を追加しておきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/d0bbbdc7-c9db-b129-c923-a9f904fe3620.png)

Cloudflare Zero Trust アカウントにログインしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/5707dcc7-0b89-7335-5e20-424e97a31e40.png)

`warp=on`、 `gateway=on` として、問題なく動いている判定が得られました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/c6606448-e648-fe76-b8db-489237bf9f60.png)

https://help.teams.cloudflare.com/ を見ても、動作状況を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/44a949db-76eb-93cf-e842-a85afd7f2896.png)

ログインした Cloudflare Zero Trust アカウントからデバイス情報を確認すると「Windows 10」と認識されているようです。
Windows Server 2019 以降では OS ビルド番号まで確認できます。

- Windows Server 2016 (OS Build 14393.6614) --> 10.0
- Windows Server 2019 (OS Build 17763.5329) --> 10.0.17763
- Windows Server 2022 (OS Build 20348.2227) --> 10.0.20348

他の機能については、そのまま動いているように見えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/a67f3051-c5e2-455c-0bf0-34a016bbb916.png)

# まとめ
サポート対象外の Windows Server で Cloudflare WARP を動かせることを確認しました。
一時的な利用や個人用途で Windows クライアント OS が手元にない場合などで使えることがあるかもしれません。
いつまで動かせるかすら保証はないですが、自責で動かせる（多少使えなくなっても特に困らない、使えたらラッキーくらいの）環境では良いのかもしれません。

# 参考リンク

- [curl/PowerShellでHTTPアクセスいろいろ #PowerShell - Qiita](https://qiita.com/zaki-lknr/items/8950f6acea20961a8afc)
- [PowerShell/テキスト処理/ConvertFrom-Json - curlからのJSONをパースする - yanor.net/wiki](https://yanor.net/wiki/?PowerShell/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E5%87%A6%E7%90%86/ConvertFrom-Json+-+curl%E3%81%8B%E3%82%89%E3%81%AEJSON%E3%82%92%E3%83%91%E3%83%BC%E3%82%B9%E3%81%99%E3%82%8B)

# 参考：Chrome サイレントインストール

```powershell:PowerShell
Start-BitsTransfer -Source https://dl.google.com/tag/s/appguid%3D%7B8A69D345-D564-463C-AFF1-A69D9E530F96%7D%26iid%3D%7B9CBC3BA0-0B21-CE75-59A4-7C679C244042%7D%26lang%3Dja%26browser%3D3%26usagestats%3D1%26appname%3DGoogle%2520Chrome%26needsadmin%3Dprefers%26ap%3Dx64-stable/dl/chrome/install/googlechromestandaloneenterprise64.msi
googlechromestandaloneenterprise64.msi /qn /norestart
```

# 参考：NTP 設定

```powershell:PowerShell
w32tm /config /manualpeerlist:time.cloudflare.com /syncfromflags:MANUAL
Stop-Service w32time
Start-Service w32time
```

# 参考：タイムゾーン設定

```bat:cmd
tzutil /s "Tokyo Standard Time"
```

# 参考：サーバーマネージャーをログオン時に起動しない設定

```bat:cmd
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ServerManager" /v DoNotOpenServerManagerAtLogon /t REG_DWORD /d 1 /f
```