
前回の記事で、パブリックネットワークとプライベートネットワークを両方設定してうまくいきましたが、途中で変更するとうまくいかない場合がありました。
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