
iPadでもmacOSで言うhostsファイルをいじりたくなることがあります。ここではネームサーバーの切り替え前に自分のサーバーへアクセスしたい場合を想定し、iPadやiPhone含むiOSデバイスでhostsファイルを編集したと同等のことを「DNSCloak」なるアプリで実現してみたいと思います。
想定読者
サーバー移転時や開発段階のサーバーなどへ、ネームサーバーが切り替わる前にアクセスするためにhostsファイルを利用することがあります。同等のことをiOSデバイスやiPadで行いたい方へ向けた記事です。
使うアプリ
「iPadのhostsファイルを編集する」なんてタイトルの記事ですが、実際はそれと同等のことをアプリで実現する内容です。基本的に「DNSCloak」にhostsファイルに似た形式のファイルを読み込ませて、対象サーバーのIPアドレスを名前解決させます。


Kodexはテキストエディタです(KodexのApp内課金は投げ銭なので無料で全機能使えます)。お好みのテキストエディタがあればそちらをお使いください。UTF-8でデバイス内やiCloud上に.txt形式で保存できるものであれば問題ありません。
早速hostsファイルを書く
DNSCloakが受け付けるルールファイル(便宜上、以後“hostsファイル”と呼びます)は次の形式です。
example-test.com 111.222.333.444
注意したい点は、ご覧のようにmacOSのhostsと逆で、ドメイン名を先に記述し半角スペースを挟んでサーバーIPアドレスを記述します。この名前解決ルールは1行に1ルールずつ記述する点、macOSのhostsファイルと共通です。
では、Kodexでhostsファイルを作成し、任意のディレクトリに保存しましょう。まずはKodexを開いて“New File”をタップします。

ちなみにアプリの外観ですが、初期設定ではテーマがDarkでTintも赤色と邪悪な印象を受けたため、わたしは設定からテーマをLightに、Tintを青色に設定しています。
さて、ここへドメイン名+半角スペース+IPアドレスの形式でhostsルールを記述します。

編集を終えたら、画面左上、左から2番目の巻物アイコンをタップ、“Save Document As…”をタップします。するとファイル名入力欄が表示されるので、ここにはhosts.txtと拡張子.txt込みで入力しましょう。

今回はiCloud上のDocumentsというフォルダ直下に保存しました。

では、DNSCloakにこのhostsファイルを読み込ませてみましょう。
DNSCloakのセットアップ
初期設定
では、DNSCloakを開きましょう。

初期状態ではステータスバーにVPNアイコンが表示されない設定になっているので、画面左上のハンバーガーメニューをタップし設定画面を開き、お好みでオンデマンド接続を有効にしたり、ステータスバーへのVPNアイコン表示を有効にしたりしましょう。

hostsファイルの読み込み
続けて“Advanced options”をタップし展開して、“Enable Cloaking”下の“Pick rules file…”をタップします。するとファイル一覧が表示されるので先程作成したhostsファイルを選択します。

わたしはiCloudドライブのDocumentsフォルダ直下にhostsファイルを保存したので、それを選択しました。

すると“Enable Cloaking”がONになります。ちなみにCloakという単語は“仮面”や“偽装”といった意味を持ちます。iPadが利用するDNSを、hostsファイルのルールに則ったDNSへ偽装(切り替え)できる仕組みです。
さて、これで設定は完了です。画面左上の戻るボタンよりメイン画面へ戻りましょう。
DNSサーバーの選択
ここまでくれば後はお好みのDNSサーバーを選択するだけです。今回は“cloudflare”を使うことにします。

サーバー名をタップして、“Use this server”をタップするとVPN構成の追加許可を求められます。

“Allow(許可)”をタップすると設定画面へ飛び、端末のパスコード入力を求められます。

パスワードを入力するとVPN構成が追加されます。VPN構成は一度追加してしまえば、以後この作業は不要です。するとDNSCloakのDNSサービスが始動します。

大抵の場合、30秒から1分ほどでDNSサービスが始動しますが、バグによりずっと“Starting DNS service”のぐるぐる(ローディングインジケータ)が表示され続けることがありました。そんなときは少し(30秒くらい?)待ってから一旦“Stop”でキャンセルし、再び始動させるか、あるいは一度ホーム画面へ戻り、再度DNSCloakを開くと正常な状態になったりします。さて、無事に始動すると、DNSCloakメイン画面左上の再生ボタンが停止ボタン(四角■)に変化したり、設定に依ってはステータスバーにVPNアイコンが表示されるので、動作していることが確認できます。

これでhostsファイルの書き換えは完了です!
動作確認
DNSCloakの停止
用が済んだらDNSCloakを停止しましょう。DNSCloakメイン画面左上の停止ボタンをタップすることでDNSサービスが停止します。

これで元の状態に戻ります!再度hostsファイルを有効にしたい場合はメイン画面左上の再生ボタン(三角▶)をタップしDNSサービスを始動させるだけです。

hostsファイルを入れ替えたい場合は「(ハンバーガーメニューより)設定画面」→「Advanced options」より“Enable Cloaking”下の“Pick rules file…”をタップし、別のhostsファイルなり、新しく更新したhostsファイルを選択して、再生ボタンをタップしDNSサービスを再起動させるだけです。
DNSCloakのアンインストール
通常のアプリ同様、ホーム画面にてDNSCloakをロングプレスし、バツ印をタップで削除できます。アプリを削除することでVPN構成も削除されることを確認しました。
このように、iPadでもアプリの力を借りることでhostsファイルの編集に相当する機能を得られます。わたしは開発中のサーバーをiPadでお披露目するときに利用しました。サーバー事業者によっては動作確認用URLを提供しているところもありますが、WebアプリやCMSによるWebサイトの場合などは細部で名前解決が上手く行かないことがあり、結果不具合に繋がります。ちなみにわたしは今回の方法で問題なくお披露目会を終えることができました。DNS偽装に感謝です。
DNSCloakはいわゆるVPNアプリなのですが、GitHubにてソースコードを確認することができます。とは言え、ご利用の際はApp Storeにて、アプリのプライバシーポリシーを一読の上、同意できる方のみご利用ください。また、DNSCloakで選択するDNSサーバーも自身が信頼性を置けると判断したサーバーのみ利用するようにしてください。


