転載・引用について

ユーザ用ツール

サイト用ツール


os:linux:centos:fixednic

CentOSでNICとethのmappingを固定する

Last Update: 2014/10/14

久しぶりにやって大ハマりしたので、メモ。

XenServer等の仮想システムで、GuestOSにCentOS6を利用している場合に、NICの割当がうまく行かなくなる事がある。 この原因を明確にすべく実験してみた。

仮想システム上に作成したCentOSを用いて、以下の試験を行う

  • CentOS6.5のVMを作成
  • NICを5本割り当てる
  • VMに割り当てたNICに対して割り付けられるeth[0-5]を、思い通りの順番に変える
  • 変えた情報が反映されているか試験
  • VMに割り当てたNICを一つ削除する
  • kernelがどう認識するか確認する
  • 設定を初期に戻して、eth[0-5]がどうなるかを確認する
  • VMにNICを追加する
  • eth[0-5]がどうなるかを確認する

試験環境は以下の通り。

  • Hypervisor: XenServer 6.2 ServicePack 1
  • OS: CentOS 6.5
    • NIC1: MAC Address=00:00:00:00:01
    • NIC2: MAC Address=00:00:00:00:02
    • NIC3: MAC Address=00:00:00:00:03
    • NIC4: MAC Address=00:00:00:00:04
    • NIC5: MAC Address=00:00:00:00:05

まず、思い通りにNICにeth番号を割り当てる方法を以下に記載する

  1. /etc/sysconfig/network-script/ifcfg-eth* を編集する
    • HWADDR行を削除(もしくはComment out)
      • NICが変われば、当然MAC Addressが変わるから。
  2. /etc/udev/rules に移動する
    • 70-persistent-net.rule があれば、削除する
      • CentOS5の頃にはこのファイルが作成されたようだが、CentOS6.5とか7では作成されない模様。
    • 以下のコマンドを実行し、情報を確認する
      • udevadm info -a -p /sys/class/net/eth0 (eth0の情報を確認する場合)
      • # udevadm info -a -p /sys/class/net/eth0/
        
        Udevadm info starts with the device specified by the devpath and then
        walks up the chain of parent devices. It prints for every device
        found, all possible attributes in the udev rules key format.
        A rule to match, can be composed by the attributes of the device
        and the attributes from one single parent device.
        
          looking at device '/devices/vif-0/net/eth0':
            KERNEL=="eth0"				← 見ている疑似NIC
            SUBSYSTEM=="net"
            DRIVER==""
            ATTR{addr_assign_type}=="0"
            ATTR{addr_len}=="6"
            ATTR{dev_id}=="0x0"
            ATTR{ifalias}==""
            ATTR{iflink}=="6"
            ATTR{ifindex}=="6"
            ATTR{features}=="0x50803"
            ATTR{type}=="1"				← 意味は(現時点で)不明だが、必須情報
            ATTR{link_mode}=="0"
            ATTR{address}=="00:00:00:00:00:01"
            ATTR{broadcast}=="ff:ff:ff:ff:ff:ff"
            ATTR{operstate}=="down"
            ATTR{mtu}=="1500"
            ATTR{flags}=="0x1002"
            ATTR{tx_queue_len}=="1000"
            ATTR{rxbuf_min}=="64"
            ATTR{rxbuf_max}=="256"
            ATTR{rxbuf_cur}=="128"
        
          looking at parent device '/devices/vif-0':
            KERNELS=="vif-0"				← Kernel内部のDevice名
            SUBSYSTEMS=="xen"				← Kernel内部で上記Deviceが生えているSubsystem名
            DRIVERS=="vif"				← Kernel内部のDevice Driver
            ATTRS{nodename}=="device/vif/0"
            ATTRS{devtype}=="vif"
            ATTRS{modalias}=="xen:vif"
    • この情報を元に、65-eth.rulesファイルを作成
      • 65という数字には意味があって、61〜67までであること。要するに、60-raw-rulesの実行後、70-persistent-net.rules(無い場合が多い)までの間に実行されるようにする必要がある。
      • 設定ファイルの内容は以下。
        ACTION=="add", SUBSYSTEMS=="xen", KERNELS=="vif-0", DRIVERS=="?*", NAME="eth0", OPTIONS="last_rule"
        ACTION=="add", SUBSYSTEMS=="xen", KERNELS=="vif-1", DRIVERS=="?*", NAME="eth1", OPTIONS="last_rule"
        ACTION=="add", SUBSYSTEMS=="xen", KERNELS=="vif-2", DRIVERS=="?*", NAME="eth2", OPTIONS="last_rule"
        ACTION=="add", SUBSYSTEMS=="xen", KERNELS=="vif-3", DRIVERS=="?*", NAME="eth3", OPTIONS="last_rule"
        ACTION=="add", SUBSYSTEMS=="xen", KERNELS=="vif-4", DRIVERS=="?*", NAME="eth4", OPTIONS="last_rule"
    • 上記 65-eth.rules をいじる(NAME=の後ろ)と望み通りにethの番号を変えられる。
  3. XenServer側からNICを削除してもvif番号は変わらない。
    • 従って、例えば3番をXenServer側から削除した場合、eth3がなくなる。
  4. ここで、65-eth.rules を削除すると、eth3が詰まって、eth0〜eth4までに変化する

ということになる。

このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
os/linux/centos/fixednic.txt · 最終更新: 2014/10/14 17:13 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki