目的
- 現在のオフィスでは無線環境がないのだが、来年のオフィス移転に併せて、会社所有の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の設定ファイルを編集して、ブリッジを作成する。
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_mgmt
にWPA-EAP
を設定し、ieee8021x
に1
を設定する。
auth_server_shared_secret
とacct_server_shared_secret
にはネットワークポリシーサーバーの設定で
新しいRADIUSクライアントを設定したときに入れた値を入れる。
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あたりのログをフィルターして見る