まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:dns

スタバとか、デニーズとか、マクドナルドとか、最近は(特定のキャリアと契約している前提なしで一定時間使える)無料の公衆無線 LAN が使える場所が増えてきました。

これらを使う場合、まずは無線 LAN をその SSID で普通に接続します。この時点で無線 LAN としては接続できて(IP アドレスが取得できて)いますが、まだインターネットを自由に使える状態ではありません:
2018072203


この状態でウェブブラウザを開くと、「ネットワークのログインページ」を開くボタンが表示されたり、ブラウザの種類によってはどこかのページを開こうとした際にログインページにリダイレクトされて、もう1段階の認証を行うことになります:
2018072200


スタバであればこんな感じのログインページが表示され、ここから処理を進めてインターネットに接続します(場合によってはメールアドレスやパスワードを登録する必要があるかもしれません):
2018072204



この仕組を使う中で気付いたことがあります。自分は主に2種類のノート PC を持ち歩いていて、うち1台ではこの公衆無線 LAN を問題なく使えるのですが、もう1台では「ネットワークのログインページ」へ移動するためのボタンが表示されず、かといって、そのままインターネットを使おうとしても使えない、という現象が発生するのでした:
2018072201


この現象は起こったり起こらなかったり・・・ではなく、問題ない PC では発生せず、問題のある PC では 100% 再現しました。要は「PC の設定の違い」が原因と思われる挙動の違いでした。その原因と対処法を調べたので、その備忘録を兼ねた報告です。

この現象が発生する原因が1つだけとは限らないのですが、自分のケースでの原因は「DNS 設定」でした。問題なく接続できる(ログインページが表示される)方の PC では DNS サーバーのアドレスを自動取得する設定になっていました:
2018072202


一方、接続できない方の PC ではこの部分が特定の DNS サーバーを使うよう指定されていました。具体的には 1.1.1.1 や 8.8.8.8 などの名前解決が早いことで定評のある公衆 DNS サーバーのアドレスを指定していました。自宅や会社で使うぶんにはこの設定でも問題なかったのですが、今回紹介しているような公衆無線 LAN ではこれらの IP アドレスへの接続が(ログインページを経由して認証する前には)許可されていないらしく、ゲートウェイのファイアウォールを超えることができず、結果として名前解決ができずに接続ができない、という状況になっているようでした。

したがって、この場合であれば DNS サーバーを上記のように「自動的に取得」するように設定し直します。すると、再度ウェブブラウザを起動した際にログインページへのリダイレクトボタンが表示されて、改めて認証ページを経由することでインターネットが利用できるようになりました。

1.1.1.1 や 8.8.8.8 にこんな落とし穴があったとは・・・

 

このエントリが特定の個人を揶揄する目的で作ったものではないことを最初にお断りしておきます。


ちょうど今(2016/Mar/24)話題になっている某氏の謝罪ウェブサイトを見ていて、あることに気付きました:
2016032400


このページの内容自体にどうこう言うつもりはありません。問題はこのページの URL です。http://ototake.com/ にアクセスするとこのページが表示されるようになっています。もともとはこの人のウェブページ用のサーバーだったはずだけど、トップページだけ作り変えたのでしょうか?


ではプロフィール紹介用のページ http://ototake.com/profile/ はどうなっているのか、と思ってアクセスすると、404 エラー(ページが見つからない)になりました:
2016032402


ちなみに(グーグルのキャッシュによると)以前はこんなページだったはず:
2016032403


トップページを変えただけでなく、プロフィールページも消したのか・・・ いや違う。このエラーページの内容は単なる「ページが見つからない」ではなく、"Code: NoSuchKey" とか、 "Key: profile" とか、何かをシステマチックに探した上で見つからない、というエラーに見えます。単にページ内容を入れ替えたものではなさそうです。


この謎はアドレスを逆引きして分かりました:
2016032401


なるほど、Amazon S3静的ウェブホスティング機能を使って作られたページだったようです。ということはどこかに元のページも残しつつ、DNS の切り替えだけでこの謝罪ページに飛ぶよう設定されていた、ということです。

なかなかうまい方法だと思いました。まず今回のような謝罪ページは一時的にアクセスが集中する可能性があるので、今まで使っていたウェブサーバーの中身を置き換えただけではアクセスを捌ききれる保証はありません。そこを S3 の静的ウェブホスティングにすれば比較的安価に(アカウントを新規に作れば1年間は無料で)それなりの可用性が保証されたこのページを作ることができます。 そして DNS の切り替えでこの新ページを運用しているとすれば、謝罪終了(?)後に元のページへ戻す作業も DNS を切り替え直すだけで簡単に済みますし、その後は謝罪ページも消してしまえば、それ以降の料金はかかりません。 ということは現在のサーバーを落とす必要もないので、再切り替え時の手間やトラブルも少なく済みそう、と推測されます。


このやり方はうまいなあ、と思いました。DNS の切り替えにかかるタイムラグや、各種キャッシュの切り替わりを意識する必要はあるにせよ、コスパのいい謝罪ページ運用だと感心してしまいました。もちろん謝罪用だけでなく、何らかの事情で一時的に異なるページを表示する必要が生じた場合の方策と考えても使えると思います。

S3 互換のオブジェクトストレージサービスを運用している会社にとってはビジネスの参考になります(苦笑)。


自宅サーバー派の人は、独自ドメインを所有して使っているケースも多いと思います。自分もその一人です。

自宅サーバーで独自ドメインを使う場合、その多くはダイナミック DNS を使うことになると思っています。自宅のネットワーク環境は固定 IP アドレスではなく、大抵動的 IP アドレスであり、この割当はいつ変わるかわかりません。つまり固定の DNS で一度設定しても、IP アドレスの割り当てが変わってしまうと、再度新しい設定を DNS サーバーに知らせるまでは使えなくなってしまいます。そのため DNS を固定ではなく、動的に変更する前提で対応できるよう、ダイナミック DNS サービスを使うケースが大半になります。

これまで自分はダイナミック DNS 用の専用のクライアントアプリをインストールして、自分のアカウントを設定して、それを定期的に実行するよう設定して・・・ と面倒な手続きをしていました。 が、ダイナミック DNS サービスとして MyDNS.jp を使っている場合であれば、普通に Linux の cron でコマンドを実行するだけで定期的な IP アドレス更新ができることが分かりました。


具体的にはこんな感じです:
# crontab -e

(以下の1行を追加して保存)
*/10 * * * * wget -q -O /dev/null http://(mydns.jp のマスターID):(mydns.jp のパスワード)@www.mydns.jp/login.html


MyDNS.jp のアカウント(マスターIDとパスワード)を持っていることが前提になりますが、それらの情報をセットした URL に対して10分おきに HTTP GET リクエストを発行する、という内容のコマンドを指定しています。これであっさりと繋がってしまいました。。

自分の場合は、これを自宅ネットに接続したラズベリーパイに設定しています。自宅のラズベリーパイが自宅ネットワークのダイナミック DNS を定期的に設定してくれるクライアントとしての役目を果たしている、ということになります。なかなかいいラズベリーパイの使い方だと思ってます。


以前に IBM Bluemix を独自ドメインで利用する方法について紹介しました:
IBM Bluemix を独自ドメインで運用する


本エントリでは、特に SSL を使って IBM Bluemix を独自ドメイン運用するための注意点と手順を紹介します。


まず独自ドメインを使わない場合、IBM Bluemix 上のウェブアプリケーションには米国リージョンの場合で****.mybluemix.net(英国リージョンであれば ****.eu-gb.mybluemix.net)というホスト名が割り当てられます。**** 部分はアプリケーション作成時に指定したものが使われます。 以下、説明をシンプルにするため、米国リージョンでの利用を前提として説明を続けます)。

このホスト名を SSL で利用する場合の SSL 証明書は mybluemix.net 側で(つまり IBM 側で)用意されていることになります。特に **** 部分にどのような文字列が来るか想定できない前提で SSL を使うので、その証明書はワイルドカード対応のものが用意されている、ということになります。


さて、独自ドメインで IBM Bluemix を使う場合の注意点として、そのドメインの SSL 証明書は利用者が用意する必要があり、加えて上記の理由からその証明書はワイルドカード対応のものを用意する必要がある、ということになります。

現在、SSL 証明書を発行してくれるサービスは国内外でいくつかあります。ただ IBM Bluemix で利用するドメインの SSL 証明書を発行してもらうためには、ワイルドカード対応のものを発行してもらう必要があるのですが、全ての業者がワイルドカード対応の証明書を発行してくれるわけではありませんワイルドカード対応の SSL 証明書を発行してくれる業者の中から選んで注文する、という点に注意が必要です。


ただ、特定の限られた用途での利用など、いわゆる「オレオレ証明書」でもいい、という場合は、自分でワイルドカードに対応した SSL 証明書を用意することでも対応は可能です。ワイルドカードに対応した SSL 証明書を自分で発行する場合の手順はこちらを参照してください:
ワイルドなオレの証明

以下はこの方法で用意した SSL 鍵および証明書を使った前提で紹介を続けます(手順そのものは正式な証明書を使った場合も同様です)。

まず冒頭で紹介した「IBM Bluemix を独自ドメインで運用する」の手順を進めて、「組織の管理」メニューからドメインの追加を行います:
2015030601


追加する独自ドメイン(この例では "yellomix.net")を指定して「保存」します:
2015030602


保存後、「SSL 証明書」と書かれた列に証明書アップロードのためのボタンが表示されるので、ここをクリックします:
2015030603


証明書ファイルと秘密鍵ファイルを指定してアップロードします。もし中間証明書ファイルをお持ちで、追加したい場合は中間証明書ファイルも指定します。最後に「アップロード」ボタンをクリックします:
2015030604


先ほどのボタンがグリーンに変わっていれば証明書ファイルのアップロードは完了です:
2015030605


では独自ドメインでアプリケーション・サーバーを1つ作成して、SSL でアクセスする、という動作確認を行ってみます。まずは Bluemix 上に(動作確認なので中身はあってもなくてもいいと思いますが)ランタイムまたはボイラープレートから作成したランタイムを作ります。その際にドメイン情報として、追加した独自ドメインを指定するようにします:
2015030606


ランタイムアプリケーションを作成すると、経路の情報としてホスト名が表示されます。先ほど独自ドメインを指定したので独自ドメインにアプリ名が付与されたホスト名になっているはずです:
2015030607


DNS 側でもこのホスト名の名前解決ができるような設定をしておきます。このランタイムに付けた名前(dotnsf-ibm-wordpress)の CNAME として、元々デフォルトで割り振られるはずだった名前(dotnsf-ibm-wordpress.mybluemix.net)を参照するように指定します。この部分は各々でお使いの DNS ツールの方法に従ってください:
2015030608


これで設定は完了しています。確認のため実際にブラウザを使って、作成したランタイムのホスト名に対して https:// でアクセスしてみましょう。オレオレ証明書を使った場合は、ブラウザの種類にもよりますが、「接続の安全性を確認できない」云々、といった確認画面になると思います。ある意味、正しく SSL が動いている証拠と言えます:
2015030609


理解した上で許可すれば SSL で(httpsで)見れるようになります。このホスト名を直接指定した形では SSL 証明書を作っていませんでしたが、ワイルドカード指定で作成した SSL 証明書が IBM Bluemix に正しくインポートされて動いていることが確認できました:
2015030610





















 

IBM Bluemix を使ってアプリケーションサーバーを立ち上げると、そのアプリケーションの URL は
 http://(アプリケーション名).ng.mybluemix.net/ (USリージョンの場合)
 http://(アプリケーション名).eu-gb.mybluemix.net/ (EUリージョンの場合)
となります(アプリケーション名の部分は作成時に付けた一意の名前)。

自分でドメインを管理しなくても、このようなサブドメインが用意されていて、すぐに公開できる、ということになります。これはこれで便利ですが、実際の運用時になると会社などで取得した独自のドメインを使って、
 http://(アプリケーション名).yourdomainname.jp/
のような URL で運用したい、ということもあると思います。

もちろんホスト名と IP アドレスの関係だけであれば DNS 側の設定で済むのですが、アプリケーションサーバー自身に自分のホスト名が変わったことを理解させる必要があるケースもあります。 IBM Bluemix はそのような設定もできるようになっているので、その手順を紹介します。

例として、僕が個人で取得している yellowmix.net というドメインを使って Bluemix 上のアプリケーションを稼働させてみます。


まず、Bluemix 上で追加したい独自ドメインをシステムに知らせる必要があります。ダッシュボード画面の左上で組織アイコンをクリックし、「組織の管理」を選択します:
2015020201


組織の管理画面が表示されたら「ドメイン」タブを選択します。現在システムで管理しているドメイン(この例では eu-gb.mybluemix.net)が表示されるので、「ドメインの追加」ボタンをクリックして新しいドメインを追加します:
2015020202


ここで自分が取得しているドメイン(この例では "yellowmix.net")をキーボード入力で指定して追加します。最後に「保存」ボタンをクリックします:
2015020203


"yellomix.net" ドメインがシステムドメインとして追加されました:
2015020204


続いて、Bluemix 上のアプリケーションサーバーにこのドメインを使ったホスト名によるルーティングを指定します。アプリケーションを1つ選択し、現在の経路が書かれている右側の鉛筆アイコンをクリックします:
2015020205


経路の編集ダイアログが表示されます。今回は新たな経路を追加したいので「経路の追加」をクリックします:
2015020206


新しい行が追加されるので、新しい経路のホスト名を入力し、続いてドメインを選択肢から選びます。先程 "yellowmix.net" ドメインを追加しているので、選択肢の1つとして表示されるはずです。最後に「保存」ボタンで保存します:
2015020207


1つ前の画面に戻り、新しい経路が追加されたことが確認できます:
2015020208


ここまでの作業で Bluemix サーバー側の設定は完了しました。最後に DNS 側に cname 値を追加します。ここでの作業はドメインを取得した際の DNS 業者によって設定方法は異なりますが、以下は GoDaddy.com での例です。CNAME 値として先程設定したホスト名を追加し、その接続先を元の ****.eu-ng.mybluemix.net に指定して保存しています:
2015020209


これで全ての作業が完了しました。独自ドメインを使った URL で元のアプリケーションにアクセスできるようになりました:
2015020210









 

このページのトップヘ