Linuxサーバー(実機orVM)にDNSやhostsファイルを使わずにホスト名でアクセスする(開発のプロならではの工夫！)

<div align="center">
  <a href="http://bit.ly/cyginst"><img width="426" height="67" src="https://raw.githubusercontent.com/javacommons/qiita/master/jc-banner-2017-0419-0240.gif" /></a>
</div>

<hr />

Linuxサーバーを立てて開発用Webサーバー等として運用することがありますよね。
その際に、そのLinuxサーバーのホスト名によるアドレス解決をここで紹介するある方法で行うことがよくあります。

主に、開発用の端末としてWindowsマシンを使う現場でのことです。そこでは「NetBIOS over TCP/IP」という技術を用いています。昔からある、WindowsマシンがLAN内の他のWindowsマシンを見つけたり接続(アクセス)したりするための技術です。

Linuxのディストリビューションによって微妙に設定方法(コマンド等)が異なりますので、Ubuntu 16.04 LTSを例にとって手順等をご紹介します。尚、Windows OSのバージョンはWindows10を例にとって紹介します。

尚、このサンプルで用いるLinux(Ubuntu 16.04 LTS)マシンのホスト名は「ubuntu-desktop」とします。

# Linux側の設定(サーバー側)
「apt-get install samba」というコマンドを用いてSambaをインストールします。(Ubuntu 16.04 LTSの場合)

- ファイルおよびプリンタの共有は(するなら設定しても良いですが)しないので、Sambaの設定ファイルは一切いじりません。
- インストールしたら(念のため)Linuxマシンをリブートします。

```shell-session
owner@ubuntu-desktop:~$ sudo su
[sudo] owner のパスワード: 
root@ubuntu-desktop:/home/owner# apt-get -y install samba
root@ubuntu-desktop:/home/owner# reboot
```

# Windows側の設定(クライアント側)

エクスプローラーの左側のフォルダー一覧から「ネットワーク」を選択します。

- NetBIOSでホストを探索できるようにします。「ネットワーク」を開いた時に、「ネットワーク探索とファイル共有が無効になっています。・・・」というメッセージが表示されたら、そのメッセージの部分をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/140610/62ee96e7-1d28-e24e-08a3-06818add2caa.png)

- 「ネットワーク探索とファイル共有の有効化」をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/140610/1137a096-c146-b8ab-aff1-0bfbe130db8b.png)

- 「いいえ、接続しているネットワークをプライベートネットワークにします」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/140610/77b5d950-5331-8689-fc5b-d33ba2aee926.png)

- 探索が始まります。しばらく待ちます。「WIN10」という名前で見えているのが自分のWindows10端末です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/140610/e42fecd0-9fc7-e916-a9ab-a4116780fa40.png)

- 「UBUNTU-DESKTOP」というマシンが見つかりました。これがSambaをインストールして再起動したLinux(Ubuntu 16.04 LTS)マシンです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/140610/fae0f41e-3ad7-f332-3beb-cddacac36507.png)

このような手順で、Linuxマシンをエクスプローラー(のネットワーク)で見つけることができたら接続準備完了です。
この手順は一度行ったら再度行う必要はありません。

# 接続(確認)テスト

- コマンドプロンプトを開いて「ping ubuntu-desktop」を実行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/140610/0d4a9925-2816-0fc0-9cc8-bf2a295d6938.png)

# Cygwinからでも名前解決できます

- Linuxマシンに(ここでは手順の紹介はしませんが)telnetサーバー(telnetd)をインストールすれば、Cygwinのtelnet等で接続してコマンドを実行することもできます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/140610/5719fa60-d092-2bfc-7886-0602418c8c90.png)

# 実際の応用

実を言うと、今回用いた「ubuntu-desktop」は、「win10」(Windows10 64bit)端末上のVMware Workstation 12(または、VMware Player 12)上で実行された仮想マシン(ゲストOS)でした。(SambaをインストールしているLinuxマシンであれば、実マシンでも同じ手順で接続できます)

通常、ゲストOSに、ホスト名を用いてアクセスしようとすると、ホストファイル(Cygwinの「/etc/hosts」やWindowsの「C:\Windows\System32\drivers\etc\hosts」)にエントリーを登録したり、DNSサーバーに登録する必要があり、設定が面倒でしたが、この方法であれば、そのような手順なしにホスト名によるアクセスが可能となります。

開発用のWebサーバー、FTPサーバーをこの方法を用いて立てることで、サーバーが増える(または減る)度に「名前解決のための設定」をいじくる必要がなくなります。開発端末にWindowsをメインで用いている現場では、このやり方を採用している所が多いです。

# 最後に

- 当然、固定的に長期にわたって用いられるサーバーはDNSに登録したり、端末側のホスト名設定ファイルに登録するというやり方も併用されています。(そのようなLinuxサーバーにはSambaのインストールは不要です)

- 自分のWindows10マシン上に、VMwareやVirtualBoxを用いてLinuxゲストOSを実行していて、開発用Webサーバー等にしている場合は、このようにSambaを入れるだけで、Windows10側のブラウザから「`http://ubuntu-desktop`」のように、(ホスト名設定ファイルをいじることなしに)アクセスできます。「NAT←→ブリッジ」を変更したり、ホストマシンを移動したりしても何もせずに、LinuxゲストOSのホスト名でアクセスできます。

このテクニックを知って、開発環境構築と開発用サーバーマシンのアドレス管理をもっと簡単にしてしまいましょう！

<table height="400" width="600"><tr><td>
😲<b>セーラームーン / ムーンライト伝説 (ユーロビート)ver.</b>
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">セーラームーン / ムーンライト伝説 (ユーロビート)ver.<a href="https://t.co/o91qCKNtAW">https://t.co/o91qCKNtAW</a></p>&mdash; JavaCommons (@javacommons) <a href="https://twitter.com/javacommons/status/849831235933224960">2017年4月6日</a></blockquote>
</td></tr></table>