前回までに、qemu (kvm) で virtual disk image と network に Virtio を使用し、linux の仮想 bridge に手動で接続して外部の network に接続できる事を確認した。
hiro20180901.hatenablog.com
今回は、Host の bridge 接続を起動時から有効にするように設定してみた。
debian の network 設定
以下に参考にさせて頂いたサイトを記載する。
Debian ネットワークの設定:
www.debian.org
Debian BridgeNetworkConnections :
wiki.debian.org
Debian 9: bridgeインターフェースの設定 :
www.hiroom2.com
- 今時の debian では、昔ながらの net-tools (ifconfig、route) を使用した network 設定は時代遅れ (obsolete) らしい。私が設定方法を覚えているのはこのやり方。確認に使うのは良いみたい。
- linux で手動で設定する場合でも iproute2 (ip command) を使うのを推奨されていた。これからはこちらを使うようにしよう。
- debian 系では、/etc/network/interfaces で設定し、ifup/ifdown を使うやり方。これも旧式。複雑な設定ならこちらも現役。
- 今時は、GUI client を持つ Wicd や NetworkManager を使うのが良い。Windows と同じ感覚で設定できるし、Wifi への接続だとはるかに便利だろう。linux を client として接続させる場合にはこちらを使う。
LXDE (Window System) を入れてから network に繋がるようになったのは、Wicd が入ったからなんだね。
hiro20180901.hatenablog.com
この時の疑問が一つ解消した。
wicd の削除
wicd を入れていると、systemd や init.d script で停止しても dhclient が残ってしまい、/etc/network/interfaces の設定と重なってしまう。ArchLinux や Debian の network 設定のページを見ても、複数の network 管理 software の導入は trouble を発生させると記載されている。(ArchLinux Wiki、Debian Handbook)
今回は、network の管理を ifupdown で行う事とし、wicd を削除した。
$ sudo apt purge wicd $ sudo apt autoremove
autoremove を使うと、wicd への依存関係で install され且つ wicd を purge して不要となっている package を削除できる。
/etc/network/interfaces による設定
まずは Host 単独で、loopback と enp3s0 を設定してみた。
/etc/network/interface:
auto lo iface lo inet loopback auto enp3s0 allow-hotplug enp3s0 iface enp3s0 inet dhcp iface enp3s0 inet6 auto
ifdown/ifup して確認した。
$ sudo ifdown enp3s0 $ sudo ifup enp3s0 $ ip a 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: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff inet 192.168.n.n/24 brd 192.168.n.255 scope global enp3s0 valid_lft forever preferred_lft forever inet6 nnnn:nn:nnn:nnn:nnnn:nnnn:nnnn:nnnn/64 scope global mngtmpaddr dynamic valid_lft 298sec preferred_lft 298sec inet6 fe80::nnnn:nnnn:nnnn:nnnn/64 scope link valid_lft forever preferred_lft forever
問題なく設定できていた。ip は短縮コマンドがあるみたいなので、「ip a」だけで表示できた。
次に、bridge を有効にして設定してみた。
/etc/network/interface:追加
iface br0 inet dhcp bridge_ports enp3s0 iface br0 inet6 auto
ifupdown して同様に試してみた。
$ sudo ifdown enp3s0 $ sudo ifup br0 $ ip a 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: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000 link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff 6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff inet 192.168.n.n/24 brd 192.168.n.255 scope global br0 valid_lft forever preferred_lft forever inet6 nnnn:nn:nnn:nnn:nnnn:nnnn:nnnn:nnnn/64 scope global mngtmpaddr dynamic valid_lft 268sec preferred_lft 268sec inet6 fe80::nnnn:nnnn:nnnn:nnnn/64 scope link valid_lft forever preferred_lft forever
enp3s0 には ip address は振られず、br0 に付いている。
最終的に lo と br0 を使うようにした。
auto lo iface lo inet loopback auto br0 iface br0 inet dhcp bridge_ports enp3s0 iface br0 inet6 auto
再起動して、Host 側が問題なく使える事を確認した。
/etc/network/interfaces に記載する bridge の man page
因みに、man interfaces には bridge の設定は記載されていない。bridge-utils package の中に含まれている。
$ dpkg -L bridge-utils | grep man /usr/share/man /usr/share/man/man5 /usr/share/man/man5/bridge-utils-interfaces.5.gz /usr/share/man/man8 /usr/share/man/man8/brctl.8.gz $ man bridge-utils-interfaces BRIDGE-UTILS-INTERFACES(5) File formats BRIDGE-UTILS-INTERFACES(5) NAME bridge-utils-interfaces - bridge-utils extensions for the interfaces(5) file format DESCRIPTION /etc/network/interfaces contains network interface configuration infor‐ mation for the ifup(8) and ifdown(8) commands. This manpage describes the bridge extensions to the standard interfaces(5) file format. ... 略 ...
最近の人達は man page 読むのかな? ググった方が早い場合が多いけど、信頼性の高い情報かどうかの判断が必要だから、どうせなら一次情報に接するのが良いかと思う。(man page と source が違う事も昔はよくあったが...)
qemu (kvm) の network 接続確認
br0 有効な状態で qemu (kvm) を起動してみた。
Host:
$ sudo brctl show bridge name bridge id STP enabled interfaces br0 8000.20cf30877f51 no enp3s0 tap0
結果
- 最近の linux/debian の network 設定について調べてみた。これからは次のように使い分けてみる。
- 手動で設定する場合は iproute2 を使う (net-toool は obsolete なので出来るだけ使わない)
- ちょっと複雑な設定を起動時に設定したい場合には /etc/network/interfaces で設定する
- Desktop 環境でお手軽に使いたい場合には Wicd or NetworkManager を使う
- 複数の network 設定 software は同時に使用しない。適材適所。
- /etc/network/interfaces に設定する事で、起動時から bridge が有効になった。仮想マシンを tap 有効にして起動するだけで、bridge 経由で外の世界に繋がるようになった。
今後調べる事(順不同):
- 最近の daemon の起動/停止方法について調べてみる。SysVinit の時代の人なので、systemd はよく分からない。
- 起動時の kernel、initramfs、systemd の中身を調べてみる。仮想マシンと比べて実 PC の起動に時間を要している。何がひっかかっているのか。
- qemu (kvm) の /etc/qemu-ifup と /etc/qemu-ifdown script の中身を読んでみる。もっと簡単に出来るかも。
最近の linux に追いつくのには時間がかかる。でも面白い。昔を思い出して懐かしい所もある。昔は input ばかりだったけど、今は output を増やしたい。