# 設定例集#104: Windows・Android・iOSのIKEv2 IPsec VPNクライアントを利用したリモートアクセス型IPsec VPN

Windows、Android、iOSから、インターネット経由で本製品のLAN側プライベートネットワークにアクセスさせるリモートアクセス型VPNの設定例です。
各OSの設定方法は以下のとおりです。

- Windows - 標準搭載のVPNクライアントで設定します。
- Android - Google Playストアより「strongSwan VPN Client」をダウンロードし、同アプリ上で設定します。
- iOS - 事前作成したコンフィグファイル（構成プロファイル）をiOSデバイスにダウンロードし、同プロファイルをインストールすることで設定します。

本製品の設定ポイントは次のとおりです。

- クライアントの仕様にあわせてIKEv2を使用するよう設定します。
- ダイナミックDNSを使用して本製品のWAN側IPアドレスを登録し、クライアント設定時にVPN接続先をホスト名（FQDN）で指定できるようにします。
  Note

  iOSまたはAndroidが接続端末として存在する構成（Windows端末のみの接続構成以外）の場合、IPアドレスではなくFQDNを指定してください。

- ローカルRADIUSサーバーを用いてクライアントの認証を行います。

## 構成

ISPから提供された情報
ISP接続用ユーザー名 | user@isp
ISP接続用パスワード | isppasswd
PPPoEサービス名 | 指定なし
WAN側IPアドレス | 10.0.0.1/32
接続形態 | 端末型（アドレスは動的割り当て）
ルーターの基本設定
WAN側物理インターフェース | eth1
WAN側（ppp0）IPアドレス | 10.0.0.1/32
LAN側（vlan1）IPアドレス(1) | 192.168.10.1/24
トンネルインターフェース | tunnel0（マルチポイントIPsec）
トンネルインターフェースIPアドレス | 192.168.20.1/24
ダイナミックDNSサーバー情報
サーバーのFQDN | members.dyndns.org
サーバーのTCPポート番号 | 443
ダイナミックDNSクライアント情報
サーバー接続用ユーザー名 | test
サーバー接続用パスワード | test
ホスト名 | test01-native-vpn.dyndns.org
IPアドレスを登録するインターフェース | ppp0

VPNクライアントのアカウント情報
VPNユーザー | ユーザー名 | パスワード | IPアドレス
ユーザーA | userA | passwdA | 192.168.20.2/24
ユーザーB | userB | passwdB | 192.168.20.3/24
ユーザーC | userC | passwdC | 192.168.20.4/24

## 設定開始前に

### 自動設定の確認と削除

本設定例に掲載されているコマンドは、設定がまったく行われていない本製品の初期状態（スタートアップコンフィグなしで起動した状態）から入力することを前提としています。
そのため、通常は erase startup-config を実行し、スタートアップコンフィグが存在しない状態で起動してから、設定を始めてください。
ただし、本製品はスタートアップコンフィグなしで起動した場合でも、特定の条件を満たすと自動的な設定を行うことがあるため、その場合は設定例にしたがってコマンドを入力しても、コマンドがエラーになったり、全体として意図した動作にならない可能性があります。
これを避けるため、設定開始にあたっては次のいずれかの方法をとることをおすすめします。

- ネットワークケーブルを接続せずに起動する。
  起動時に自動設定が実行されるための条件の一つに、特定インターフェースのリンクアップがあります。
  ネットワークケーブルを接続しない状態で起動することにより、自動設定の適用を回避できます。
- 自動設定を手動で削除してから設定を行う。
  前記の方法を採用できず自動設定が適用されてしまった場合は、「自動的な設定内容の削除」にしたがって、これらを手動で削除してから設定を開始してください。

自動設定が行われる条件などの詳細については、AMF応用編のAMFネットワーク未検出時の拡張動作をご参照ください。

### システム時刻の設定

ログなどの記録日時を正確に保ち、各種機能を適切に動作させるため、システム時刻は正確にあわせて運用することをおすすめします。
ご使用の環境にあわせ、次のいずれかの方法でシステム時刻を設定してください。

- 手動で設定する方法 - 「運用・管理」/「システム」
- NTPで自動設定する方法 - 「運用・管理」/「NTP」

## ルーターの設定

1. LANポートにおいて初期状態で有効化されているスパニングツリープロトコル（RSTP）を無効化します。これにはspanning-tree enableコマンドをno形式で実行します。
   スパニングツリープロトコルの詳細は「L2スイッチング」/「スパニングツリープロトコル」をご覧ください。

       no spanning-tree rstp enable

2. DNS問い合わせ機能を有効にします。これには、ip domain-lookupコマンドを使います。

       ip domain-lookup

3. ダイナミックDNSクライアント機能を有効にします。これには、ddns enableコマンドを使います。
   ダイナミックDNSクライアント機能の詳細は「IP付加機能」/「ダイナミックDNSクライアント」をご覧ください。

       ddns enable

4. ダイナミックDNSサービス固有の設定を行います。これには、ddns-update-methodコマンドでDDNSアップデートメソッドモードに入り、update-url、host-name、username、password、update-interval、retry-intervalの各コマンドで具体的なパラメーターを設定します。
   ※クエリーパラメーターの開始を表す「`?`」をCLIから入力するには、`Ctrl/V` キーを入力してから `?` を入力してください。単に `?` を入力するとCLIヘルプが表示されてしまうためご注意ください。

       ddns-update-method dyndns
        update-url https://<USERNAME>:<PASSWORD>@members.dyndns.org/nic/update?SYSTEM=dyndns&hostname=<HOST-NAME>&myip=<IPADDRESS>
        host-name test01-native-vpn.dyndns.org
        username test
        password test
        update-interval 60
        retry-interval 1 maximum-retries 5

5. WANポートeth1上にPPPoEインターフェースppp0を作成します。これには、encapsulation pppコマンドを使います。
   PPPの詳細は「PPP」/「一般設定」をご覧ください。

       interface eth1
        encapsulation ppp 0

6. PPPインターフェースppp0に対し、PPPoE接続のための設定を行います。
   ・ダイナミックDNSクライアント機能によるIPアドレスの登録（ip ddns-update-method）
   ・IPCPによるDNSサーバーアドレスの取得要求（ppp ipcp dns）
   ・LCP EchoによるPPP接続状態の確認（keepalive）
   ・IPCPによるIPアドレスの取得要求（ip address negotiated）
   ・ユーザー名（ppp username）
   ・パスワード（ppp password）
   ・MSS書き換え（ip tcp adjust-mss）
   PPPの詳細は「PPP」/「一般設定」をご覧ください。

       interface ppp0
        ip ddns-update-method dyndns
        ppp ipcp dns request
        keepalive
        ip address negotiated
        ppp username user@isp
        ppp password isppasswd
        ip tcp adjust-mss pmtu

7. LAN側インターフェースvlan1にIPアドレスを設定します。これにはip addressコマンドを使います。
   IPインターフェースの詳細は「IP」/「IPインターフェース」をご覧ください。

       interface vlan1
        ip address 192.168.10.1/24

8. ファイアウォールやNATのルール作成時に使うエンティティー（通信主体）を定義します。
   エンティティー定義の詳細は「UTM」/「エンティティー定義」をご覧ください。
   内部ネットワークを表すゾーン「private」を作成します。
   これには、zone、network、ip subnetの各コマンドを使います。

       zone private
        network lan
         ip subnet 192.168.10.0/24
         ip subnet 192.168.20.0/24

9. 外部ネットワークを表すゾーン「public」を作成します。
   これには、前記コマンドに加え、host、ip addressの各コマンドを使います。

       zone public
        network wan
         ip subnet 0.0.0.0/0 interface ppp0
         host ppp0
          ip address dynamic interface ppp0

10. ファイアウォールやNATのルール作成時に通信内容を指定するために使う「アプリケーション」を定義します。
    これには、application、protocol、sport、dport、icmp-type、icmp-codeの各コマンドを使います。
    アプリケーション定義の詳細は「UTM」/「アプリケーション定義」をご覧ください。
    IPsecのESPパケットを表すカスタムアプリケーション「esp」を定義します。

        application esp
         protocol 50

11. ISAKMPパケットを表すカスタムアプリケーション「isakmp」を定義します。

        application isakmp
         protocol udp
         dport 500

12. NAT-Traversalパケットを表すカスタムアプリケーション「nat-t」を定義します。

        application nat-t
         protocol udp
         dport 4500

13. 外部からの通信を遮断しつつ、内部からの通信は自由に行えるようにするファイアウォール機能の設定を行います。
    これには、firewall、rule、protectの各コマンドを使います。
    ・rule 10 - 内部から内部への通信を許可します
    ・rule 20 - 内部から外部への通信を許可します
    ・rule 30, 40 - ISAKMPパケットを許可します
    ・rule 50, 60 - IPsec（ESP）パケットを許可します
    ・rule 70, 80 - NAT-Traversalパケットを許可します
    ・rule 90, 100 - ダイナミックDNSサーバーにアクセスしてIPアドレスを登録するため、本製品のWAN側インターフェースから外部へのHTTPS通信とDNS通信を許可します
    ファイアウォールの詳細は「UTM」/「ファイアウォール」をご覧ください。

        firewall
         rule 10 permit any from private to private
         rule 20 permit any from private to public
         rule 30 permit isakmp from public.wan to public.wan.ppp0
         rule 40 permit isakmp from public.wan.ppp0 to public.wan
         rule 50 permit esp from public.wan to public.wan.ppp0
         rule 60 permit esp from public.wan.ppp0 to public.wan
         rule 70 permit nat-t from public.wan to public.wan.ppp0
         rule 80 permit nat-t from public.wan.ppp0 to public.wan
         rule 90 permit https from public.wan.ppp0 to public.wan
         rule 100 permit dns from public.wan.ppp0 to public.wan
         protect

14. LAN側ネットワークに接続されているすべてのコンピューターがダイナミックENAT機能を使用できるよう設定します。
    これには、nat、rule、enableの各コマンドを使います。
    NATの詳細は「UTM」/「NAT」をご覧ください。

        nat
         rule 10 masq any from private to public
         enable

15. RADIUSクライアント機能が使用するRADIUSサーバーを登録します。これにはradius-server hostコマンドを使います。
    ここでは、本製品内蔵のローカルRADIUSサーバーを指定しています。
    RADIUSクライアント機能の詳細は「運用・管理」/「RADIUSクライアント」を、ローカルRADIUSサーバーの詳細は「運用・管理」/「RADIUSサーバー」をご覧ください。

        radius-server host localhost key awplus-local-radius-server

16. VPNクライアントのISAKMP認証に使用するRADIUSサーバーを指定します。これにはaaa authentication isakmpコマンドを使います。

        aaa authentication isakmp default group radius

17. サーバー（本製品）側のISAKMP認証に必要なCA証明書とサーバー証明書を準備するため、ローカルCAの設定を行います。
    ・ローカルCA「local」のセットアップ（crypto pki trustpoint）
    ・ローカルCAが発行するサーバー証明書のサブジェクト代替名（subject-alt-name）
    ・ローカルCAが発行するサーバー証明書のサブジェクト名（subject-name）
    ※ iOSまたはAndroidが接続端末として存在する構成（Windows端末のみの接続構成以外）の場合、IPアドレスではなくFQDNを指定してください。
    ローカルCAの詳細は「運用・管理」/「ローカルCA」をご覧ください。

        crypto pki trustpoint local
         subject-alt-name test01-native-vpn.dyndns.org
         subject-name /O=AlliedTelesis/CN=test01-native-vpn.dyndns.org

18. ローカルRADIUSサーバーにVPNユーザーを登録します。
    これには、radius-server local、server enable、nas、group、attribute、userの各コマンドを使います。
    ローカルRADIUSサーバーの詳細は「運用・管理」/「RADIUSサーバー」をご覧ください。

        radius-server local
         server enable
         nas 127.0.0.1 key awplus-local-radius-server
         group userA
          attribute Framed-IP-Address 192.168.20.2
          attribute Framed-IP-Netmask 255.255.255.0
          attribute MS-Primary-DNS-Server 192.168.20.1
         group userB
          attribute Framed-IP-Address 192.168.20.3
          attribute Framed-IP-Netmask 255.255.255.0
          attribute MS-Primary-DNS-Server 192.168.20.1
         group userC
          attribute Framed-IP-Address 192.168.20.4
          attribute Framed-IP-Netmask 255.255.255.0
          attribute MS-Primary-DNS-Server 192.168.20.1
         user userA password passwdA group userA
         user userB password passwdB group userB
         user userC password passwdC group userC

19. DNSリレー機能を有効にします。これには、ip dns forwardingコマンドを使います。
    DNSリレー機能の詳細は「IP付加機能」/「DNSリレー」をご覧ください。

        ip dns forwarding

20. リモートアクセスVPN用のカスタムISAKMPプロファイル「native-vpn」を作成します。
    ・IKEv2の指定（version）
    ・自装置の認証方式（local authentication）
    ・対向装置の認証方式（remote authentication）
    ・RADIUS属性にもとづいてクライアントにIPアドレスを割り当てる設定（configuration-attribute）
    ・ISAKMP SA有効期間（lifetime）
    ・サーバー証明書（pki trustpoint）
    ・暗号/認証方式とDiffie-Hellmanグループ（transform）
    ISAKMPプロファイルの詳細は「VPN」/「IPsec」をご覧ください。

        crypto isakmp profile native-vpn
         version 2
         local authentication certificate
         configuration-attribute radius
         remote authentication eap-radius
         lifetime 25200
         pki trustpoint local
         transform 1 integrity SHA256 encryption AES256 group 14
         transform 2 integrity SHA256 encryption AES256 group 2

21. 前の手順で作成したISAKMPプロファイル「native-vpn」を、この後で作成するマルチポイントIPsecトンネルインターフェースtunnel0に割り当てます。これには crypto isakmp peerコマンドを使います。

        crypto isakmp peer policy tunnel0 profile native-vpn

22. マルチポイントIPsecトンネルインターフェースtunnel0を作成します。
    トンネルインターフェースの詳細は「VPN」/「トンネルインターフェース」を、IPsecの詳細は「VPN」/「IPsec」をご覧ください。
    これには、interfaceコマンドでトンネルインターフェースを作成し、以下の情報を設定します。
    ・トンネルインターフェースにおける自装置ID（ローカルID）（tunnel local name）
    ・トンネルインターフェースに対するIPsec保護の適用（tunnel protection ipsec）
    ・トンネリング方式（tunnel mode ipsec multipoint）
    ・トンネルインターフェースのIPアドレス（ip address）
    ・トンネルインターフェースにおけるMSS書き換え設定（ip tcp adjust-mss）

        interface tunnel0
         tunnel local name test01-native-vpn.dyndns.org
         tunnel protection ipsec
         tunnel mode ipsec multipoint
         ip address 192.168.20.1/24
         ip tcp adjust-mss pmtu

23. デフォルト経路をPPPインターフェースppp0に向けます。これにはip routeコマンドを使います。
    IP経路設定の詳細は「IP」/「経路制御」をご覧ください。

        ip route 0.0.0.0/0 ppp0

24. 以上で設定は完了です。

        end

## 設定の保存

設定が完了したら、現在の設定内容を起動時コンフィグとして保存してください。これには、copyコマンドを「`copy running-config startup-config`」の書式で実行します。

    awplus# copy running-config startup-config
    Building configuration...
    [OK]

また、write fileコマンド、write memoryコマンドでも同じことができます。

    awplus# write memory
    Building configuration...
    [OK]

その他、設定保存の詳細については「運用・管理」/「コンフィグレーション」をご覧ください。

## ファイアウォールログについて

ファイアウォールのログをとるには、次のコマンド（log(filter)）を実行します。

    awplus(config)# log buffered level informational facility local5

記録されたログを見るには、次のコマンド（show log）を実行します。ここでは、ファイアウォールが出力したログメッセージだけを表示させています。

    awplus# show log | include Firewall

## VPNクライアントの設定

以下では、Windows、Android、iOSの各VPNクライアントの設定手順を説明します。
なお、どのVPNクライアントでも本製品のローカルCA証明書が必要なため、最初に「全クライアント共通：証明書の準備」の手順を実行してから、各クライアントの設定手順に進んでください。

### 全クライアント共通：証明書の準備

VPNクライアントの設定を行う前に、本製品のCLI上から、以下の手順にしたがって証明書を準備してください。
VPNクライアントの設定時に、ファイルに書き出したローカルCA証明書を使用します。

#### 既存サーバー証明書の削除

既存のサーバー証明書をいったん削除します。
ローカルRADIUSサーバーに適用されているトラストポイント「local」をいったん解除します。これには、server trustpointコマンド（RADIUSサーバーモード）をno形式で実行します。

    awplus(config)# radius-server local
    awplus(config-radsrv)# no server trustpoint local
    PKI trustpoints for RADIUS EAP-TLS changed to:
       (None)
    awplus(config-radsrv)# end

特権EXECモードでcrypto pki enrollコマンドをno形式で実行し、サーバー証明書を削除してください。

    awplus# no crypto pki enroll local
    De-enrolled the server from trustpoint "local".

#### ローカルCAによるサーバー証明書の発行

本製品のCLI上から、ローカルCA（トラストポイント）「local」を使って、ISAKMP認証で使用する本製品のサーバー証明書を発行します。
特権EXECモードでcrypto pki enrollコマンドを実行してください。同コマンドでは使用するローカルCAの名前（トラストポイント名）を指定します。

    awplus# crypto pki enroll local
    Using private key "server-default"...
    Successfully enrolled the local server.

発行したサーバー証明書の情報は、show crypto pki certificatesコマンドで確認できます。
server trustpointコマンド（RADIUSサーバーモード）を実行してローカルRADIUSサーバーにトラストポイント「local」を再適用します。

    awplus# configure terminal
    awplus(config)# radius-server local
    awplus(config-radsrv)# server trustpoint local
    PKI trustpoints for RADIUS EAP-TLS changed to:
       local

#### 機器の再起動

ここでいったん設定を保存して再起動してください。
設定の保存は、copyコマンドを「`copy running-config startup-config`」の書式で実行するか、write fileコマンド、write memoryコマンドを使用します。また、再起動はreloadコマンド、rebootコマンドで行います。

    awplus# copy running-config startup-config
    Building configuration...
    [OK]
    awplus# reload
    ...

#### ローカルCA証明書のファイルへの書き出し

次に、本製品のCLI上から、ローカルCAの証明書をファイルに書き出します。
特権EXECモードでcrypto pki export pemコマンドを実行してください。同コマンドでは書き出し先のファイル名を指定します。
ファイル名は任意ですが、ここではWindowsが証明書ファイルと認識する拡張子 .cer をつけています。

    awplus# crypto pki export local pem cacert.cer
    Copying...
    Successful operation

### Windows標準 IKEv2 IPsec VPNクライアント

Windows標準VPNクライアントの設定手順を説明します。

#### ローカルCA証明書のクライアントへのインストール

Windowsクライアントが、VPN接続時に本製品のサーバー証明書を検証するためには、ローカルCAの証明書を「信頼されたルート証明機関」としてクライアントにインストールしておく必要があります。

1. 事前準備として本製品のファイルシステム上に書き出したCA証明書ファイル（cacert.cer）をWindowsクライアントにコピーしてください。
2. 保存したファイルをダブルクリックします。

3. 証明書のインストールをクリックします。

4. 「証明書のインポートウィザード」画面が表示されます。
   保存場所で「ローカルコンピューター」を選択し、「次へ」をクリックします。

5. 「証明書ストアの選択」画面が表示されます。
   「信頼されたルート証明機関」を選択し、「OK」をクリックします。

6. 「証明書のインポートウィザード」画面に戻ったら、「次へ」をクリックします。

7. 「完了」をクリックします。

   8.「OK」をクリックします。

   9.「OK」をクリックします。これで証明書のインストールは完了です。

#### クライアントのVPN接続設定

ローカルCA証明書のインストールが完了したら、以下の手順でVPN接続の設定を行い、接続します。

1. スタートボタンを押して、「設定」をクリックします。

2. 「ネットワークとインターネット」をクリックします。

3. 「VPN」をクリックします。

4. 「VPNを追加」をクリックします。

5. VPN接続を追加します。それぞれ以下を設定してください。
   - VPNプロバイダー：Windows（ビルトイン）
   - 接続名：VPN接続名。ここでは「native-VPN」を使用します
   - サーバー名またはアドレス：ダイナミックDNSに登録したルーターのホスト名。ここでは「test01-native-vpn.dyndns.org」を使用します
   - VPNの種類：「IKEv2」を選択します
   - サインイン情報の種類：「ユーザー名とパスワード」を選択します
   - ユーザー名（オプション）：ルーターのローカルRADIUSに登録したユーザー名。ここでは「userA」を使用します
   - パスワード（オプション）：ルーターのローカルRADIUSに登録したパスワード。ここでは「passwdA」を使用します
   設定を追加したら「保存」をクリックします。

6. 手順5で作成した「native-VPN」の「接続」ボタンの右側にある下向き矢印をクリックし、「詳細オプション」をクリックします。

7. 「その他のVPNプロパティ」の「編集」をクリックします。

8. 「セキュリティ」タブの「詳細設定」をクリックします。

9. 「モビリティ」のチェックを外し、「OK」をクリックします。

10. 「ネットワーク」タブにて「インターネットプロトコルバージョン4(TCP/IPv4)」を選択し、「プロパティ」をクリックします。

11. 「詳細設定」をクリックします。

12. 「リモートネットワークでデフォルトゲートウェイを使う」にチェックを入れ、「OK」をクリックします。

13. VPNページで「native-VPN」の「接続」をクリックします。

14. 接続名の下に「接続済み」と表示されたら、VPN接続は完了です。

### Android用 IKEv2 IPsec VPNクライアント（strongSwan VPN Client）

Android用のVPNクライアントアプリ「strongSwan VPN Client」の設定手順を説明します。

1. 事前準備として本製品のファイルシステム上に書き出したCA証明書ファイル（cacert.cer）をAndroidデバイスにコピーしてください。
2. Google Playストアより「strongSwan VPN Client」をインストールします。
3. strongSwan VPN Clientを起動したら、右上の「三点リーダー」をタップし、「CA certificates」を選択します。

4. 再度、右上の「三点リーダー」をタップし、「Import certificate」を選択します。

5. Androidデバイスに取り込んだ証明書を表示しタップします。

6. 取り込む証明書の確認画面が表示されたら「IMPORT CERTIFICATE」をタップし、証明書を取り込みます。

7. 取り込まれていることを確認したら、左上の「左矢印」をタップして最初の画面に戻ります。

8. 「ADD VPN PROFILE」をタップします。

9. 各項目に必要事項を設定後、「SAVE」をタップします。

   設定項目は次のとおりです。
   - Server：ダイナミックDNSに登録したルーターのホスト名。ここでは「test01-native-vpn.dyndns.org」を使用します
   - VPN Type：「IKEv2 EAP (User/Password)」を選択します
   - Username：ルーターのローカルRADIUSに登録したユーザー名。ここでは「userB」を使用します
   - Password：ルーターのローカルRADIUSに登録したパスワード。ここでは「passwdB」を使用します
   - CA Certificate：「Select automatically」をチェックします
10. VPNに接続するには、作成したプロファイルをタップします。

11. 次のように表示されたら接続完了です。

### iOS標準 IKEv2 IPsec VPNクライアント

iOS標準VPNクライアントの設定手順を説明します。

#### mobileconfigファイルの作成

iOS標準VPNクライアントの設定は、VPN設定情報を記述したコンフィグファイル（構成プロファイル。ファイル拡張子「.mobileconfig」）をあらかじめ作成しておき、これをiOSデバイスにインストールすることで行います。
通常、コンフィグファイルはPCなどで作成し、メール添付でiOSデバイスのユーザーに配布したり、WebサイトにアップロードしてiOSデバイスのユーザーがダウンロードできるようにしたりして配布します。
コンフィグファイルの作成手順は次のとおりです。ここでは、PC上で作成するものと仮定します。

1. 事前準備として本製品のファイルシステム上に書き出したCA証明書ファイル（cacert.cer）を作業用PCにコピーしてください。
2. テキストエディターなどを使って、下記のテンプレートをもとに拡張子 .mobileconfig のコンフィグファイルを作成、保存してください。
   <!-- ... --> の部分はコメントのため、変更や削除も可能です。コメント内に書かれた ### 1 ### 形式の番号、および、コメントの後にある <key>項目名</key> は、後の項目解説と対応しています。
   また、水色の網かけ部分は値を変更できる、あるいは変更すべき箇所です。項目説明にしたがい、それぞれ適切な内容に変更してください。それ以外の個所には原則として触れないでください。

       <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
       <plist version="1.0">
       <dict>
         <!-- ### 1 ### Set the name to whatever you like, it is used in the profile list on the device -->
         <key>PayloadDisplayName</key>
         <string>native-vpn</string>
         <!-- ### 2 ### This is a reverse-DNS style unique identifier used to detect duplicate profiles -->
         <key>PayloadIdentifier</key>
         <string>dut.example.com</string>
         <!-- ### 3 ### A globally unique identifier, use uuidgen on Linux/Mac OS X to generate it, or a tool like https://www.uuidgenerator.net/ -->
         <key>PayloadUUID</key>
         <string>6d598d21-a9d2-43e9-991f-c1677afafd41</string>
         <key>PayloadType</key>
         <string>Configuration</string>
         <key>PayloadVersion</key>
         <integer>1</integer>
         <key>PayloadContent</key>
         <array>
             <!-- It is possible to add multiple VPN payloads with different identifiers/UUIDs and names -->
             <dict>
                 <!-- ### 4 ### This is an extension of the identifier given above -->
                 <key>PayloadIdentifier</key>
                 <string>dut.example.com.conf2</string>
                 <!-- ### 5 ### A globally unique identifier for this payload -->
                 <key>PayloadUUID</key>
                 <string>995fb7f8-b455-42b6-9af9-fbfc3f78f403</string>
                 <key>PayloadType</key>
                 <string>com.apple.vpn.managed</string>
                 <key>PayloadVersion</key>
                 <integer>1</integer>
                 <!-- ### 6 ### This is the name of the VPN connection as seen in the VPN application later -->
                 <key>UserDefinedName</key>
                 <string>native-vpn</string>
                 <key>VPNType</key>
                 <string>IKEv2</string>
                 <key>IKEv2</key>
                 <dict>
                     <!-- ### 7 ### Hostname or IP address of the VPN server -->
                     <key>RemoteAddress</key>
                     <string>test01-native-vpn.dyndns.org</string>
                     <!-- ### 8 ### Remote identity, can be a FQDN, a userFQDN, an IP or (theoretically) a certificate's subject DN. Can't be empty.
                          IMPORTANT: DNs are currently not handled correctly, they are always sent as identities of type FQDN -->
                     <key>RemoteIdentifier</key>
                     <string>test01-native-vpn.dyndns.org</string>
                     <!-- ### 9 ### Local IKE identity, same restrictions as above. If it is empty the client's IP address will be used -->
                     <key>LocalIdentifier</key>
                     <string>userC</string>
                     <!-- The server is authenticated using a certificate -->
                     <key>AuthenticationMethod</key>
                     <string>Certificate</string>
                     <!-- The client uses EAP to authenticate -->
                     <key>ExtendedAuthEnabled</key>
                     <integer>1</integer>
                     <!-- ### 10 ### User name for EAP authentication. Since iOS 9 this is optional, the user is prompted when the profile is installed -->
                     <key>AuthName</key>
                     <string>userC</string>
                     <!-- ### 11 ### Optional password for EAP authentication, if it is not set the user is prompted when the profile is installed -->
                     <key>AuthPassword</key>
                     <string></string>
                     <!-- The next two dictionaries are optional (as are the keys in them), but it is recommended to specify them as the default is to use 3DES.
                          IMPORTANT: Because only one proposal is sent (even if nothing is configured here) it must match the server configuration -->
                     <key>IKESecurityAssociationParameters</key>
                     <dict>
                         <!-- @see https://developer.apple.com/documentation/networkextension/nevpnikev2encryptionalgorithm -->
                         <key>EncryptionAlgorithm</key>
                         <string>AES-256</string><!-- Alternatives include: AES-256, AES-256-GCM, etc -->
                         <!-- @see https://developer.apple.com/documentation/networkextension/nevpnikev2integrityalgorithm -->
                         <key>IntegrityAlgorithm</key>
                         <string>SHA2-256</string><!-- Alternatives include: SHA2-256, SHA2-512, etc -->
                         <!-- @see https://developer.apple.com/documentation/networkextension/nevpnikev2diffiehellmangroup -->
                         <key>DiffieHellmanGroup</key>
                         <integer>14</integer><!-- Alternatives include 20, 21, 31, etc -->
                     </dict>
                     <key>ChildSecurityAssociationParameters</key>
                     <dict>
                         <key>EncryptionAlgorithm</key>
                         <string>AES-256</string><!-- Alternatives include: AES-256, AES-256-GCM, etc -->
                         <key>IntegrityAlgorithm</key>
                         <string>SHA2-256</string><!-- Alternatives include: SHA2-256, SHA2-512, etc -->
                         <key>DiffieHellmanGroup</key>
                         <integer>14</integer><!-- Alternatives include 20, 21, 31, etc -->
                     </dict>
                 </dict>
             </dict>
             <!-- Provide the CA certificate too... -->
             <dict>
                 <!-- ### 12 ###  -->
                 <key>PayloadIdentifier</key>
                 <string>cacert.cer</string>
                 <!-- ### 13 ### Another UUID as above, generate with uuidgen on Linux / Mac or a tool like https://www.uuidgenerator.net/ -->
                 <key>PayloadUUID</key>
                 <string>c6b0d13f-2aea-4420-a6f3-e4a02987ab26</string>
                 <key>PayloadType</key>
                 <string>com.apple.security.root</string>
                 <key>PayloadVersion</key>
                 <integer>1</integer>
                 <!-- ### 14 ### This is the Base64 (PEM) encoded CA certificate. Ensure there are no leading spaces on each line. -->
                 <key>PayloadContent</key>
                 <data>MIIDdDCCAlygAwIBAgIJAMiyUsFb3mfKMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV
       BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1
       c0NBQTA1MDQ5MDAwMDAwMDAwMDAeFw0xNTA3MzAxMjI3NDhaFw0yNTA3MjcxMjI3
       NDhaMEoxHTAbBgNVBAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBB
       bGxpZWRXYXJlUGx1c0NBQTA1MDQ5MDAwMDAwMDAwMDCCASIwDQYJKoZIhvcNAQEB
       BQADggEPADCCAQoCggEBAO1PtX5iOAP8fIOwHy1Gb1D2ZnNTGDVA/6/mWE7UJCU2
       RA2pk6nwcTSyKtFIHKYMW+Zfu+K07NZzoNIENwVJoPSwdI4kSAVu6NBnWvQyTd1e
       yOvia6saU743p7eeiAUNOBNEFHw10wjvH0bG/8XdYZ+ZsKUroIozSKrakh0uCT/H
       /luAEAwuTNRxWWyfyNKOjCfC7eunPREubyVeKhnVdjZOYJllzf7y62baxfFmmRx3
       FhzYZ8fI7fgvsZXmOu648jlEJzZvB+NT2hIc6Zrr/OQdpvfpa1R1e84RYcdQpI84
       QjzDkxKj5xXGR25PqIqbm1Hha49HbgGLP1RgfWfPircCAwEAAaNdMFswHQYDVR0O
       BBYEFDKQyulFnc+P+cKNyoSUq2DiBCyvMB8GA1UdIwQYMBaAFDKQyulFnc+P+cKN
       yoSUq2DiBCyvMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB
       CwUAA4IBAQDsLgLmtZTLutmwQn9IvVxMHOZt1lR55y4Ol2gaScb2qUZ8Ow8+AxXA
       NfPevFPXwhs+0KwidOeJi1qrnBsbkrhea2T6AD13yHjLi+V/9xoL4QNaoP1C76e/
       afYadCePY5KTcBw3J1uqZiIIZ8ZnuNLbWUEQPGoQhEwL2wbU1iQH9Xl1VfZZU477
       bKgcQ/xwAn41MzH2kwbfe4iNfVhD6rcoFmFt+6x61oK/lsdyGHcJcXeR549Oaq6r
       a3J7+poja/k6P95uGKNq9gYIOkyATryot917Fjby16P3THmdg/eNlHPSpEExAnW0
       5ZIw3kPC6CWlYqzYGLya73Ogh66h0Qra</data>
               </dict>
           </array>
       </dict>
       </plist>

   以下、編集可能な値について説明します。
   番号と項目名は、前記テンプレートのコメント内に記述した ### 1 ### のような箇所、および、コメントの後にある <key>項目名</key> と対応しています。

   番号 | 項目名（key） | 説明
   1 | PayloadDisplayName | 表示名。クライアント（iOSデバイス）の詳細画面においてプロファイル名として表示されます。一意である必要はありません
   2 | PayloadIdentifier | ペイロード識別子。同一クライアント上において他のPayloadIdentifierと重複しない任意の文字列を指定します
   3 | PayloadUUID | UUID（Universally Unique Identifier）。ツール等によって生成したグローバルで一意の値を指定します
   4 | PayloadIdentifier | ペイロード識別子。同一クライアント上において他のPayloadIdentifierと重複しない任意の文字列を指定します
   5 | PayloadUUID | UUID（Universally Unique Identifier）。ツール等によって生成したグローバルで一意の値を指定します
   6 | UserDefinedName | クライアントの画面に表示されるVPN接続の名前です
   7 | RemoteAddress | FQDN形式のVPN接続先。ダイナミックDNSに登録したルーターのホスト名を指定します
   8 | RemoteIdentifier | リモート識別子。項目番号7のRemoteAddressと同じ値を設定する必要があります
   9 | LocalIdentifier | ローカル識別子。本製品上でshow isakmp sa、show ipsec saコマンドを実行した際に対向として表示されます
   10 | AuthName | VPNユーザー名。ローカルRADIUSサーバーに登録したユーザー名を記述します
   11 | AuthPassword | VPNユーザーパスワード。パスワードはコンフィグファイルのインストール時に入力するため、ここは空文字列にします
   12 | PayloadIdentifier | ペイロード識別子。同一クライアント上において他のPayloadIdentifierと重複しない任意の文字列を指定します。この例ではローカルCA証明書ファイルの名前にしています
   13 | PayloadUUID | UUID（Universally Unique Identifier）。ツール等によって生成したグローバルで一意の値を指定します
   14 | PayloadContent | ローカルCA証明書の内容。本製品から作業用PCに転送したCA証明書ファイル（cacert.cer）をテキストエディタで開き、-----BEGIN CERTIFICATE----- と -----END CERTIFICATE----- の間にある部分をコピー＆ペーストしてください（BEGIN/END 行は含めません）。 （CA証明書の内容はcrypto pki export pemコマンドのterminalオプションで画面に表示させることもできます） <data>タグの直後や、後続行の行頭にスペースを入れないよう注意してください

   Note

   コンフィグファイル1つに対しそれぞれ異なるUUIDが3つ必要です（項目3、5、13）。UUIDは、Linux、macOS付属のuuidgenコマンドや、その他のUUID生成ツールで生成してください。

3. 作成したコンフィグファイルをメールの添付ファイルとしてユーザーに配布するか、Webページ上からダウンロードできるようにしてください。

#### クライアントのVPN接続設定

1. コンフィグファイル（拡張子 .mobileconfig）をiOSデバイスにダウンロードしてください。
2. コンフィグファイルをタップします。
   「このWebサイトは構成プロファイルをダウンロードしようとしています。許可しますか？」と表示されたら「許可」をタップします。

3. 「プロファイルがダウンロード済み」と表示されたら「閉じる」をタップします。

4. 「設定」アプリを開き「プロファイルがダウンロード済み」をタップします。

5. プロファイルが表示されたら右上の「インストール」をタップします。

6. お使いのiOS機器のパスコードを入力します。

7. 警告が表示されたら右上の「インストール」をタップします。

8. 「インストール」をタップします。

9. VPN接続ユーザーのパスワード（ここでは「passwdC」）を入力して「次へ」をタップします。

10. 右上の「完了」をタップします。

11. 「設定」アプリに「VPN」が表示されますので、「VPN」をオンにします。

12. 接続試行中は「VPNに接続中...」と表示されます。

13. 「VPNに接続中...」から「VPN」に表示が切り替わり、画面右上に「VPN」が数秒表示されたら接続完了です。

## ルーターのコンフィグ

    !
    no spanning-tree rstp enable
    !
    ip domain-lookup
    !
    ddns enable
    !
    ddns-update-method dyndns
     update-url https://<USERNAME>:<PASSWORD>@members.dyndns.org/nic/update?SYSTEM=dyndns&hostname=<HOST-NAME>&myip=<IPADDRESS>
     host-name test01-native-vpn.dyndns.org
     username test
     password test
     update-interval 60
     retry-interval 1 maximum-retries 5
    !
    interface eth1
     encapsulation ppp 0
    !
    interface ppp0
     ip ddns-update-method dyndns
     ppp ipcp dns request
     keepalive
     ip address negotiated
     ppp username user@isp
     ppp password isppasswd
     ip tcp adjust-mss pmtu
    !
    interface vlan1
     ip address 192.168.10.1/24
    !
    zone private
     network lan
      ip subnet 192.168.10.0/24
      ip subnet 192.168.20.0/24
    !
    zone public
     network wan
      ip subnet 0.0.0.0/0 interface ppp0
      host ppp0
       ip address dynamic interface ppp0
    !
    application esp
     protocol 50
    !
    application isakmp
     protocol udp
     dport 500
    !
    application nat-t
     protocol udp
     dport 4500
    !
    firewall
     rule 10 permit any from private to private
     rule 20 permit any from private to public
     rule 30 permit isakmp from public.wan to public.wan.ppp0
     rule 40 permit isakmp from public.wan.ppp0 to public.wan
     rule 50 permit esp from public.wan to public.wan.ppp0
     rule 60 permit esp from public.wan.ppp0 to public.wan
     rule 70 permit nat-t from public.wan to public.wan.ppp0
     rule 80 permit nat-t from public.wan.ppp0 to public.wan
     rule 90 permit https from public.wan.ppp0 to public.wan
     rule 100 permit dns from public.wan.ppp0 to public.wan
     protect
    !
    nat
     rule 10 masq any from private to public
     enable
    !
    radius-server host localhost key awplus-local-radius-server
    !
    aaa authentication isakmp default group radius
    !
    crypto pki trustpoint local
     subject-alt-name test01-native-vpn.dyndns.org
     subject-name /O=AlliedTelesis/CN=test01-native-vpn.dyndns.org
    !
    radius-server local
     server enable
     nas 127.0.0.1 key awplus-local-radius-server
     group userA
      attribute Framed-IP-Address 192.168.20.2
      attribute Framed-IP-Netmask 255.255.255.0
      attribute MS-Primary-DNS-Server 192.168.20.1
     group userB
      attribute Framed-IP-Address 192.168.20.3
      attribute Framed-IP-Netmask 255.255.255.0
      attribute MS-Primary-DNS-Server 192.168.20.1
     group userC
      attribute Framed-IP-Address 192.168.20.4
      attribute Framed-IP-Netmask 255.255.255.0
      attribute MS-Primary-DNS-Server 192.168.20.1
     user userA password passwdA group userA
     user userB password passwdB group userB
     user userC password passwdC group userC
    !
    ip dns forwarding
    !
    crypto isakmp profile native-vpn
     version 2
     local authentication certificate
     configuration-attribute radius
     remote authentication eap-radius
     lifetime 25200
     pki trustpoint local
     transform 1 integrity SHA256 encryption AES256 group 14
     transform 2 integrity SHA256 encryption AES256 group 2
    !
    crypto isakmp peer policy tunnel0 profile native-vpn
    !
    interface tunnel0
     tunnel local name test01-native-vpn.dyndns.org
     tunnel protection ipsec
     tunnel mode ipsec multipoint
     ip address 192.168.20.1/24
     ip tcp adjust-mss pmtu
    !
    ip route 0.0.0.0/0 ppp0
    !
    end