【補助ツール提供】Apple構成プロファイル(.mobileconfig)作成方法

ITノウハウ

本記事では、前回の記事で紹介した、OpenVPNオンデマンド接続用 Apple構成プロファイル(.mobileconfig)の作成方法について紹介します。

前回の記事はiPhone(iOS)のOpenVPN接続が解除されてしまうという方向けに、解除される原因と対策について紹介しました。

そこで紹介した方法がオンデマンドVPN接続です。オンデマンドVPN接続を利用するためには、Apple構成プロファイル(.mobileconfig)の作成が必要になります。詳しくはこちらの記事をご覧ください。

本記事では、Apple構成プロファイル(.mobileconfig)の作成方法について紹介します。

誰でも簡単に作成できるように、私が作成した補助ツールも提供しています。

サンプルファイル

Apple構成プロファイル(.mobileconfig)を一から作成しようと思うとかなり苦労します。

本記事では以下サンプルファイルをベースに、修正が必要な部分を紹介します。

まずは、以下サンプルファイルをコピーして、拡張子を.mobileconfigにして保存してください。その際、文字コードはUTF-8を指定してください。

<?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>OpenVPN OnDemand Profile</string>
        <key>PayloadOrganization</key>
        <string>nekokarasu</string>
        <key>PayloadIdentifier</key>
        <string>0477dd85-53b7-408a-105a-da5a9d42548d</string>
        <key>PayloadUUID</key>
        <string>0477dd85-53b7-408a-105a-da5a9d42548d</string>
        <key>PayloadType</key>
        <string>Configuration</string>
        <key>PayloadVersion</key>
        <integer>1</integer>
        <key>PayloadDescription</key>
        <string>OpenVPNオンデマンド接続用構成プロファイル</string>

        <key>PayloadContent</key>
        <array>
            <dict>
                <key>PayloadDisplayName</key>
                <string>OpenVPN OnDemand Config</string>
                <key>PayloadOrganization</key>
                <string>nekokarasu</string>
                <key>PayloadIdentifier</key>
                <string>0477dd85-53b7-408a-105a-da5a9d42548d</string>
                <key>PayloadUUID</key>
                <string>0477dd85-53b7-408a-105a-da5a9d42548d</string>
                <key>PayloadType</key>
                <string>com.apple.vpn.managed</string>
                <key>PayloadVersion</key>
                <integer>1</integer>
                <key>PayloadDescription</key>
                <string>OpenVPNオンデマンド接続設定</string>
                <key>UserDefinedName</key>
                <string>OpenVPN OnDemand Connect</string>
                <key>VPNType</key>
                <string>VPN</string>
                <key>VPNSubType</key>
                <string>net.openvpn.connect.app</string>

                <key>VPN</key>
                <dict>
                    <key>AuthenticationMethod</key>
                    <string>Password</string>
                    <key>AuthPassword</key>
                    <string></string>
                    <key>IncludeAllNetworks</key>
                    <integer>0</integer>
                    <key>RemoteAddress</key>
                    <string>DEFAULT</string>

                    <key>OnDemandEnabled</key>
                    <integer>1</integer>
                    <key>OnDemandRules</key>
                    <array>
                        <dict>
                            <key>Action</key>
                            <string>Connect</string>
                            <key>InterfaceTypeMatch</key>
                            <string>WiFi</string>
                        </dict>
                        <dict>
                            <key>Action</key>
                            <string>Connect</string>
                            <key>InterfaceTypeMatch</key>
                            <string>Cellular</string>
                        </dict>
                        <dict>
                            <key>Action</key>
                            <string>Disconnect</string>
                            <key>InterfaceTypeMatch</key>
                            <string>WiFi</string>
                            <key>SSIDMatch</key>
                            <array>
                                <string>SSID</string>
                            </array>
                        </dict>
                    </array>
                </dict>

                <key>VendorConfig</key>
                <dict>
                    <key>remote</key>
                    <string>XXX.XXX.XXX.XXX YYYY</string>
                    <key>float</key>
                    <string>NOARGS</string>
                    <key>nobind</key>
                    <string>NOARGS</string>
                    <key>client</key>
                    <string>NOARGS</string>
                    <key>proto</key>
                    <string>tcp-client</string>
                    <key>dev</key>
                    <string>tun</string>
                    <key>sndbuf</key>
                    <string>0</string>
                    <key>rcvbuf</key>
                    <string>0</string>
                    <key>keepalive</key>
                    <string>10 30</string>

                    <key>comp-lzo</key>
                    <string>yes</string>

                    <key>client</key>
                    <string>NOARGS</string>
                    <key>auth</key>
                    <string>SHA256</string>
                    <key>cipher</key>
                    <string>AES-256-CBC</string>
                    <key>remote-cert-tls</key>
                    <string>server</string>

                    <key>auth-user-pass</key>
                    <string>ユーザー名\nパスワード</string>

                    <key>ca</key>
                    <string>-----BEGIN CERTIFICATE-----\nAAAAAAAAAAAAAAAAAAAA\nBBBBBBBBBBBBBBBBBBBB\nCCCCCCCCCCCCCCCCCCCC\nDDDDDDDDDDDDDDDDDDDD\n-----END CERTIFICATE-----</string>

                    <key>cert</key>
                    <string>-----BEGIN CERTIFICATE-----\nEEEEEEEEEEEEEEEEEEEE\nFFFFFFFFFFFFFFFFFFFF\nGGGGGGGGGGGGGGGGGGGG\nHHHHHHHHHHHHHHHHHHHH\n-----END CERTIFICATE-----</string>

                    <key>key</key>
                    <string>-----BEGIN PRIVATE KEY-----\nIIIIIIIIIIIIIIIIIIII\nJJJJJJJJJJJJJJJJJJJJ\nKKKKKKKKKKKKKKKKKKKK\nLLLLLLLLLLLLLLLLLLLL\n-----END PRIVATE KEY-----</string>

                    <key>vpn-on-demand</key>
                    <string>0</string>
                </dict>
            </dict>
        </array>
    </dict>
</plist>

Apple構成プロファイル(.mobileconfig)内容

保存したサンプルファイルをベースに編集していきます。

各項目で、必ず変更が必要なところは赤、必要に応じて変更するところを黄色のマーカーを引いています。

5~18行目 プロファイル基本設定

Apple構成プロファイルの基本設定項目です。プロファイル名称や説明文を設定することができます。

サンプルのままでも動作させることはできますが、必要に応じて変更いただくことでオリジナルのApple構成プロファイルを作成できます。

【5-6行】PayloadDisplayName

Apple構成プロファイルのプロファイル名称の設定です。任意のプロファイル名称を入力してください。

iPhone上では上記の場所に表示されます。

【7-8行】PayloadOrganization

Apple構成プロファイルの発行者名です。個人で利用される方がほとんどだと思いますので、任意の発行者名を入力してください。

iPhone上では上記の場所に表示されます。

【9-12行】PayloadIdentifier, PayloadUUID

プロファイル識別のための名称とUUIDの設定です。企業などが配布する際に識別のために利用しますが、個人で利用される場合には、特に意識する必要はありません。

PayloadIdentifier, PayloadUUID共に、適当なUUIDを入力してください。同じUUIDを使用しても問題ありません。

UUID生成のために、簡単なツールを作成しました。

【17-18行】PayloadDescription

Apple構成プロファイルの説明の設定です。自身がわかりやすい任意の説明文を入力してください。

iPhone上では上記の場所に表示されます。

23~42行目 VPN基本設定

VPN設定の基本項目です。設定名称や説明文を設定することができます。5~18行目のプロファイル基本設定と項目名が同じものが多いため、間違えないように注意してください。

【23-24行】PayloadDisplayName

VPN基本設定の名称設定です。任意の設定名称を入力してください。

iPhone上では上記の場所に表示されます。

【25-26行】PayloadOrganization

VPN基本設定の発行者名です。個人で利用される方がほとんどだと思いますので、任意の発行者名を入力してください。

iPhone上では上記の場所に表示されます。

【27-30行】PayloadIdentifier, PayloadUUID

VPN設定識別のための名称とUUIDの設定です。企業などが配布する際に識別のために利用しますが、個人で利用される場合には、特に意識する必要はありません。

PayloadIdentifier, PayloadUUID共に、適当なUUIDを入力してください。9~12行目と同じUUIDを使用しても問題ありません。

【35-36行】PayloadDescription

VPN基本設定の説明です。任意の説明文を入力してください。

iPhone上にはどこにも表示されません。

【37-38行】UserDefinedName

VPN設定のサービス名称設定です。自身がわかりやすい任意のサービス名称を入力してください。

iPhone上では上記の場所に表示されます。

46~81行目 VPN自動接続設定

オンデマンドVPNの自動接続設定です。接続/切断の条件設定を行います。

【59-64行】Wi-Fiネットワーク接続時 VPN自動接続

Wi-Fi接続時に自動的にVPN接続するための設定です。Wi-Fi接続時にVPN接続したくない場合には、削除してください。

【65-70行】モバイルネットワーク接続時 VPN自動接続

モバイルネットワーク接続時に自動的にVPN接続するための設定です。モバイルネットワーク接続時にVPN接続したくない場合には、削除してください。

【71-81行】自宅Wi-Fi接続時 VPN自動切断

自宅Wi-Fi接続時にVPN接続を切断するための設定です。自宅Wi-Fiネットワーク内にVPNサーバーが接続されている場合、この設定がないと永遠に接続リトライを繰り返すため、バッテリー消費が激しくなる可能性があります。

必ず、78行目のSSIDをご自宅のSSIDに変更してください。

84~130行目 OpenVPN設定

OpenVPNの設定です。OpenVPN設定ファイル(.ovpn)の内容を転記していきます。

【86-115行】

OpenVPN設定ファイル(.ovpn)の内容を、Apple構成プロファイル(.mobileconfig)の形式に置き換えて転記します。

原則、OpenVPN設定ファイル(.ovpn)の各設定項目の設定項目名を、Apple構成プロファイル(.mobileconfig)の<key>設定項目名</key>に置き換え、パラメータを<string>パラメータ</string>に置き換えます。

OpenVPN設定ファイル(.ovpn)の設定項目のうち、パラメータがないものに関しては、<string>NOARGS</string>に置き換えてください。

文章で説明してもわかりづらいので、以下の表に置き換え例を記載しました。以下の表とサンプルファイルを見比べて、作成してください。

OpenVPN設定ファイル(.ovpn)Apple構成プロファイル(.mobileconfig)
フォーマット設定項目名 パラメータ<key>設定項目名</key>
<string>パラメータ</string>
例1remote XXX.XXX.XXX.XXX YYYY<key>remote</key>
<string>XXX.XXX.XXX.XXX YYYY</string>
例2float<key>float</key>
<string>NOARGS</string>
  • 「auth-user-pass」は、この後の項目で設定するため、スキップしてください
  • OpenVPN設定ファイル(.ovpn)の「#」で始まる項目はコメントアウト行のため、転記不要です

【117-118行】auth-user-pass

OpenVPNのアカウント設定です。ユーザー名とパスワードを入力します。ユーザー名パスワードの間は「\n」で区切ります。

【120-127行】ca, cert, key

OpenVPN設定ファイル(.ovpn)のca, cert, keyの項目を転記します。

基本的には86~115行目の方法と同一ですが、この3項目はパラメータが複数行に分かれています。改行されている部分を「\n」に置き換えてください。

置き換え例はこちらです。

OpenVPN設定ファイル(.ovpn)Apple構成プロファイル(.mobileconfig)
フォーマット<設定項目名>
パラメータ1
パラメータ2
パラメータ3
<key>設定項目名</key>
<string>パラメータ1\nパラメータ2\n
パラメータ3</string>
例1<ca>
—–BEGIN CERTIFICATE—–
AAAAA
BBBBB
CCCCC
DDDDD
—–END CERTIFICATE—–
<key>ca</key>
<string>—–BEGIN CERTIFICATE—–\nAAAAA\nBBBBB\nCCCCC\nDDDDD\n—–END CERTIFICATE—–</string>

改行を「\n」に置き換えるのが大変でミスが発生するリスクがあるため、改行変換ツールを作成しました。以下のツールを使って、変換したものをApple構成プロファイル(.mobileconfig)に貼り付けてください。

完成

お疲れ様でした。以上で、Apple構成プロファイル(.mobileconfig)の作成は完了です。

作成したApple構成プロファイル(.mobileconfig)をiPhoneに転送(メール等)して、プロファイルをインストールすれば、オンデマンドVPNを実現することができます。

なるべく、だれでもできるように記事を書いたつもりですが、わからないところがあれば、コメントやお問い合わせフォームからご連絡ください。

コメント

  1. Nuke より:

    はじめまして。夏に旅行する予定ですが、ホテルの無料Wi-Fi、国内線ANAの機内無料Wi-Fiを使用する際にセキュリティに不安がありましたので自宅のTP-Link社製ルーターの機能でVPNサーバーを準備しました。そして自動接続にしたいと思いググったところnekokarasu様のページにたどり着きました。すんなりいかなかった点もありましたが無事自動接続を実現できました。ありがとうございました!

    すんなりいかなかった点は以下のようなものです。
    1)「無効なプロファイルです」となってしまった。
    対応策:初期値シフトjisのエディタにサンプルファイルをコピーし作成し上記エラー、UTF-8で上書き保存することにより無事インストールできた。
    2)自宅Wi-Fiを除外としたところ自宅Wi-Fi接続時に上手く動作しなかった。
    状態:iPhone設定アプリではWi-Fi接続中になっているが画面右上のステータス表示は「4G」とモバイル接続扱いとなりインターネットに接続できない状態となった。
    対応策:OnDemandRules項目の内の順序で自宅Wi-Fi除外を記述しているActionを先頭にすることにより正常動作となった。
    以上、参考まで

    • nekokarasu より:

      コメントいただきましてありがとうございます。
      ネコカラスブログで最初のコメントなので、見てくれた方がいて非常に嬉しいです。

      また、すんなりいかなかった点について、対応策まで示していただきありがとうございました。
      文字コードについては注意書きを追加しました。
      OnDemandRulesについては画像の差し替えが必要となるため、準備ができ次第差し替えます。

      今後も情報発信を続けていこうと思いますので、また何かお気づきの点ございましたら、コメントいただけますと幸いです。

タイトルとURLをコピーしました