1. トップ
  2. 新着ニュース
  3. IT
  4. IT総合

Windows上でhostsファイルを活用する

ASCII.jp / 2024年11月17日 10時0分

今のWindowsでも使うことができるhostsファイル

 80年代後半、TCP/IPを使うコンピュータでは、LAN内のマシンのIPアドレスとホスト名を記述したhostsファイルを使って、LAN内のホストの「名前解決」をしていた。ドメイン名システムは存在していたが、インターネット側に公開するホストの名前解決のみをして、LAN内でのみ使われるホストの名前解決には使われていなかった。

 実用面から言えば、追加されるホストが必ずしも何らかのサービスを提供しているわけではないので、1週間程度の周期でhostsファイルを更新しても大きな問題は無かった。

 このhostsファイルは、現在のWindows 11でも有効である。hostsファイルを使うことで、起動直後から名前解決ができるなどのメリットがあるからだ。

 なぜ今更hostsファイルなのかというと、IPoEで割り当てられたグローバルアドレスを、外出先で名前解決するのにhostsファイルが利用できるからだ。更新の頻度が高くないので、hostsファイルを作って、各マシンにコピーすれば、外出先からOpenSSHなどを使って、自宅マシンにアクセスできる。今回はこの利用方法に即してhostsファイルを解説する。

hostsファイルを編集する

 hostsファイルは、Windows 11では「c:\windows\System32\drivers\etc\」にある。デフォルトでは、localhostぐらいしか登録されていないが、Docker Desktopをインストールすると、関連のホストが登録されることがある。ここにLAN内のホストのIPv6アドレスを登録しておく。ホスト名はWindowsと同じものにせず、後ろに「v6」を付けるなど、対象ホスト名から容易に推測できるものにしておく。

 Windowsと同じホスト名を付けてしまうと、LAN内でのWindowsの名前解決が混乱してしまう。hostsファイルの目的は、外出先など、自宅のLANに接続していないときに、OpenSSHなどの宛先ホストの名前解決をするためだ。なので、覚えやすい名前であれば構わない。なお、hostsファイルでは、1つのIPアドレスに複数のホスト名(ホスト名のエイリアス)をつけて構わない。

 hostsファイルでは、1行で1つのIPアドレスとホスト名を対応させる。具体的には、

IPアドレス␣ホスト名

という行を追加することでホスト名とIPアドレスが登録できる。IPv6アドレスを使うなら、

2001:0db8:c4aa:c86:2180:97a9:10ba:8596 myhostv6 myhostaliasv6

などとする。IPアドレスの後ろは、スペースでホスト名を区切るが、タブでも複数のスペースでも構わない。また、ホスト名の後ろにスペースで区切って、ホストの別名(エイリアス)を定義することもできる。どちらの名前でも指定したIPアドレスで名前解決がされる。

 なお、PowerToysには、hostsファイルエディターがある。入力の手間は普通に入力するのと大きく違うわけではないが、トグルスイッチを使ってのエントリの無効化(注釈化)ができるなどのメリットがある。

hosts
PowerToysのHosts File Editor(左上のウィンドウ)と、Windowsのhostsファイル(右下ターミナルウィンドウ)。hostsファイルはテキスト型式だが、Hosts File Editorを使うことで、Windowsが正しく受け入れるhostsファイルにできる

 各ホストでのIPv6アドレスを調べる方法は、ipconfig.exeの出力を見るか、過去記事(「Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法」)を参考にしてほしい。

Windowsでのhostsファイルの扱い

 hostsファイルは、起動時に読み込まれて、WindowsのDNSキャッシュに入る。これにより、Windows内での名前解決にhostsの情報が使われる。その状態を見るには、

ipconfig /displaydns

とする。

 hostsファイルを書き換えたあとは、Windowsを再起動してもいいが、DNSキャッシュをフラッシュして、再度登録することもできる。その場合は

ipconfig.exe /flush ipconfig.exe /registerdns

とする。

hostsファイルで発生するトラブル

 前述したように、hostsファイルは、DNSキャッシュに読み込まれてWindowsの名前解決に使われるため、名前解決が可能なホスト、たとえばルーターのDHCPで固定割り当てしたようなホスト名は、hostsファイルには含めない。hostsファイルを使うと、IPv4でアクセスができないアプリが出てきたなどのトラブル原因は大抵これである。

 また、IPv6アドレスがグローバルであっても、一般的にはルーター側のパケットフィルタを解除しないと、インターネット側からのアクセスは不可能である。解除方法は、ルーターのメーカー・機種ごとに異なるが、最近の製品であれば、管理用Webページから「パケットフィルタ」などの名称で、特定のポートに対してのパケット通過ルールを定義できるはずだ。

 たとえばssh(ポート番号は22)に対して、パケットの通過を定義するなら、プロトコルとしては「TCP」、送信元アドレス、送信元ポートは「任意/Any」、宛先アドレスも「任意/Any」として、宛先ポートとして「22」を指定したフィルタを追加する。

 これで、外出先からhostsファイルに定義したホスト名を使って自宅マシンへのssh接続などが可能になるはずだ。ただし、外出先で接続したネットワークがIPv6をサポートしていないと、接続は不可能だ。

 スマートフォンのテザリング経由で接続した場合はIPv6をサポートしていることが多い(MVNOでは非対応のサービスもある)。しかし、Wi-Fiホットスポットなどのサービスでは、IPv4のみということも少なくない。あらかじめIPv6での接続ができるか確認しておくといいだろう。

 hostsファイルによる名前解決は簡単に定義でき、変更もファイルを編集するだけだ。利用のポイントは、ホスト名などをLAN内と同じにしないこと。hostsファイルによる名前解決は、あくまでもIPv6の長いアドレスを名前(文字列)で扱えるようにするものだ。

 通常、Windowsとルーターで、LAN内で必要な名前解決ができる。しかし、異なるホスト名をhostsファイル内で使うことで、LAN内の名前解決に影響せず、外出先で利用できるIPv6アドレスの名前を使うことが可能だ。

この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください