hostapdで認証(IEEE802.1X EAP-TLS)付きの無線APを構築する


目的

  • 現在のオフィスでは無線環境がないのだが、来年のオフィス移転に併せて、会社所有のPCだけを無線LANに接続できるようにしたい
  • 無線LANの端末認証にはIEEE 802.1XのEAP-TLSを使えるか検証したい
  • EAP-TLSは証明書の管理が面倒らしいので、Active Directoryで自動化したい
  • IEEE802.1X対応APは持っていないので、余ったノートPCにhostapdを入れてアクセスポイントにして検証する

WindowsをRADIUSサーバにしてEAP-TLSの構成をしたhostapdの例は見つからなかったので、少々苦労した。

構成

  • 既存のドメインコントローラ
    • OS: Windows Server 2012R2
    • IP: 192.168.10.234/24
    • 証明書サービスをインストールして、認証局(プライベートCA)にする
    • グループポリシーで、ドメイン参加PCにはコンピュータの証明書を自動で登録するよう構成
    • ネットワークポリシーサーバーをインストールして、認証サーバ(RADIUSサーバ)にする
  • 余ったLet's Note
    • OS: Ubuntu 18.04 Server
    • IP: 192.168.10.202/24
    • hostapdをインストールして、オーセンティケータとして動作させる
    • NATではなくブリッジ接続する
  • ドメイン参加済みのPC
    • サプリカントとして無線LANに接続できるか検証する
    • サーバとは同じセグメントにDHCPでIPが割り当てられるようにする

PKIの構築

標準テキスト Windows Server 2012 R2 構築・運用・管理パーフェクトガイドの通りに作業したので、
ここでは割愛。p.344からp.355をそのまま実施した。

認証局(CA)の構築、各コンピュータの証明書の自動登録テンプレートの登録を実施したので、
ドメインに参加したクライアントPCには、証明書の個人ストアに各々のコンピュータの証明書が入り、
信頼されたルート証明機関にドメインコントローラの証明書が自動で登録・更新される。

ネットワークポリシーサーバーのインストールと設定

アラクサラネットワークス社のマニュアル、RADIUS サーバ設定ガイド Windows Server 2012 編に従って作業したので、これも割愛。

行った作業は下記の通り。

  • 2.2.4. ネットワークポリシーとアクセスサービス(NPS)のインストール
  • 3.1.2. NPS の設定

今回は証明書を用いた認証のみを有効化したので、EAPの種類は下図のような設定となった。


無線APの構築

hostapdのインストール

Ubuntu 18.04 Serverではリポジトリにhostapdがなかったので、

wget http://archive.ubuntu.com/ubuntu/pool/universe/w/wpa/hostapd_2.6-15ubuntu2_amd64.deb
sudo dpkg -i hostapd_2.6-15ubuntu2_amd64.deb

でhostapdをインストールした。

リポジトリにhostapdがあるなら

sudo apt install hostapd

でもOK。

ブリッジ設定

今回はhostapdに無線で接続してきたクライアントを、無線APと同じネットワークに接続したいので、ブリッジ接続する。

bridge-utilsがインストールされていなければ追加。

sudo apt install bridge-utils

netplanの設定ファイルを編集して、ブリッジを作成する。

/etc/netplan/99_config.yaml
network:
    ethernets:
        enp0s25:
            dhcp4: false
    bridges:
        br0:
            interfaces: [enp0s25]
            addresses: [192.168.10.202/24]
            gateway4: 192.168.10.253
            nameservers:
                addresses: [192.168.10.234, 192.168.10.236]    
            dhcp4: false
            optional: true
    version: 2

設定を適用する。

sudo netplan apply

hostapd設定

今回、なかなか設定例が見つからず苦労したところ。
wpa_key_mgmtWPA-EAPを設定し、ieee8021x1を設定する。

auth_server_shared_secretacct_server_shared_secretにはネットワークポリシーサーバーの設定で
新しいRADIUSクライアントを設定したときに入れた値を入れる。

/etc/hostapd/hostapd.conf
ctrl_interface=/var/run/hostapd
interface=wlp2s0
bridge=br0
driver=nl80211
ssid=TEST-EAP-TLS
country_code=JP
hw_mode=g
channel=3
wpa=2
wpa_key_mgmt=WPA-EAP
rsn_pairwise=CCMP
ieee8021x=1
nas_identifier=TEST-EAP-AP
own_ip_addr=192.168.10.202
radius_client_addr=192.168.10.202
auth_server_addr=192.168.10.234
auth_server_port=1812
auth_server_shared_secret=TestSecret
acct_server_addr=192.168.10.234
acct_server_port=1813
acct_server_shared_secret=TestSecret

設定ファイルができたら、起動する。

sudo hostapd -d /etc/hostapd/hostapd.conf

-dはデバッグメッセージを表示するオプション。
終了するときはCtrl + C。

接続できるかテスト

ドメイン参加済みのPC(Windows 10)の通知領域にあるWi-Fiのところから、
SSID一覧を表示させると、hostapdで設定したSSIDが表示されるはず(この例ではTEST-EAP-TLS)

そのまま「接続」とすると、下記のようにサーバの証明書が正しいか聞いてくるので、確認して「接続」を押し、ちゃんとIPが振られればOK。

一応、「ネットワークと共有センター」から、「新しい接続またはネットワークのセットアップ」を行い、マニュアルで設定することも可能(Windows 10だとこの設定画面に行くまでが大変)。
この場合は、信頼されたルート証明機関でサーバの証明書を選択できるので、上図のフィンガープリントの確認画面は出ない。
ヤマハのマニュアルが分かりやすかった
無線端末を設定(WPA/WPA2エンタープライズ / EAP-TLS) : Windows10

上手く行かない場合

接続できない場合は、以下のログを確認する。

  • hostapd起動中に標準出力へ吐かれるログ
  • RADIUSサーバーのプロパティで、イベントログに成功と失敗のログを出力するように設定しておき、イベントビューアでIDが6272から6280あたりのログをフィルターして見る