時間制限付きの無料Wi-Fiであともう少しだけ粘りたいときのためのメモ

Mac OSの場合

 接続済み端末の識別というのは大概MACアドレスでやっているので、これを変更してしまえば新規端末として認識される。 でも、コーヒー一杯で何時間も粘るのはやめましょう。

手順は以下。

1.本来のMACアドレスを控える

$ ifconfig > ifconfig_YYMMDD.txt

2.airport -zコマンドで無線LAN I/FをNWからdisassociateする

$ sudo /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -z

3.MACアドレスをXXする

指定する値は全くテキトーで構わない。

sudo ifconfig en0 ether XX:XX:XX:XX:XX:XX

4.認識させる

$ networksetup -detectnewhardware

5.変更結果確認

$ ifconfig

6.無線LAN接続

自動的にされる。

7.元に戻す

使い終わったらもとに戻す。

・参考 takuya-1st.hatenablog.jp

ミンナニハナイショダヨ

公衆無線LAN(フリーWi-Fi)に接続できない。認証ページが表示されない件。(Mac)

 最近、マックやコメダなど、飲食店で提供しているフリーWi-Fiに接続できないことに気付いた。 接続できないってのはWiFiにはつながるんだけど、最初の認証ページが表示されないって状態。

同じ境遇の人のために、原因と対策を書いた。

現象

公衆無線LAN(フリーWi-Fi)に接続できない。 認証ページが表示されない。

確認したこと

1.アクセスポイント(=無線LANルータ)には接続できている
2.IPアドレスは取得できている
3.インターネットにアクセスできない
→ブラウザを開いてテキトーなページにアクセスすると、待たされた挙句、エラーページが表示される。すなわち、インターネットアクセス時に最初に表示されるはずのページ(規約が書いてあったり、認証を求められたりする例のページ)にリダイレクトされない。

以上に当てはまれば、DNS設定に関する問題である可能性が高いので以下の「対処方法」の項を参照されたい。

原因

 結論としては、DNS設定で「8.8.8.8(固定)」を指定していたことが原因だった。 この状態で任意のwebサイトにアクセスすると、そのサイトの名前解決を行うために、8.8.8.8へDNSリクエストを送ろうとする。ところがこの通信は(少なくともフリーWi-Fiのインターネットアクセス認証前には)許可されていないため、ゲートウェイで落とされる。

対処方法

固定で指定しているDNSサーバの設定を削除し、DHCPで自動的に割り当てられるDNSサーバを採用すればよい。
以下はMacの場合の手順。Windowsをご利用の方はWindows10版の記事を参照のこと。

  1. 画面右上メニューの扇形をしたWi-Fiアイコンをクリック
    f:id:cateching:20170103160216p:plain

  2. 「ネットワーク環境設定を開く…」をクリック
    f:id:cateching:20170103160223p:plain

  3. Wi-Fi」を選択して「詳細」をクリック f:id:cateching:20170103160237p:plain

  4. DNS」タブをクリック f:id:cateching:20170103160515p:plain

  5. DNSサーバのIPアドレス(以下の例では8.8.8.8)を選択して、「−」ボタンをクリック。(削除) f:id:cateching:20170103160753p:plain

  6. DHCPで配布されたDNSサーバのIPアドレスが設定されていることを確認して、「OK」ボタンをクリック f:id:cateching:20170103160653p:plain

※もともと何か事情があってDNSサーバを固定化していたのなら、公衆無線LAN利用後に本設定を戻すのを忘れずに。

以下は余談。

公衆無線LANでインターネット接続するときのポータル表示の仕組み

 初回アクセス時に強制的に公衆無線LANのポータルページを表示させるこの仕組には、「Captive Portal」という名前がついているらしい。実現方法はいくつかあるが、マックのWiFiで採用されてる製品の方式は以下の通りだった。(キャプチャ結果より)

本来の動き

  1. クライアントはDHCPサーバからIPアドレスDNSサーバのアドレスを受け取って設定する。
  2. クライアントが任意のサイトにアクセスする。(例えば http://www.yahoo.co.jp/
  3. クライアントはDNSリクエストを投げてwww.yahoo.co.jpに紐づくIPアドレスを受け取る。
  4. クライアントはwww.yahoo.co.jpに対してGETリクエストを発行する。
  5. ゲートウェイはこのGETリクエストを横取りして、クライアントにステータスコード302とリダイレクト先(公衆無線LANのポータルページ)のホスト名を返す。
  6. クライアントは認証ページにアクセスする。

その他の方式として、上記「3.」の時点でどんなDNSリクエストが来ても認証ポータルページへのIPアドレスを返すDNSハイジャックというやり方もある。 他にもある。 Captive portal - Wikipedia

今回の動き

  1. クライアントはDHCPサーバからIPアドレスDNSサーバのアドレスを受け取る。IPは受け取った値を採用するが、DNSサーバは固定の8.8.8.8を採用。
  2. クライアントが任意のサイトにアクセスする。(例えば http://www.yahoo.co.jp/
  3. クライアントは8.8.8.8に対してDNSリクエス
    →応答なし、終わり
    →URLを入力するとまずDNSリクエストを投げちゃうので、そもそも初期ページにリダイレクトされない。

DNSリクエストが通らないのであれば…ということでテキトーなIPアドレス(XXX.XXX.XXX.XXX)をブラウザのアドレスバーに打ち込みアクセスしてみた。
この場合、DNSリクエストを投げる必要が無いので、想定通りHTTPリクエストが発行される。

GET /
Host: XXX.XXX.XXX.XXX
302 Found
Location: http://10.4.0.1/index.php?http://XXX.XXX.XXX.XXX/  

→リダイレクト

GET /index.php?http://XXX.XXX.XXX.XXX/ 
Host: 10.4.0.1
302 Found
Location: http://mdj-service-select.internal/ServiceSelect.html?mac=NN:NN:NN:NN:NN:NN&griffasid=XXXX-XX-XXNN  

→mdi-service-select.internalをDNSリクエス
 →結局DNSリクエストが通らなくてここで止まる。

LINE Messaging API

お品書き

  1. LINE Business Centerアカウント作成
  2. LINE@アカウント作成
  3. LINE@Manager設定
  4. LINE Developper設定
  5. サーバ準備
    1. サーバのFW設定(httpsをaccept)
    2. SSLリバプロ設定(nginx)
    3. AP作成(ruby + sinatra)

使用する環境

|項目|バージョン| |OS|CentOS 7.0| |nginx|1.10|


5.1 サーバのFW設定(httpsをaccept)

$ sudo firewall-cmd --add-port=443/tcp --zone=public --permanent
$ sudo firewall-cmd --reload

設定を確認。portsに443が表示されていればOK

$ firewall-cmd --list-all --zone=public

5.2 SSLリバプロ設定(nginx)

証明書の準備

nginx SSL設定

nginx+OpenSSL:SSLサーバ証明書の設定 | CSP SSL

nginx リバプロ設定

Why isn't my Sinatra app working with SSL? (Ruby) - Codedump.io
nginx で SSL解きリバースプロキシな設定のお作法 - Qiita

確認

設定値確認

$ sudo nginx -t

再起動

$ sudo systemctl restart nginx

状態確認

$ sudo systemctl status nginx

5.3 AP作成(ruby + sinatra)

bundle init
vim GEMFILE
source "https://rubygems.org"

gem 'sinatra'
gem 'line-bot-api'
require 'sinatra'

set :environment, :production

get '/' do
    'test'
end

・サーバ起動

$ ruby main.rb

7. 動作確認

ーーー

参考

ハッカソンのスライド

Line messaging api ハンズオン資料 ver1.2

LINE API Reference

bot sinatraの例

blog.engineer.adways.net