# 無線機能 / キャプティブポータル

キャプティブポータル（Web認証）の設定にかかわるコマンドは以下のとおりです。

実施内容 | 初期設定 | コマンド
設定コマンド
キャプティブポータル設定の作成 | 未作成 | captive-portal(local)（無線ネットワークモード）
キャプティブポータルの有効・無効 | 無効 | enable(local)（キャプティブポータル設定モード）
認証モード | クリックスルー | mode(local)（キャプティブポータル設定モード）
認証ページプロキシ | 無効 | page-proxy-url(local)（キャプティブポータル設定モード）
外部ページリダイレクト | 未設定 | external-page-url(local)（キャプティブポータル設定モード）
RADIUSサーバーグループ | 未設定 | radius auth group(local)（キャプティブポータル設定モード）
RADIUSパケットの検証 | 無効 | verify-radius-packet enable(local)（キャプティブポータル設定モード）
認証後リダイレクト（固定URL） | 無効 | redirect-url(local)（キャプティブポータル設定モード）
認証後リダイレクト（セッション維持） | 無効 | session-keep(local)（キャプティブポータル設定モード）
セッションタイムアウト時の動作 | reauthentication | session-timeout-action(local)（キャプティブポータル設定モード）
セッションタイムアウト間隔 | 3600秒 | session-timeout-interval(local)（キャプティブポータル設定モード）
RADIUSアカウンティング | 無効 | radius accounting enable(local)（キャプティブポータル設定モード）
ウォールドガーデン | 未設定 | walled-garden entry(local)（キャプティブポータル設定モード）
ウォールドガーデン用DNSプロキシ | 無効 | walled-garden-dns-proxy enable(local)（キャプティブポータル設定モード）
確認コマンド
ウォールドガーデン一覧 |  | show wireless captive-portal network walled-garden(local)（非特権EXECモード）

Web認証では以下の方式を利用可能です。

RADIUSサーバー（外部RADIUS） | RADIUSサーバーを利用して認証を行います。
クリックスルー | 無線ネットワークの利用者に対して利用規約のページを表示し、ボタンクリックで規約に同意してもらうことにより通信を許可します。
外部ページリダイレクト | SNSなどの第三者機関のWeb認証を使用して接続できるようになります。

認証に成功すると認証後リダイレクトページが表示されます。

## RADIUSサーバー（外部RADIUS）

ここでは、任意のVAP（セキュリティーはWPAパーソナル）において、RADIUSサーバー（外部RADIUS）を利用したWeb認証を設定する方法を説明します。

1. Web認証で使用するローカルRADIUSサーバーの設定を行うため、RADIUSサーバーモードに移行します。

       awplus(config)# radius-server local

2. ローカルRADIUSサーバーのユーザーとパスワードを設定します。ここではユーザーを「user」、パスワードを「password」とします。

       awplus(config-radsrv)# user user password password

3. ローカルRADIUSサーバーを有効にします。

       awplus(config-radsrv)# server enable

4. グローバルコンフィグモードに戻り、RADIUSクライアントの設定で自身のローカルRADIUSサーバーを使用するように指定します。
   ここでは、ホストのIPアドレスを「127.0.0.1」、RADIUSサーバーとの通信に使用する共有パスワードを「awplus-local-radius-server」とします。

       awplus(config-radsrv)# exit
       awplus(config)# radius-server host 127.0.0.1 key awplus-local-radius-server

5. VAPで使用するセキュリティーとネットワークの設定を行います。
   1. WPAパーソナルのセキュリティー設定を作成します。
      ここでは、セキュリティー設定番号を「2」とします。

          awplus(config)# wireless
          awplus(config-wireless)# security 2 mode wpa-personal

   2. WPAパーソナルのセキュリティーキーの設定を行います。
      ここでは、セキュリティーキーを「1234567890」とします。

          awplus(config-wireless-sec-wpa-psnl)# key 1234567890
          awplus(config-wireless-sec-wpa-psnl)# exit

   3. VAPで使用する無線ネットワーク設定を作成します。
      ここでは、無線ネットワーク設定番号を「2」とします。

          awplus(config-wireless)# network 2

   4. SSIDを指定します。
      ここでは、「network2」とします。

          awplus(config-wireless-network)# ssid network2

   5. 手順3で設定したネットワークにセキュリティーを割り当てます。

          awplus(config-wireless-network)# security 2

6. Web認証を有効にし、Web認証に使用するRADIUSサーバーグループを指定します。

       awplus(config-wireless-network)# web-auth radius auth group radius

7. キャプティブポータル設定モードに移行し、キャプティブポータル（Web認証）を有効にします。

       awplus(config-wireless-network)# captive-portal
       awplus(config-wireless-network-cp)# enable

8. Web認証の動作モード（外部RADIUS）を設定します。

       awplus(config-wireless-network-cp)# mode radius

9. 認証に使用するRADIUSサーバーを指定します。

       awplus(config-wireless-network-cp)# radius auth group radius

10. 外部RADIUSでは以下の機能を使用できます。必要に応じて設定を行ってください。
    Note

    認証後リダイレクト（セッション維持）と認証後リダイレクト（固定URL）の両方を有効にした場合、認証後リダイレクト（セッション維持）が優先されます。

    - 認証ページプロキシ：外部Webサーバーに設置されたカスタムページを指定します。ここではカスタムページのアドレスを「http://www.example.com/captive_portal」とします。

          awplus(config-wireless-network-cp)# page-proxy-url http://www.example.com/captive_portal

      Note

      カスタムページのHTML作成方法は、「認証ページプロキシで使用するHTMLファイル」をご覧ください。

    - 認証後リダイレクト（セッション維持）：認証成功後、Web認証前にユーザーが指定していた本来のURLにWebブラウザーをリダイレクトさせる機能を有効にします。

          awplus(config-wireless-network-cp)# session-keep

    - 認証後リダイレクト（固定URL）：認証成功後、固定URLにWebブラウザーをリダイレクトさせる機能を有効にします。ここでは、固定URLのアドレスを「http://www.example.com/captive_portal2」とします。

          awplus(config-wireless-network-cp)# redirect-url http://www.example.com/captive_portal2

    - ウォールドガーデン ：Web認証が完了する前のユーザーや未認証のユーザーに対して閲覧可能なページを指定できる機能を有効にします。
      ここでは、FQDNのアドレスをワイルドカードを使用して「*.example-ex.com」とします。

          awplus(config-wireless-network-cp)# walled-garden entry *.example-ex.com

    - ウォールドガーデン用DNSプロキシ ：ウォールドガーデン機能使用時に無線APに接続されている無線クライアントからのDNS問合せや無線クライアントへのDNS応答を代理で行う機能を有効にします。

          awplus(config-wireless-network-cp)# walled-garden-dns-proxy enable

11. 無線設定モードに戻り、ローカルAP用のAPプロファイル「local」を編集するためAPプロファイルモードに入ります。さらに、APプロファイル・無線モードに移行し、無線1を有効にします。

        awplus(config-wireless-network-cp)# exit
        awplus(config-wireless-network)# exit
        awplus(config-wireless)# ap-profile local
        awplus(config-wireless-ap-prof)# radio 1
        awplus(config-wireless-ap-prof-radio)# enable

12. VAP2にネットワーク2を割り当てます。

        awplus(config-wireless-ap-prof-radio)# vap 2 network 2

13. 特権EXECモードに戻り設定を適用します。

        awplus(config-wireless-ap-prof-radio)# end
        awplus# wireless ap-configuration apply ap local

### 認証ページプロキシで使用するHTMLファイル

RADIUSサーバーを利用したWeb認証で認証ページプロキシを使用する場合は、「ベースURL」で指定したWebサーバー上のディレクトリーに以下のHTMLファイルを用意してください。
Note

Webサーバーには、無線クライアントの認証のたびにファイルを要求するため、Web認証を使用する場合は、常にWebサーバーを無線APのプロキシ機能に対して公開している必要があります。

Note

Webサーバー自体からRADIUSサーバーにアクセスできる必要はありません。また、Webサーバーで認証ページが実際に機能する必要はありません。

Note

HTML/CSSの書き方や書式、編集後の問題に関してはサポート対象外となります。あらかじめご了承ください。

Note

CSSファイルや画像ファイルを使用できますが、HTML内で相対パスでの指定が必須となります。

- ログインページ（HTMLファイル名：radius_login.html）
  ログインページのHTMLには、以下の要件を満たすログインフォームを含む必要があります。
  - method属性が post である <form> タグ
  - name 属性が userid である <input> タグ
  - name 属性が password である <input> タグ
  - type 属性が submit である <input> タグ
  記載例：

      <html>
      <head>
      <title>Web Authentication Page</title>
      </head>
      <form method="post">
      ユーザー名:<input type="text" name="userid">
      パスワード:<input type="password" name="password">
      <input type="submit" value="Connect"></input>
      </form>
      </html>

- ログイン失敗ページ（HTMLファイル名：radius_login_fail.html）
  ログインに失敗したときに表示されるページです。ログインページと同じ要件を満たすログインフォームを含む必要があります。
- ログイン成功ページ（HTMLファイル名：welcome.html）
  ログインに成功したときに表示されるページです。特別な要件はありません。任意のHTMLページを使用できます。

## クリックスルー

ここでは、任意のVAP（セキュリティーはWPAパーソナル）において、クリックスルー方式のWeb認証を設定する方法を説明します。

1. VAPで使用するセキュリティーとネットワークの設定を行います。
   1. WPAパーソナルのセキュリティー設定を作成します。
      ここでは、セキュリティー設定番号を「2」とします。

          awplus(config)# wireless
          awplus(config-wireless)# security 2 mode wpa-personal

   2. WPAパーソナルのセキュリティーキーの設定を行います。
      ここでは、セキュリティーキーを「1234567890」とします。

          awplus(config-wireless-sec-wpa-psnl)# key 1234567890
          awplus(config-wireless-sec-wpa-psnl)# exit

   3. VAPで使用する無線ネットワーク設定を作成します。
      ここでは、無線ネットワーク設定番号を「2」とします。

          awplus(config-wireless)# network 2

   4. SSIDを指定します。
      ここでは、SSIDを「network2」とします。

          awplus(config-wireless-network)# ssid network2

   5. 手順3で設定したネットワークにセキュリティーを割り当てます。

          awplus(config-wireless-network)# security 2

2. キャプティブポータル設定モードに移行し、キャプティブポータル（Web認証）を有効化します。

       awplus(config-wireless-network)# captive-portal
       awplus(config-wireless-network-cp)# enable

3. Web認証の動作モード（クリックスルー）を設定します。
   Note

   デフォルト設定はクリックスルーです。外部RADIUS・外部ページリダイレクト認証から変更するとき以外は本設定は不要です。

       awplus(config-wireless-network-cp)# mode click-through

4. クリックスルーでは以下の機能を使用できます。必要に応じて設定を行ってください。
   Note

   認証後リダイレクト（セッション維持）と認証後リダイレクト（固定URL）の両方を有効にした場合、認証後リダイレクト（セッション維持）が優先されます。

   - 認証ページプロキシ：外部Webサーバーに設置されたカスタムページを指定します。ここではカスタムページのアドレスを「http://www.example.com/captive_portal」とします。

         awplus(config-wireless-network-cp)# page-proxy-url http://www.example.com/captive_portal

     Note

     カスタムページのHTML作成方法は、「認証ページプロキシで使用するHTMLファイル」をご覧ください。

   - 認証後リダイレクト（セッション維持）：認証成功後、Web認証前にユーザーが指定していた本来のURLにWebブラウザーをリダイレクトさせる機能を有効にします。

         awplus(config-wireless-network-cp)# session-keep

   - 認証後リダイレクト（固定URL）：認証成功後、固定URLにWebブラウザーをリダイレクトさせる機能を有効にします。
     ここでは、固定URLのアドレスを「http://www.example.com/captive_portal2」とします。

         awplus(config-wireless-network-cp)# redirect-url http://www.example.com/captive_portal2

   - ウォールドガーデン ：Web認証が完了する前のユーザーや未認証のユーザーに対して閲覧可能なページを指定できる機能を有効にします。
     ここでは、FQDNのアドレスをワイルドカードを使用して「*.example-ex.com」とします。

         awplus(config-wireless-network-cp)# walled-garden entry *.example-ex.com

   - ウォールドガーデン用DNSプロキシ ：ウォールドガーデン機能使用時に無線APに接続されている無線クライアントからのDNS問合せや無線クライアントへのDNS応答を代理で行う機能を有効にします。

         awplus(config-wireless-network-cp)# walled-garden-dns-proxy enable

5. 無線設定モードに戻り、ローカルAP用のAPプロファイル「local」を編集するためAPプロファイルモードに入ります。さらに、APプロファイル・無線モードに移行し、無線1を有効にします。

       awplus(config-wireless-network-cp)# exit
       awplus(config-wireless-network)# exit
       awplus(config-wireless)# ap-profile local
       awplus(config-wireless-ap-prof)# radio 1
       awplus(config-wireless-ap-prof-radio)# enable

6. VAP2にネットワーク2を割り当てます。

       awplus(config-wireless-ap-prof-radio)# vap 2 network 2

7. 特権EXECモードに戻り設定を適用します。

       awplus(config-wireless-ap-prof-radio)# end
       awplus# wireless ap-configuration apply ap local

### 認証ページプロキシで使用するHTMLファイル

クリックスルーで認証ページプロキシを使用する場合は、「ベースURL」で指定したWebサーバー上のディレクトリーに以下のHTMLファイルを用意してください。
Note

Webサーバーには、無線クライアントの認証のたびにファイルを要求するため、Web認証を使用する場合は、常にWebサーバーを無線APのプロキシ機能に対して公開している必要があります。

Note

Webサーバー自体からRADIUSサーバーにアクセスできる必要はありません。また、Webサーバーで認証ページが実際に機能する必要はありません。

Note

HTML/CSSの書き方や書式、編集後の問題に関してはサポート対象外となります。あらかじめご了承ください。

Note

CSSファイルや画像ファイルを使用できますが、HTML内で相対パスでの指定が必須となります。

- ログインページ（同意ページ）（HTMLファイル名：click_through_login.html）
  ユーザーに利用規約を提示して同意を求めるログインページのHTMLには、以下の要件を満たすフォームを含む必要があります。
  - method属性が post である <form> タグ
  - type 属性が submit である <input> タグ
  記載例：

      <pre class="code screen">
      <html>
      <head>
      <title>Terms of Service</title>
      </head>
      <form method="post">
      <input type="submit" value="Agree"></input>
      </form>
      </html>

- ログイン成功ページ（HTMLファイル名：welcome.html）
  ログインに成功したときに表示されるページです。特別な要件はありません。任意のHTMLページを使用できます。

## 外部ページリダイレクト

ここでは、任意のVAP（セキュリティーはWPAパーソナル）において、外部ページリダイレクトによるWeb認証を設定する方法を説明します。

1. VAPで使用するセキュリティーとネットワークの設定を行います。
   1. WPAパーソナルのセキュリティー設定を作成します。
      ここでは、セキュリティー設定番号を「2」とします。

          awplus(config)# wireless
          awplus(config-wireless)# security 2 mode wpa-personal

   2. WPAパーソナルのセキュリティーキーの設定を行います。
      ここでは、セキュリティーキーを「1234567890」とします。

          awplus(config-wireless-sec-wpa-psnl)# key 1234567890
          awplus(config-wireless-sec-wpa-psnl)# exit

   3. VAPで使用する無線ネットワーク設定を作成します。
      ここでは、無線ネットワーク設定番号を「2」とします。

          awplus(config-wireless)# network 2

   4. SSIDを指定します。
      ここでは、「network2」とします。

          awplus(config-wireless-network)# ssid network2

   5. 手順3で設定したネットワークにセキュリティーを割り当てます。

          awplus(config-wireless-network)# security 2

2. キャプティブポータル設定モードに移行し、キャプティブポータル（Web認証）を有効にします。

       awplus(config-wireless-network)# captive-portal
       awplus(config-wireless-network-cp)# enable

3. Web認証の動作モード（外部ページリダイレクト）を設定します。

       awplus(config-wireless-network-cp)# mode external-page-redirect

4. 外部ページリダイレクトでは以下の機能を使用できます。必要に応じて設定を行ってください。
   Note

   認証後リダイレクト（セッション維持）と認証後リダイレクト（固定URL）の両方を有効にした場合、認証後リダイレクト（セッション維持）が優先されます。

   - 外部ページURL：外部Webサーバーに設置されたカスタムページを指定します。ここではカスタムページのアドレスを「http://www.example.com/captive_portal」とします。

         awplus(config-wireless-network-cp)# external-page-url http://www.example.com/captive_portal

     Note

     カスタムページのHTML作成方法は、「外部ページリダイレクトで使用するHTMLファイル」をご覧ください。

   - 認証後リダイレクト（セッション維持）：認証成功後、Web認証前にユーザーが指定していた本来のURLにWebブラウザーをリダイレクトさせる機能を有効にします。

         awplus(config-wireless-network-cp)# session-keep

   - 認証後リダイレクト（固定URL）：認証成功後、固定URLにWebブラウザーをリダイレクトさせる機能を有効にします。
     ここでは、固定URLのアドレスを「http://www.example.com/captive_portal2」とします。

         awplus(config-wireless-network-cp)# redirect-url http://www.example.com/captive_portal2

   - ウォールドガーデン ：Web認証が完了する前のユーザーや未認証のユーザーに対して閲覧可能なページを指定できる機能を有効にします。
     ここでは、FQDNのアドレスをワイルドカードを使用して「*.example-ex.com」とします。

         awplus(config-wireless-network-cp)# walled-garden entry *.example-ex.com

   - ウォールドガーデン用DNSプロキシ ：ウォールドガーデン機能使用時に無線APに接続されている無線クライアントからのDNS問合せや無線クライアントへのDNS応答を代理で行う機能を有効にします。

         awplus(config-wireless-network-cp)# walled-garden-dns-proxy enable

5. 無線設定モードに戻り、ローカルAP用のAPプロファイル「local」を編集するためAPプロファイルモードに入ります。さらに、APプロファイル・無線モードに移行し、無線1を有効にします。

       awplus(config-wireless-network-cp)# exit
       awplus(config-wireless-network)# exit
       awplus(config-wireless)# ap-profile local
       awplus(config-wireless-ap-prof)# radio 1
       awplus(config-wireless-ap-prof-radio)# enable

6. VAP2にネットワーク2を割り当てます。

       awplus(config-wireless-ap-prof-radio)# vap 2 network 2

7. 特権EXECモードに戻り設定を適用します。

       awplus(config-wireless-ap-prof-radio)# end
       awplus# wireless ap-configuration apply ap local

### 外部ページリダイレクトで使用するHTMLファイル

外部ページリダイレクトを使用する場合は、下記の条件にしたがって「外部ページURL」が指し示す場所にWeb認証用のHTMLページを作成してください。
Note

HTML/CSSの書き方や書式、編集後の問題に関してはサポート対象外となります。あらかじめご了承ください。

外部認証ページにリダイレクトする際に以下の情報をクエリ文字列として付加します。

- switch_url：APの認証ページのURL
- ap_mac：無線クライアントが接続しているVAPのBSSID
- wlan：無線クライアントが接続しているVAPのSSID
- client_mac：無線クライアントのMACアドレス
- statusCode：認証状態（0：通常のリクエスト、5：認証失敗）
- redirect：無線クライアントが接続しようとしていたページのURL

また、POSTに関して、以下を満たす必要があります。

- MIME typeは "application/x-www-form-urlencoded" です。
- キーと値は '=' で繋ぎ、それぞれのキーバリューは '&' で繋いでください。
- キーバリューの値はパーセントエンコーディングしてください。
- 以下のキーバリューを送信してください。
  - キー：'userid' or 'username'、値：RADIUS認証に用いるユーザーID
  - キー：'password'、値：RADIUS認証に用いるパスワード
- 認証先は、無線APの認証ページにする必要があります。
  - form の場合は action 属性で指定できます。
  - `?redirect=`を追加すると、認証後のリダイレクト先を指定できます。

HTMLファイル設定例：

    <html>
    <head>
        <title>Captive Portal</title>
        <script>
            function loadaction() {
                var queryString = window.location.search;
                var queryObject = new Object();
                if (queryString) {
                    queryString = queryString.substring(1);
                    var parameters = queryString.split('&');
                    for (var i = 0; i < parameters.length; i++) {
                        var element = parameters[i].split('=');
                        var paramName = decodeURIComponent(element[0]);
                        var paramValue = decodeURIComponent(element[1]);
                        queryObject[paramName] = paramValue;
                    }
                }
                var redirectUrl = "https://" + queryObject["redirect"];
                document.forms[0].action = queryObject["switch_url"] + "?redirect=" + redirectUrl;
                if (queryObject["statusCode"] == 5) {
                    window.alert("Invalid username or password!");
                }
            }
        </script>
    </head>
    <body onload="loadaction();">
        <form method="POST" action="">
            User Name<input type="text" name="username"><br>
            Password<input type="password" name="password"><br>
            <input type="submit" value="Connect"></input>
        </form>
    </body>
    </html>