時間制限付きの無料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.元に戻す
使い終わったらもとに戻す。
ミンナニハナイショダヨ
公衆無線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版の記事を参照のこと。
※もともと何か事情があってDNSサーバを固定化していたのなら、公衆無線LAN利用後に本設定を戻すのを忘れずに。
以下は余談。
公衆無線LANでインターネット接続するときのポータル表示の仕組み
初回アクセス時に強制的に公衆無線LANのポータルページを表示させるこの仕組には、「Captive Portal」という名前がついているらしい。実現方法はいくつかあるが、マックのWiFiで採用されてる製品の方式は以下の通りだった。(キャプチャ結果より)
本来の動き
- クライアントはDHCPサーバからIPアドレスとDNSサーバのアドレスを受け取って設定する。
- クライアントが任意のサイトにアクセスする。(例えば http://www.yahoo.co.jp/)
- クライアントはDNSリクエストを投げてwww.yahoo.co.jpに紐づくIPアドレスを受け取る。
- クライアントはwww.yahoo.co.jpに対してGETリクエストを発行する。
- ゲートウェイはこのGETリクエストを横取りして、クライアントにステータスコード302とリダイレクト先(公衆無線LANのポータルページ)のホスト名を返す。
- クライアントは認証ページにアクセスする。
その他の方式として、上記「3.」の時点でどんなDNSリクエストが来ても認証ポータルページへのIPアドレスを返すDNSハイジャックというやり方もある。 他にもある。 Captive portal - Wikipedia
今回の動き
- クライアントはDHCPサーバからIPアドレスとDNSサーバのアドレスを受け取る。IPは受け取った値を採用するが、DNSサーバは固定の8.8.8.8を採用。
- クライアントが任意のサイトにアクセスする。(例えば http://www.yahoo.co.jp/)
- クライアントは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
お品書き
- LINE Business Centerアカウント作成
- LINE@アカウント作成
- LINE@Manager設定
- LINE Developper設定
- サーバ準備
使用する環境
|項目|バージョン| |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