前回の記事で、パブリックネットワークとプライベートネットワークを両方設定してうまくいきましたが、途中で変更するとうまくいかない場合がありました。
BOXを自分で作って配布するときにも必要な作業になりますので、覚えておいたほうがいい内容だと思うので、対処法をまとめておきます。
どういうときに行うのか
この作業自体はどういうときにやるのかというと自分は以下の時にじ実施しています。
- ネットワークを初期化したい
- 新しく仮想OS側にネットワークを追加したけどうまくいかない
こんな時に実施しています。
やり方
ifconfigの結果は以下の状況。
[root@localhost ~]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:11:71:AE inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe11:71ae/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2596 errors:0 dropped:0 overruns:0 frame:0 TX packets:4148 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:260151 (254.0 KiB) TX bytes:287315 (280.5 KiB) eth1 Link encap:Ethernet HWaddr 08:00:27:C4:EE:01 inet addr:192.168.33.72 Bcast:192.168.33.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fec4:ee01/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:988 errors:0 dropped:0 overruns:0 frame:0 TX packets:33 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:113136 (110.4 KiB) TX bytes:2238 (2.1 KiB) eth2 Link encap:Ethernet HWaddr 08:00:27:12:06:DB inet addr:192.168.11.9 Bcast:192.168.11.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe12:6db/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1615 errors:0 dropped:0 overruns:0 frame:0 TX packets:77 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:181179 (176.9 KiB) TX bytes:6386 (6.2 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:1222 errors:0 dropped:0 overruns:0 frame:0 TX packets:1222 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:107500 (104.9 KiB) TX bytes:107500 (104.9 KiB) [root@localhost ~]#
AmazonLinuxの場合は、以下の場所にネットワークインタフェースの設定がおいてあります。
[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg-eth* /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1 /etc/sysconfig/network-scripts/ifcfg-eth2 [root@localhost ~]#
上記だとeth0はNAT、eth1がHostOnly、eth2がBridgeの設定が反映されたものです。
eth1はprivateアドレス、eth2がpublicアドレスです。
ファイルを一応バックアップしておきます。
[root@localhost ~]# mv /etc/sysconfig/network-scripts/ifcfg-eth1 /etc/sysconfig/network-scripts/ifcfg-eth1.bak [root@localhost ~]# mv /etc/sysconfig/network-scripts/ifcfg-eth2 /etc/sysconfig/network-scripts/ifcfg-eth2.bak
そして、70-persistent-net.rulesを削除します。
[root@localhost ~]# rm -rf /etc/udev/rules.d/70-persistent-net.rules
70-persistent-net.rulesの中身を見てみるとこんな感じ。
[root@localhost ~]# cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # elastic network interface SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:12:06:db", KERNEL=="eth*", NAME="eth2" # elastic network interface SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:c4:ee:01", KERNEL=="eth*", NAME="eth1" [root@localhost ~]#
このファイルが何をやっているかというと、MacアドレスとNICの名前の紐づけを行っているようです。 その紐づけとifcfgの紐づけがうまくいかず、IPアドレスが割り当てられないということが起こります。
70-persistent-net.rulesはrebootするとファイルが再生成されます。
ifcfg-ethXXをバックアップして、70-persistent-net.rulesを削除して、rebootすると、新規にネットワーク設定が仮想OSにされてうまくいきました。
まとめ
結構ハマったので残しておこうと思います。
参考にしたサイト
/etc/udev/rules.d/70-persistent-net.rules と向き合う - じゃあ、おうちで学べる
Bringing up interface eth0 device eth0 does not seem to be present delaying