ARCHIVESDRIVE HB

オイラはホームベーカリー!

vagrant で追加した環境から名前解決できないなった

bash 環境の検証用に CentOS7 の環境を新しく用意したら、名前解決できなくて yum コマンドがことごとく死んだ話。

ロケ地

結論を先に

Vagrantfile に以下を記述する。 すでに vb.gui などの記述で config.vm_provider を記述してある場合は、同じブロックに追記で良いです。

config.vm.provider :virtualbox do |vb|
  vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
  vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
end

yum コマンド実行時にエラー

vagrant init centos/7 のちに vagrant up すると、起動時に良きように yum 実行してくれるようになり幾星霜、いかがお過ごしでしょうか。 エラー的には以下のようなものが出力されます。

[user@localhost ~]$ vagrant up

#snip#

14: PYCURL ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'"

#snip#

おーん名前解決できとらんやんけ? ということで VM 自体の起動は出来ているので、そのまま vagrant ssh で仮想環境へログインして ping www.google.co.jp などしてみるも反応なし。 ping 8.8.8.8 には応答があるので、 nmtui で eth0 の DNS8.8.8.8 に設定後、systemctl restart network するも、引き続き名前解決できず。

このあたりでググりだしたのですが、

  • /etc/resolv.conf を直接編集して service network restart
  • /etc/sysconfig/network-scripts/ifcfg-* (自分の環境で設定されている eth ) を直接編集して service network restart と、 NetworkManager 停止と自動起動の OFF
  • /etc/nsswitch.conf 内の hosts:dns 記述を追加

あたりの記述がほとんどで、どれも解決しないし nm 系コマンドを利用せずに修正するのもアレじゃねえの? となって「うーん?」となってしまった。 ので、順番につぶしていくかという発想になり、まず Vagrant をバージョンアップしました。

Vagrant のバージョンアップ

2.2.1 -> 2.2.10 にアップデートしました。 公式サイトから dmg ダウンロードしてきてインストールするだけでバージョンアップ終了です。 なおバージョンアップ後に以下のエラーが出たので、メッセージに従ってぷらぎんを再インストールしています。

[user@localhost ~]$ vagrant up
Vagrant failed to initialize at a very early stage:

The plugins failed to initialize correctly. This may be due to manual
modifications made within the Vagrant home directory. Vagrant can
attempt to automatically correct this issue by running:

  vagrant plugin repair

If Vagrant was recently updated, this error may be due to incompatible
versions of dependencies. To fix this problem please remove and re-install
all plugins. Vagrant can attempt to do this automatically by running:

  vagrant plugin expunge --reinstall

Or you may want to try updating the installed plugins to their latest
versions:

  vagrant plugin update

Error message given during initialization: Unable to resolve dependency: user requested 'vagrant-vbguest (= 0.24.0)'

[user@localhost ~]$ vagrant plugin expunge --reinstall

This command permanently deletes all currently installed user plugins. It
should only be used when a repair command is unable to properly fix the
system.

Continue? [N]: y

All user installed plugins have been removed from this Vagrant environment!

Vagrant will now attempt to reinstall user plugins that were removed.
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Fetching micromachine-3.0.0.gem
Fetching vagrant-vbguest-0.26.0.gem
Installed the plugin 'vagrant-vbguest (0.26.0)'!

解決しないので Vagrant の Box を変えてみる

作業後に再び vagrant init cntos/7 実施してみましたが、エラー出力が変わらないため Vagrant の問題ではなく VirtualBox か仮想環境そのものが残りの原因となります。 ので、手軽に検証できる仮想環境から疑うことにして、別 Box であり同じく yum を使う AmazonLinux2 を利用してみました。

が、ダメッ……! yum の問い合わせ失敗するの変わらず! ということで、根本的に VirtualBox がなんかダメそう、というコトになりました。

ここ 2, 3 ヶ月でルータ変更した

使ってたルータを NEC から Buffalo に変更したなあ (ログが見えないのとオンラインアップデートで、ソシャゲで問題が出て切り分け出来なくてキレてしまった)、と思いネットワークの食い合わせか? とも思っていたのですが。

そういえば NAT 使ってるよな

ということで、 vagrant virtualbox NAT 名前解決 などで検索した所、以下の記事にたどり着きました。 いやーありがてえ!

blog.s21g.com

注意点として、 --natdnshostresolver1 だけだと解決しないので、 --natdnsproxy1 も記述する必要があります (片方しか記述してないサイトもいくつかあったので、 VirtualBox のバージョンで差異があるのやもしれぬ)。 環境によるのかもしれないですが、少なくとも僕の環境ではそうだったのでうまいこと行かない人は確認してみてください。

2020/11/09 追記

既存の環境も名前解決できないなってたので全部同じような設定書いて回避した。 ここしばらくアップデート適用もしてないし何が原因だこれ……。