Xen4.2のためのブリッジをFedora18で設定する

前3回の、Xen4.2準仮想化をFedora18で使う (1), (2), (3) でXenの設定手順を書きましたが、今回はその際にDomUのネットワーク接続で使用するブリッジの設定について書きます。

ゲストOS(DomU)のネットワーク接続には以下のいずれかのブリッジが必要です。

  1. 外部ネットワークとNATで接続するための内部ブリッジvirbr0:
  2. 外部ネットワーク(ホストOSが接続しているネットワーク)と接続するブリッジ:

  図. Xen DomUネットワークのためのブリッジ
  (DomU-1とDomU-2を外部ネットワークに直接接続し、DomU-3とDomU-4をNATで外部ネットワークに接続する例)
  

1. 外部ネットワークとNATで接続するための内部ブリッジvirbr0:

これはlibvirtdの起動により自動生成されます。libvirtdはデフォルトではsystemdによりlibvirtd.serviceから起動される設定になっています。
コマンドで起動する場合は次のようにします。

# systemctl enable libvirtd.service
# systemctl start libvirtd.service
# systemctl status libvirtd.service
libvirtd.service - Virtualization daemon
	  Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled)
	  Active: active (running) since Mon, 2013-05-27 22:38:13 JST; 2s ago
...(以下省略)
# ifconfig virbr0
virbr0: flags=4099  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 56:59:2f:cb:06:9e  txqueuelen 0  (Ethernet)
...(以下省略)

また、IPフォワーディングの設定とNetfilter(iptables)のNATの設定も自動的に行われます。
/sbin/dnsmasqがvirbr0にDHCPサービスを提供するので、DomUのイーサネットI/F(eth0)にIPアドレスの自動割り振りができます。

2. 外部ネットワーク(ホストOSが接続しているネットワーク)と接続するブリッジ:

ホスト(Dom0)のイーサネットI/F(eth0)へ外部DHCPサーバを利用したIPアドレスの割り振りはNetworkManagerにより自動的に行われます。
staticにIPアドレスを設定するのでなければ、/etc/sysconfig/network-scripts/ifcfg-eth0などの設定ファイルを用意する必要はありませんがブリッジを設定する場合は次のように設定ファイルを用意します。ブリッジには一般的にbr0とかxenbr0という任意の名前を付けます。
NetworkManagerは0.9.8からブリッジをサポートしているので、NetworkManagerでブリッジを管理するには「yum update NetworkManager」コマンドを実行して、インストール時のバージョン0.9.7から0.9.8にアップします。

下記の例ではブリッジbr0にdhcpでIPアドレスを設定していますが、staticに設定することもできます。

# cat ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
BRIDGE=br0
ONBOOT=yes

# cat ifcfg-br0
TYPE=Bridge
DEVICE=br0
BOOTPROTO=dhcp
ONBOOT=yes

NetworkManagerはデフォルトではsystemdによりNetworkManager.serviceから起動される設定になっています。
コマンドで起動する場合は次のようにします。

# systemctl enable NetworkManager.service
# systemctl start NetworkManager.service
# systemctl status NetworkManager.service
NetworkManager.service - Network Manager
	  Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled)
	  Active: active (running) since Mon, 2013-05-27 23:34:38 JST; 2s ago
...(以下省略)
# ifconfig br0
br0: flags=4163  mtu 1500
        inet 172.16.1.1  netmask 255.255.0.0  broadcast 172.16.255.255
...(以下省略)

3. ブリッジの設定を確認

brctlコマンドでブリッジの設定を確認できます。

# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		0080.20cf300c8b2e	no		eth0
							vif1.0
virbr0		8000.000000000000	yes

br0をネットワークに設定したDomUがある場合、ブリッジbr0を通過するパケットをDom0のNetfilter(iptables)で制御するかどうかは以下のカーネル変数で指定します。値が1で制御し、値が0で制御しません。値1とした場合はDomUが外部ネットワークのサービスを受けられるようにiptablesコマンドで設定しておく必要があります。値0に設定するには次のように「sysctl -p -f /usr/lib/sysctl.d/00-system.conf」を実行します。

# cat /usr/lib/sysctl.d/00-system.conf
...(途中省略)
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

# sysctl -p -f /usr/lib/sysctl.d/00-system.conf

# sysctl -a | grep net.bridge.bridge-nf-call
net.bridge.bridge-nf-call-arptables = 0
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0

参考. インターフェイス名eth0をBIOSデバイス名(例:p35p1)に変更しない設定

Fedora18のデフォルトではネットワークI/F名eth0は起動時にudevによりBIOSデバイス名に変更されます。今回使ったのASUSのネットブック EeePC 1001HAの場合は、eth0 → p35p1、となります。
今回は、従来のインターフェイス名eth0とした方が見た目にわかりやすいので、上記の通り、インターフェイス名を変更しない設定にしてあります。
この設定については 次回のブログ に書きます。