naoki86star

インターネットの片隅でなにかしら書いてみる

OpenNDS試してみた

OpenNDSって?

 Captive Portalを実現できるOSS。Captive Portalとは、インターネット接続をサービスを提供してくれるショップとかホテルとかで接続の際に最初にブラウザが開いて表示されるサイトのことで、許可されたのちに*1インターネット接続サービスが使えるようになる仕組み。

GitHub - openNDS/openNDS: openNDS provides instant access control of an Internet connection along with a powerful API for development of advanced Captive Portal solutions.

通常のLinux特にOpenWRTっていうホームゲートウェイ向けディストリビューションを念頭に設計・実装されているようである。

とりあえず試してみる
  • 家の環境 raspberry pi3(B+, "Raspbian GNU/Linux 10 (buster)")
+-----+     +-----+   +-------+
| PC  |/////| pi3 |---|home-GW|====(internet) 
+-----+     +---- +   +-------+
      wifi区間   イーサ

OpenWRTの場合にはパッケージシステムが使える模様。今回pi3で使ってみるのでHow to Compile openNDSに従いインストールする。

sudo systemctl start opennds

で起動した後に、PC(Windows)をwifiで接続する。
(通常使っているブラウザ)chromeでポータル画面が表示される。こんな感じ。

f:id:naoki86star:20210803152513p:plain

仕様・内容

ポータル画面としての動作としては2通り設定可能なようで

  • ポータル画面で単にクリックすることでアクセス許可になる
  • ポータル画面で、ユーザー名・e-mailアドレスを打ち込むことで、アクセス許可になる


ポータルの認証を別のサードパーティサイトに任せることが可能とある。

感想

 とりあえずpi3 B+で動かしてみるのは簡単だった。
 アクセス許可の動作にはiptablesが使われているが、アクセス制限の動き(iptablesに設定されるエントリ)、dnsmasqはどう使われているのかとか、抜け道はないのかとか、もすこし検証したほうがいいかもしれない。

 ポータルの認証を別のサードパーティサイトに転送するイメージはちょっとわからなかった。oauth2みたいなことができるのだと予想はするのだけども、無線アクセスのゲートなのにわざわざ一旦別のサイトに飛ばして認証する意欲はわかない気がする。

 ポータル画面そのものはカスタマイズしたくなるであろう。メモリの限られた筐体で動かすことを念頭においているからか、httpページの生成はシェルスクリプトで実装されている。これは組み込まれたexampleだと思う。呼び出す実行可能なコマンドを用意することでポータル画面を自分の考えるものに差し替えることは可能のようである。

 家でわざわざこれを有効にする必要はなさそうなので、今回はここまで。

*1:単に約束守りますの「はい」するやつとか、メールアドレス打ち込ませるやつとか