nsINativeDNSResolverOverrideで、hostsファイルを編集せずにドメインのIPアドレスを変更する方法
サーバー移転時のWebサイトの表示確認に欠かせないhostsファイルの編集。しかし、パソコンの管理者権限がなくて編集できないケースも少なくありません。
この記事では、管理者権限不要でドメインの参照先のIPアドレスを変更できる、FirefoxのnsINativeDNSResolverOverrideをご紹介します。
目次
利用にあたっての重要なルール
自身が所有・管理しているドメインおよびサーバーであること
nsINativeDNSResolverOverrideは、あくまでサーバー移転時などの動作検証のために使用するものです。第三者が所有するドメインを無断で自身の用意したサーバーに紐づけるような行為は行わないでください。
悪用厳禁(自己責任)
紹介する内容は、開発・検証を目的とした技術情報です。誤った設定や不正な目的での使用により発生したトラブルについて、当社は一切の責任を負いかねます。必ず自身の管理下にある環境で、マナーを守って実行してください。
nsINativeDNSResolverOverrideによるIPアドレスの上書き
Firefoxの機能であるnsINativeDNSResolverOverrideを使用すれば、システム全体のhostsファイルを編集するのとほぼ同等の操作がブラウザー内だけで完結します。
※ドメインとIPアドレスは例です。

IPアドレスの上書き手順
- Firefoxのプライベートウィンドウを起動します。
- Ctrl + Shift + J(Macの場合は Cmd + Shift + J)を押して、ブラウザーコンソールを開きます。
- 以下のコードのドメインとIPアドレスを任意のものに書き換え、コンソールに貼り付けてEnterを押します。
const override = Cc["@mozilla.org/network/native-dns-override;1"].getService(Ci.nsINativeDNSResolverOverride);
override.addIPOverride("example.com", "192.0.2.1");出典:test_dns_override.js – mozsearchより一部改変

このコードはFirefoxのXPCOM(クロスプラットフォーム・コンポーネント・オブジェクト・モデル)に直接アクセスし、nsINativeDNSResolverOverrideインターフェースを通じて名前解決の挙動を一時的に書き換えています。
Firefoxを再起動すればこの設定はリセットされるため、システムを汚さず安全にテストが可能です。再起動せずにリセットする場合は、下記コードをコンソールに貼り付けてEnterを押します。
override.clearOverrides();使用時に移転先サーバーにアクセスできないケース
以下の設定によっては意図した通りに移転先サーバーにアクセスできない場合があります。
ドメイン設定
移転先サーバーにドメインが設定されている必要があります。
SSL/TLSサーバー証明書
移転先サーバーにSSL/TLSサーバー証明書が設置されている必要があります。
WAFの影響
移転先サーバーのWAF設定によってはアクセスが遮断される場合があります。
サーバーサイドの通信
PHPのcURLなど、サーバー内部で完結する通信には影響しません。その場合は別途CURLOPT_RESOLVEオプションを使用するなどの対応が必要です。
Firefoxのセキュリティ設定
Firefoxの「DNS over HTTPS」が有効になっていると動作しないため、一時的にオフにする必要があります。

移転先サーバーでWebサイトを確認する他の方法の例
hostsファイルの書き換えやnsINativeDNSResolverOverrideによる上書きの他にも、管理者権限がないパソコンで移転先サーバーのWebサイトを確認する方法はあります。
サブドメインを利用する
確認専用のサブドメインを作成して移転先サーバーを割り当てれば、ブラウザーを選ばず表示確認ができます。ただし、サブドメイン用のSSL/TLSサーバー証明書が必要です。
初期ドメインを利用する
多くのレンタルサーバーでは、契約時に発行される初期ドメインが用意されています。これを利用すれば本番ドメインの切り替え前でも移転先サーバーにアクセスし、サイトの表示を確認することが可能です。
いずれの方法もソースコードにドメイン名をハードコーディングしている場合や、絶対パスを使用している箇所などは正しく動作しない可能性があるため注意が必要です。
tooolsのTech Blogではこれからも役に立つ情報を発信していきますので、定期的に閲覧していただけると幸いです。
参考:nsIServiceManager.idl – mozsearch
参考:components.conf – mozsearch
参考:nsINativeDNSResolverOverride.idl – mozsearch
参考:PHP: 定義済み定数 – Manual


