.mobileconfigプロファイルで配信する
Vylos WireGuardトンネルを、管理対象の読み取り専用システム項目としてインストールするApple .mobileconfigプロファイルを作成します。
プロファイルの種類を選ぶ
| 目的 | VPNペイロードの種類 | 配信要件 |
|---|---|---|
| 対象となるデバイス通信を1つのトンネルに通す | com.apple.vpn.managed | 直接インストールするかMDMで配信します。 |
| 割り当てた管理対象AppをVylosに通す | com.apple.vpn.managed.applayer | VPNプロファイル自体を直接インストールした場合でも、本番のApp割り当てにはMDMが必要です。 |
どちらの種類も、Vylosに管理対象トンネルを作成します。Appの動作を制御する管理対象App構成とは別であり、こちらはVPNをインストールしません。
各設定の場所
| 機能 | プロファイル内の場所 |
|---|---|
| WireGuardのインターフェイスとピア | VendorConfig.WgQuickConfigBase64またはWgQuickConfig |
| スプリットDNSと検索ドメイン | VendorConfig.VylosConfigBase64またはVylosConfig |
| 自動アクティベーション | VPN.OnDemandEnabledとVPN.OnDemandRules |
| VPNなしの接続をブロック | VPN.IncludeAllNetworks |
| App別アクティベーション | 最上位のOnDemandMatchAppEnabledとVPNUUID |
| Vylosの制限と設定 | VPNプロファイルではなく管理対象App構成 |
以下の例ではAppleのプロパティリスト形式を使用します。MDMにフォームが表示される場合も、同じ辞書の入れ子構造と値の型を再現してください。ピリオド区切りの名前をそのままキーとして入力しないでください。
WireGuard構成の受け渡し
VPNペイロードのVendorConfig辞書には、次のキーのどちらか一方だけを入れます。
| キー | 値 |
|---|---|
WgQuickConfig | WireGuard .confファイルの未変更の複数行UTF-8内容。 |
WgQuickConfigBase64 | 同じ.conf UTF-8内容を1行にしたBase64エンコード。 |
MDMの入力欄が改行を保持しない場合はWgQuickConfigBase64を使用します。両方のキーがあると使用するソースが不明確になるため、Vylosはペイロードを拒否します。
Base64は転送用のエンコードであり、暗号化ではありません。エンコードするのは.confのテキストそのもので、.vylosファイル、ZIPアーカイブ、それらへのパスではありません。
macOSでは、次のコマンドで貼り付け可能な値をクリップボードへコピーできます。
base64 -i "tunnel.conf" | tr -d '\n' | pbcopy
base64がファイルをエンコードし、tr -d '\n'が出力から改行を削除し、pbcopyが結果をクリップボードに入れます。MDMのキーと値のエディタでは、結果をWgQuickConfigBase64として貼り付け、WgQuickConfigは省略します。
スプリットDNS設定の受け渡し
管理対象トンネルでスプリットDNSを使用する場合は、同じVendorConfig辞書に次の任意キーのどちらか一方だけを追加します。
| キー | 値 |
|---|---|
VylosConfig | settings.conf形式のVylos設定の複数行UTF-8テキスト。 |
VylosConfigBase64 | 同じテキストを1行のBase64にエンコードした値。 |
キーと値のエディタで改行が削除または変更されないよう、MDMではVylosConfigBase64を使用してください。次のようなファイルを作成します。
[SplitDNS]
Domains = corp.example.com, *.internal.example.com
SearchDomains = example.com
次に、macOSでエンコード済みの値をコピーします。
base64 -i "settings.conf" | tr -d '\n' | pbcopy
結果をVylosConfigBase64として貼り付けます。WireGuard構成の[Interface]には、少なくとも1つのDNSサーバーも必要です。Domainsはそのサーバーを使う問い合わせを選び、SearchDomainsは短いホスト名に接尾辞を追加します。トラフィックの経路は引き続きAllowedIPsが制御します。
管理対象トンネルのキルスイッチ
管理対象のデバイス全体トンネルにキルスイッチ動作を設定するには、VPN辞書内でAppleのIncludeAllNetworksキーを使用します。
<key>IncludeAllNetworks</key>
<integer>1</integer>
RemoteAddressとAuthenticationMethodの隣に配置します。自動アクティベーションはOnDemandRulesで別に設定します。
IncludeAllNetworksはWireGuardのAllowedIPs経路を広げません。通常のトラフィックがVPNを迂回することを防ぎますが、各ピアが到達できる宛先は引き続きAllowedIPsが決めます。完全なデュアルスタックトンネルには0.0.0.0/0と::/0を使用します。部分的な経路は厳格な許可リストになり、[Interface]の各DNSサーバーも経路に含める必要があります。
Appleはネットワーク制御トラフィックと一部のデバイスサービスを例外としています。配信前にVPNペイロードのIncludeAllNetworksフィールドを確認してください。
デバイス全体のプロファイル
通常のデバイス全体トンネルにはcom.apple.vpn.managedを使用します。配信前に、サンプルの識別子、UUID、鍵、アドレス、エンドポイントをすべて置き換えてください。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadDisplayName</key>
<string>Vylos Managed Tunnel</string>
<key>PayloadIdentifier</key>
<string>com.example.vylos.vpn</string>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>00000000-0000-0000-0000-000000000003</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadDisplayName</key>
<string>VPN</string>
<key>PayloadIdentifier</key>
<string>com.example.vylos.vpn.corp</string>
<key>PayloadType</key>
<string>com.apple.vpn.managed</string>
<key>PayloadUUID</key>
<string>00000000-0000-0000-0000-000000000004</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>UserDefinedName</key>
<string>Corporate VPN</string>
<key>VPNType</key>
<string>VPN</string>
<key>VPNSubType</key>
<string>io.cbnventures.vylos</string>
<key>VendorConfig</key>
<dict>
<key>WgQuickConfig</key>
<string>[Interface]
PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
Address = 10.0.0.2/32
DNS = 10.0.0.1
[Peer]
PublicKey = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=
AllowedIPs = 0.0.0.0/0
Endpoint = vpn.example.com:51820
PersistentKeepalive = 25
</string>
<key>VylosConfig</key>
<string>[SplitDNS]
Domains = corp.example.com, *.internal.example.com
SearchDomains = example.com
</string>
</dict>
<key>VPN</key>
<dict>
<key>RemoteAddress</key>
<string>vpn.example.com</string>
<key>AuthenticationMethod</key>
<string>Password</string>
</dict>
</dict>
</array>
</dict>
</plist>
uuidgenで一意のUUIDを生成してください。トンネルを追加するたびに、外側のPayloadContent配列へcom.apple.vpn.managed辞書を1つ追加します。
1行の値を使用するには、サンプルのWgQuickConfigキーと複数行文字列を次の内容に置き換えます。
<key>WgQuickConfigBase64</key>
<string>BASE64_ENCODED_CONF</string>
同じ方法で、サンプルのVylosConfigキーと複数行文字列も置き換えます。
<key>VylosConfigBase64</key>
<string>BASE64_ENCODED_SETTINGS_CONF</string>
アプリ別VPNプロファイル
アプリ別のWireGuardルーティングには、Vylosのパケットトンネルプロバイダとcom.apple.vpn.managed.applayerを使用します。ペイロードは同じWgQuickConfigとWgQuickConfigBase64に加えて、任意のスプリットDNS設定をVylosConfigまたはVylosConfigBase64で受け付けます。
| 設定 | 値 |
|---|---|
PayloadType | com.apple.vpn.managed.applayer |
VPNType | VPN |
VPNSubType | io.cbnventures.vylos |
VPN.ProviderBundleIdentifier | io.cbnventures.vylos.packet-tunnel |
VPN.ProviderType | packet-tunnel |
VPNUUID | このVPNへ割り当てるすべての管理対象Appと共有する一意の値。 |
OnDemandMatchAppEnabled | 割り当てたAppがネットワーク通信を開始したとき接続する場合はtrue。 |
次の辞書で、プロファイルのPayloadContent配列内にあるデバイス全体VPN辞書を置き換えられます。
<dict>
<key>PayloadDisplayName</key>
<string>Vylos Per-App VPN</string>
<key>PayloadIdentifier</key>
<string>com.example.vylos.vpn.per-app</string>
<key>PayloadType</key>
<string>com.apple.vpn.managed.applayer</string>
<key>PayloadUUID</key>
<string>00000000-0000-0000-0000-000000000005</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>UserDefinedName</key>
<string>Corporate Per-App VPN</string>
<key>VPNType</key>
<string>VPN</string>
<key>VPNSubType</key>
<string>io.cbnventures.vylos</string>
<key>VPNUUID</key>
<string>00000000-0000-0000-0000-000000000006</string>
<key>OnDemandMatchAppEnabled</key>
<true/>
<key>VendorConfig</key>
<dict>
<key>WgQuickConfigBase64</key>
<string>BASE64_ENCODED_CONF</string>
<key>VylosConfigBase64</key>
<string>BASE64_ENCODED_SETTINGS_CONF</string>
</dict>
<key>VPN</key>
<dict>
<key>AuthenticationMethod</key>
<string>Password</string>
<key>RemoteAddress</key>
<string>vpn.example.com</string>
<key>ProviderBundleIdentifier</key>
<string>io.cbnventures.vylos.packet-tunnel</string>
<key>ProviderType</key>
<string>packet-tunnel</string>
<key>OnDemandEnabled</key>
<integer>1</integer>
</dict>
</dict>
このペイロードをインストールするとVPNは作成されますが、Appは割り当てられません。アプリ別VPNを構成するへ進み、同じVPNUUIDを管理対象Appへ関連付けて、対応するルーティングフィールドを確認してください。
プロファイルをインストール、削除する
所有権、置き換え、削除を一元管理するには、MDMでプロファイルを配信します。MDMを使用できない場合、ユーザーはデバイス全体のプロファイルを直接インストールし、あとでOSのプロファイル管理設定から削除することもできます。
どちらの配信方法でも、Vylosではプロファイル所有の読み取り専用項目として扱われます。トンネルを変更するには、Vylos内で編集せず、プロファイルを更新または削除してください。
Appでの表示については管理対象トンネルを配信するを参照してください。Appleの完全なペイロード仕様は、VPNおよびAppLayerVPNのリファレンスを参照してください。