Ideal Reality

パソコンのある生活を良くするためのサイト

2019年2月26日 17時48分

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

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

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

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

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 を自動指定する

ここを参考に、デフォルトの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ページが表示されるか確認してください。

コメント

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

名前

コメント

関連する投稿

Vagrantでnginx

MyDNSでスタードメインを使用する

VagrantをMacにインストールするにはhomebrew-caskを使え