QemuコマンドでVMを立てる時にシンプルにNICを生やす方法
part1 超素朴に全部手作業でやる
最初にこの方法でやれば全て理解できるしこれが一番理解しやすい.
ホスト側からVM起動
HOST$ sudo qemu-system-x86_64 \
-m 2048 -hda vm0.img \
-net nic -net tap,ifname=vtap0 \
-vnc :5 -monitor stdio
(qemu)
ホスト側に新たにvtap0が増えるのを確認する
HOST$ ip a
...
67: vtap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
link/ether 5a:95:ad:15:13:99 brd ff:ff:ff:ff:ff:ff
inet6 fe80::5895:adff:fe15:1399/64 scope link
valid_lft forever preferred_lft forever
...
VM側ではこうなった
VM$
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
inet6 fe80::5054:ff:fe12:3456/64 scope link
valid_lft forever preferred_lft forever
VM$ sudo ip addr add 10.10.0.1/24 dev ens3 HOST$ sudo ip addr add 10.10.0.2/24 dev vtap0
するとpingが通るようになる
HOST$ ping 10.10.0.1 PING 10.10.0.1 (10.10.0.1) 56(84) bytes of data. 64 bytes from 10.10.0.1: icmp_seq=1 ttl=64 time=10.8 ms 64 bytes from 10.10.0.1: icmp_seq=2 ttl=64 time=0.277 ms ... VM$ ping 10.10.0.2 PING 10.10.0.2 (10.10.0.2) 56(84) bytes of data. 64 bytes from 10.10.0.2: icmp_seq=1 ttl=64 time=1.37 ms 64 bytes from 10.10.0.2: icmp_seq=2 ttl=64 time=0.267 ms ...
変に紛らわしいことして浪費するよりこれの方がいいかもしれない.
port2 ifupスクリプトを指定する
ググるとscript=ifup.shみたいなのを指定する方法があって, 理解しにくい.
しかしpart1を理解した人からするととてもシンプルである.
scriptオプションで指定したスクリプトはvmを起動したあとにifnameで指定した 内容を引数として渡して実行されるだけなので, 今回はtap0にipアドレスを 設定するスクリプトを書いた. 以下のようにすると, ホスト側のアドレス設定も 自動でやってくれる.
HOST$ cat ifup.sh
#!/bin/sh
/sbin/ip addr add 10.10.0.2/24 dev $1
/sbin/ip link set $1 up
HOST$ chmod -x ifup.sh
HOST$ sudo qemu-system-x86_64 \
-m 2048 -hda vm0.img \
-net nic -net tap,ifname=vtap0,script=ifup.sh \
-vnc :5 -monitor stdio
(qemu)