最近はもっぱらインフラ屋の山本です。
今回のネタは掲題の通り、NICのMACアドレスからIPを自動設定できるかな、
ということでやってみました。ちなみに背景としては、
1.VMの仮想NICのMACアドレスは自己管理していて、KVMだと上3バイトは
52:54:00 で固定で、下3バイトで管理。
2.IPアドレスは10.0.0.0/8 なので、下3バイトで管理。お、MACと一緒じゃん。
3.じゃ、VMのIP指定はDHCPとかじゃなくてMACアドレスでできるんじゃね?
てな感じです。
材料:
・ /sys/class/net/eth*/address
Linux で各NICのMACアドレスはこのファイルを cat すれば入手できます
・ /etc/init/networking.conf
Ubuntu の upstart ではネットワークの初期化はこいつがやります。
なかでは "ifup -a" してるだけです。
方法:
/etc/init/networking.conf の exec で以下のスクリプトを実行するように変更します。
#!/bin/sh
INTERFACES=`(cd /sys/class/net; ls -d eth*)`
mac_to_ip ()
{
shift 3
ip1=`printf '%d' 0x$1`
ip2=`printf '%d' 0x$2`
ip3=`printf '%d' 0x$3`
ip=10.$ip1.$ip2.$ip3
}
for if in $INTERFACES; do
MAC=`cat /sys/class/net/$if/address | tr : ' '`
mac_to_ip $MAC
/sbin/ifconfig $if $ip netmask 255.255.240.0 up
done
以上、簡単3分ハッキングでした。
追記:
なお、"52:54:00" の上位3バイトの代わりにローカルアドレスを使うと、他にも色々な情報をゲストOSに伝達できます。
例えば、
- マスクビット数を指定したり、
- Jumbo Frame のため MTU を大きくするように指定したり、
- インタフェースがデフォルトゲートウェイに繋がっていたり、
といった情報を上位3バイトにコーディングできます。
ゲストOSにはMACで指令、はこれからの時代の新常識ですね(嘘)。DHCP立てて管理するのが面倒なのが本音です。