macvlanを使ってみる
$ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:1d:7d:06:fd:97 inet addr:163.215.189.111 Bcast:163.215.189.127 Mask:255.255.255.192 inet6 addr: fe80::21d:7dff:fe06:fd97/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1225 errors:0 dropped:0 overruns:0 frame:0 TX packets:1285 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:551246 (551.2 KB) TX bytes:232794 (232.7 KB) Interrupt:42 Base address:0xa000
ここに、こんなeth0があったとします。
$ sudo ifconfig eth0:0 10.0.0.3 up $ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:1d:7d:06:fd:97 inet addr:163.215.189.111 Bcast:163.215.189.127 Mask:255.255.255.192 inet6 addr: fe80::21d:7dff:fe06:fd97/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1358 errors:0 dropped:0 overruns:0 frame:0 TX packets:1419 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:573562 (573.5 KB) TX bytes:243999 (243.9 KB) Interrupt:42 Base address:0xa000 $ ifconfig eth0:0 eth0:0 Link encap:Ethernet HWaddr 00:1d:7d:06:fd:97 inet addr:10.0.0.3 Bcast:10.255.255.255 Mask:255.0.0.0 UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 Interrupt:42 Base address:0xa000
こんな感じにサブインタフェースを作って2個目のIPを振る事は出来ますが、これだとIPは違うけどMACアドレスは同じです。
ここでdhclientをeth0:0に対して走らせても同じMACアドレスじゃ新しいIPはもらえないでしょう。
一方、macvlanを使うと…
$ sudo ip link add dev macvlan0 link eth0 type macvlan $ sudo ifconfig macvlan0 up macvlan0 Link encap:Ethernet HWaddr fe:7b:40:b0:fc:f8 inet6 addr: fe80::fc7b:40ff:feb0:fcf8/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:9 errors:0 dropped:0 overruns:0 frame:0 TX packets:21 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1780 (1.7 KB) TX bytes:6383 (6.3 KB)
あら不思議、新しいMACアドレスの付いたインタフェースが作れちゃいました。
$ dmesg|tail -n1 [ 316.021862] device eth0 entered promiscuous mode
eth0をpromiscuousモードに切り替える事で、「fe:7b:40:b0:fc:f8」宛のパケットを受け取っているようです。
$ sudo dhclient macvlan0 $ sudo ifconfig macvlan0 macvlan0 Link encap:Ethernet HWaddr e6:52:55:96:f1:e7 inet addr:163.215.189.112 Bcast:163.215.189.127 Mask:255.255.255.192 inet6 addr: fe80::e452:55ff:fe96:f1e7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2 errors:0 dropped:0 overruns:0 frame:0 TX packets:14 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:708 (708.0 B) TX bytes:4026 (4.0 KB)
今度はMACアドレスが異なるので新しいIPをDHCPサーバからもらうことも出来ちゃいますね。
この機能、普通にLinux上で生きていても何の用途も無さそうですが、LXCで使われているようですし、後付で実装されたmacvtapを使えばKVM/QEMUからも使えます。