nodogsplashで構築するCaptive Portal:Linuxでのプロフェッショナルな公衆Wi-Fi管理

Network tutorial - IT technology blog
Network tutorial - IT technology blog

なぜ公衆Wi-Fiには「門番」が必要なのか?

カフェに入ってWi-Fiに接続した際、「接続」ボタンのクリックやバウチャーコードの入力を求めるウェブページが表示された経験はありませんか?それがCaptive Portal(キャプティブポータル)です。技術的には検問所のような役割を果たします。Wi-Fiの電波を掴んでいても、スプラッシュページで特定の操作を行うまでは、すべてのウェブアクセスがブロックされます。

漏洩のリスクがある従来のWPA2パスワードの代わりに、Captive Portalは優れたプロフェッショナル性と安全性を提供します。このソリューションにより、以下のことが可能になります:

  • 利用規約(TOS)への同意を強制し、法的トラブルを回避する。
  • ブランドの宣伝や顧客のメールアドレス収集を行う。
  • 1回のセッションを60〜120分に制限し、長時間の「タダ乗り」を防止する。
  • 帯域幅を2〜5Mbpsに制限し、トレントのダウンロードなどによるネットワークの混雑を防ぐ。

以前、50台ものデバイスが接続されているのにネットワークがほぼ麻痺しているWi-Fiスポットのトラブル対応をしたことがあります。調査の結果、5〜6台のスマートフォンがWi-Fi接続と同時に自動でクラウドバックアップを実行していたことが判明しました。その際、Captive Portalを導入したことで、不要な接続をフィルタリングし、わずか数分でシステムを安定させることができました。

本ガイドでは、nodogsplashを使用します。これは非常に軽量(RAM消費量はわずか2〜5MB程度)で安定性が高く、Raspberry PiやOpenWrt搭載の古いルーターでもスムーズに動作するツールです。

Linuxへのnodogsplashインストール手順

2つのネットワークインターフェース(NIC)を備えたLinuxマシン(Ubuntu/Debian)が必要です。一つはインターネット接続用(WAN)、もう一つはWi-Fi配信またはユーザー用スイッチ接続用(LAN)です。

1. 環境の準備

まず、システムを更新し、ソースコードのコンパイルに必要なライブラリをインストールします:

sudo apt update
sudo apt install git libmicrohttpd-dev build-essential -y

2. ソースからのnodogsplashのコンパイル

最新バージョンをフル機能で利用するには、ソースからのビルドが最適です:

git clone https://github.com/nodogsplash/nodogsplash.git
cd nodogsplash
make
sudo make install

完了後、すべての設定ファイルは /etc/nodogsplash ディレクトリに配置されます。

ルーティングエンジンの設定

次に、nodogsplashがどのネットワークポートを監視すべきかを指定します。

1. Thiết lập file nodogsplash.conf

nanoエディタを使用して設定ファイルを開きます:

sudo nano /etc/nodogsplash/nodogsplash.conf

以下の重要なパラメータに注意してください:

  • GatewayInterface: ユーザー側のネットワークインターフェース名(例:wlan0 または eth1)。ip link show コマンドで確認できます。
  • GatewayAddress: ローカルネットワーク内でのLinuxマシンの固定IP(通常は 192.168.1.1)。
  • MaxClients: ハードウェア의 過負荷を防ぐための最大ユーザー数制限(例:50)。

実際の設定例:

GatewayInterface eth1
GatewayAddress 192.168.10.1
MaxClients 50
AuthIdleTimeout 60
CheckInterval 30

AuthIdleTimeout 60 という設定は非常に有用です。ユーザーが60分間ネットワークを使用しない場合、システムは自動的に接続を解除し、他のユーザーに枠を譲ります。

2. スプラッシュページのカスタマイズ

デフォルトのスプラッシュページは /etc/nodogsplash/htdocs/splash.html にあります。ロゴや色の変更、キャンペーン情報の追加などは、簡単なHTML/CSSで行えます。ただし、以下の重要な認証コードは必ず残しておいてください:

<form method="GET" action="$authaction">
    <input type="hidden" name="tok" value="$tok">
    <input type="hidden" name="redir" value="$redir">
    <input type="submit" value="今すぐ接続">
</form>

運用と管理

以下のコマンドでサービスを起動します:

sudo nodogsplash

個人のスマートフォンで接続をテストしてみてください。画面に自動的に「Wi-Fiネットワークにログイン」という通知が表示されれば成功です!

ndsctlによるユーザー管理

ndsctl ツールは、リアルタイムでシステムを監視するための強力なサポーターです。

オンラインのユーザーリストを表示するには:

sudo ndsctl status

帯域を使いすぎている、あるいは不正な行為をしているユーザーがいる場合、即座にネットワークから「退出」させることができます:

sudo ndsctl deauth [MAC_ADDRESS]

技術的な注意点: HSTSセキュリティメカニズムにより、HTTPSサイト上ではスプラッシュページが自動的に表示されないことがあります。もしユーザーから苦情があれば、neverssl.com のようなHTTPのみを使用するサイトにアクセスして、nodogsplashのフィルタを再起動するように案内してください。

システムの自動化

停電やサーバーの再起動時にシステムが自動的に実行されるように、nodogsplashを systemd に登録することをお勧めします。これにより、手動での介入なしにネットワークインフラを常に準備万端の状態に保つことができます。

Captive Portalの導入は、単なる技術的な話ではなく、ユーザー体験を向上させるための手段でもあります。nodogsplashを使えば、PacketFenceのような肥大化したシステムよりも、軽量かつ強力なソリューションを手に入れることができます。

Share: