きつねたぬきだし

ちょっとしたメモ代わりに。

VirtualBox でクローンの MAC Address を変えたい。

いっぱい山ほど環境を作っていろんな技術を試したい時、 やっぱり仮想化環境を使うと思います。

VirtualBox は気軽に使えて便利です。

一個インストールしたら、あとはクローンを作ると楽です。

実は充実した CLi もあって良いです。

MAC Address がぶつかる

作ったクローンを同じネットワークに接続して動かそうとした時、 MAC Address が衝突してしまい、片方は接続できないという問題が生じました。

VirtualBox には MAC Address を変更するチェックボックスが用意されているのですが、 ゲスト OS 側のファイルに変更前の MAC Address が書かれているので、 ゲスト OS の内と外が不整合になってしまいます。

設定

最初はいちいち MAC Address を合うように書き換えていました。 そのうち面倒になったので、 MAC Address を参照しなくて済むように変更しました。

「オフラインでも使いたい」ので、 Host-only + NAT にします。ブリッジ接続は任意にします。

  • eth0 Host-only Adapter (PCnet-Fast III)
  • eth1 NAT (Intel PRO/1000 MT Server)

後に modprobe でドライバを読み込む順序を固定化するため、 わざわざ違うアダプタにしています。 冗長なやり方のような気がします。

netinstall だとインストール時に NAT の方から取得するので、 上の構成だと最初に ifconfig したときは eth1 だけ見える感じです。 とりあえず eth0 をブート時から有効にします。

vi /etc/sysconfig/network-scripts/ifcfg-eth0

の ONBOOT を yes にします。

一応、ドライバを確認します。

$ ethtool -i eth0 | head -n 1 | cut -d' ' -f2
pcnet32
$ ethtool -i eth1 | head -n 1 | cut -d' ' -f2
e1000

確認時には ethtool -i インターフェース名 を使いました。

あとは modprobe にお任せします。

$ echo 'modprobe pcnet32' >> /etc/networks
$ echo 'modprobe e1000' >> /etc/networks

でOK。

ここまでが 「 MAC Address に依らないため」の設定です。 以下からは「 MAC Address の参照を取り除く」設定です。

/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/udev/rules.d/70-persistent-net.rules

内には MAC Address を含む行があります。 行ごとコメントアウトします。 あるいは消します。

/etc/udev/write_net_rules

write_net_rules が 70-persistent-net.rules の内容を生成しています。 write_net_rules の冒頭で exit 0 するように書き換えます。

以上で、 MAC Address を何度リセットしても、 起動時に意図どおりのネットワーク設定になります。

再起動するか、

$ udevadm control --reload-rules
$ /etc/init.d/network restart

が必要です。 どうせクローンを取るので shutdown -h now しました。

他に

SSH でつなぐ時、 仮想マシン名から IP アドレスがわかると楽です。

  • vboxnet0 をスキャンして、アクティブな IP Address のリスト
  • MAC Address → IP Address
  • VirtualBox仮想マシン名 → MAC Address。

の 3 つを組み合わせるシェルスクリプトを書いて、 仮想マシン名 → IP Address を実現しています。

明らかに効率が悪いですが、とりあえず自動化してるので平気です。 VBoxManage の help を見ても、 仮想マシン名 → IP Address の効率のよい取得方法は書いてありません。

ご存知でしたら、どなたかご助言ください。

とりあえず

いくらでも環境を切り分けられるからどんどん実験できる。 幸せ。