Ideal Reality

興味の赴くままに

VagrantのWebサーバーをmDNSでLAN内からアクセスできるようにしてみた

Webサーバーと通信するスマホアプリの開発をしようと思ってVagrantでWebサーバーを構築していた。

LAN内の開発用スマホからそのサーバーにアクセスするのにmDNSを使えたら、Vagrantを動作させるパソコンが変わってもスマホ側のコードを修正せずに済むと思ってmDNSを使ってみることにした。

この記事はcentos/7のboxから生成した仮想マシン前提です。

Contents
スポンサーリンク

mDNSってなに?

macを複数台持ってる人なら知っているであろう、IPアドレスを入力せずとも[ホスト名].localで名前解決してLAN内のパソコンにアクセスできるようにするサービスのこと。

これを使えばローカルDNSサーバーを用意しなくてもLAN内のパソコンを名前解決できるようになる。

このように専用のサーバーなどを用意せずにIPネットワークを自動で構築するサービスのことをZeroconfというらしい。詳しくはWikipediaで見てくれ。

Zeroconf - Wikipedia

AppleのBonjourで使われており、iTunesをインストールすればWindowsでも使えるようになるので比較的利用しやすく、しかもWindows 10からは標準でmDNSに対応してiTunesのインストールも必要なくなったので使いやすい。

ただ、問題はAndroidが対応していないことで、Androidで名前解決するには素直にDNSサーバーを立てる必要があるのでご注意を。

ブリッジネットワークの設定

LAN内のデバイスからアクセスするには仮想マシンのネットワーク設定をNATではなくブリッジにする必要があります。

Vagrant の bridge にホストマシンのデフォルトルートの NIC を自動指定する

VirtualBox on OS X にて Vagrant で複数 VM を起動するとき、public_network を使っていると毎度ブリッジインタフェースの選択が面倒です。 各 VM の起動時に都度選択画面が出るので、全台起動するまでターミナルに張り付いていないといけません。...

ここを参考に、デフォルトのNICをブリッジさせるようにVagrantfileを設定します。

VagrantfileのVagrant.configure("2") do |config|からendまでの間のどこかに

bridge_if = %x(VBoxManage list bridgedifs | grep '^Name:' | head -n 1).chomp.sub(/^Name: +/, "")
config.vm.network "public_network", bridge: bridge_if, use_dhcp_assigned_default_route: true

を追記します。保存したら

$ vagrant reload

で仮想マシンを再起動してください。

スポンサーリンク

hostnameの設定

ゲストOSに設定されているホスト名を使って、 (ホスト名).localのドメイン名でアクセスすることになります。

centos/7の標準だとlocalhost.localdomainになってるので、これを好きなものに変更します。

ゲストOS上のターミナルで以下のコマンドを実行します。

[vagrant@localhost ~]$ sudo hostnamectl set-hostname (ホスト名)

例えば、"webserver.local"でアクセスしたかったら、

[vagrant@localhost ~]$ sudo hostnamectl set-hostname webserver

と実行します。

あとは、一旦exitでセッションを閉じてから、再度vagrant sshでログインすればホスト名が変更されています。

avahiのインストール

avahiは、linuxでmDNSを扱ってくれる便利なソフトです。

ゲストOS上のターミナルで

[vagrant@localhost ~]$ sudo yum install -y avahi

を実行して、

[vagrant@localhost ~]$ sudo systemctl start avahi-daemon
[vagrant@localhost ~]$ sudo systemctl enable avahi-daemon

で起動・有効化します。

スポンサーリンク

接続テスト

これでpingとか通るはずです。

ping (ホスト名).local

あとは、ゲストOSでwebサーバーを動作させているなら、同じLAN内のパソコンやスマホのブラウザから"http://(ホスト名).local"にアクセスしてwebページが表示されるか確認してください。

スポンサーリンク

コメント

投稿されたコメントはありません

名前

メールアドレス(任意)

コメント

関連する投稿
NO IMAGE

MyDNSでLet’s Encryptのワイルドカード証明書を自動更新する

Vagrantでnginx