前の記事
KVM をインストールする
http://qiita.com/TsutomuNakamura/items/bb5cd1bcbf1b998941ed
デフォルトネットワークについて
KVM がインストールされると、デフォルトで、virbr0
という仮想インタフェースが作成されています。
この仮想インタフェースは、デフォルトでゲストOS からのアウトバウンド通信のみ許可する設定になっています。
# ifconfig virbr0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether a2:37:db:38:ac:89 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
このデフォルト状態の仮想インタフェースは、次のような条件で使用する場合はそのまま使用することができます。
* KVM ホストOS からゲストOS へのみアクセスする場合
* KVM ゲストOS からインターネットへアクセスする場合
上記の要件以外に、外部のホストからゲストOS へのアクセスを許可したり、ゲストOS のIP アドレスを外部に公開するには、ブリッジネットワークの作成を行ってください。
bridge ネットワークの作成
(注)bridge ネットワークの設定はwireless ネットワークでは使用することができません。
ネットワーク設定のバックアップ
bridge ネットワークを作成する前に、ネットワーク設定のバックアップを取得します。
# #※ ファイル名(インタフェース名)は任意
# cp /etc/sysconfig/network-scripts/ifcfg-eno16777736 /root
$ sudo cp /etc/network/interfaces /root
ネットワーク設定
bridge ネットワークを設定します。
# cp /etc/sysconfig/network-scripts/ifcfg-eno16777736 /etc/sysconfig/network-scripts/ifcfg-br0
# mv /etc/sysconfig/network-scripts/ifcfg-eno16777736 /etc/sysconfig/network-scripts/ifcfg-eth0
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
~~~ 設定・ここから ~~~
DEVICE="ifcfg-eth0"
TYPE="Ethernet"
HWADDR="00:0C:29:40:A7:3F"
ONBOOT="yes"
NW_CONTROLLED="no"
BRIDGE="br0"
~~~ 設定・ここまで ~~~
# vim /etc/sysconfig/network-scripts/ifcfg-br0
~~~ 設定・ここから ~~~
DEVICE="br0"
TYPE="Bridge"
NM_CONTROLLED="no"
BOOTPROTO="static"
IPADDR="192.168.1.21"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
ONBOOT="yes"
~~~ 設定・ここまで ~~~
~~~ 設定(DHCPの場合)・ここから ~~~
DEVICE="br0"
TYPE="Bridge"
NM_CONTROLLED="no"
BOOTPROTO="dhcp"
ONBOOT="yes"
~~~ 設定(DHCPの場合)・ここまで ~~~
※上記サンプルでは、eth0 という名前でインタフェースを作り直していますが、これは"ifcfg-eno16777736" というインタフェース名ではうまく動かなかったため、そのようにしています・・・
# sudo cp /etc/network/interfaces /root/
# vim /etc/network/interfaces
~~~ 設定・ここから ~~~
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
iface br0 inet static
address 192.168.1.104
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1 8.8.8.8
bridge_ports eth0
bridge_stp off
auto br0
~~~ 設定・ここまで ~~~
~~~ 設定(DHCPの場合)・ここから ~~~
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
auto br0
~~~ 設定(DHCPの場合)・ここまで ~~~
ネットワークを再起動します。
# service network restart
$ sudo ifdown eth0 && sudo ifup eth0
$ sudo ifup br0
※うまくいかない場合はOS ごと再起動
bridge トラフィックのNetfilter を無効化する
bridge トラフィックのNetfilter 機能を無効化するために/etc/sysctl.conf
ファイルに次の定義を追加します。
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
ファイルに記述したら、設定を反映します。
# sysctl -p
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
bridge トラフィックを無効化する理由について
下記URL に英文で記載あり。
http://www-01.ibm.com/support/knowledgecenter/linuxonibm/liaat/liaatkvmsecnetfilter.htm?lang=ja
Bridged networking and Netfilter
It is important to note that, by default, Linux enables Netfilter processing even in bridged traffic.
Netfilter, although allowing the use of iptables to create layer 3 filtering rules, is also seen as a security risk for guest isolation because Netfilter processing sometimes occurs on a global context (without distinction of a source layer 2 port).
In practice, with Netfilter processing enabled, an attacker in a compromised guest might mix malicious IP traffic with legitimate ones from other guests.
This processing can also result in a minor performance impact.
Therefore it is recommended that Netfilter processing is disabled.
ネットワークコンフィグの確認
ifconfig
コマンドを使用してネットワークインタフェースを確認します。
br0
とeth0
がありますが、br0 はeth0 として動くようになります。
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.21 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe40:a73f prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:40:a7:3f txqueuelen 0 (Ethernet)
RX packets 2155 bytes 484270 (472.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 720 bytes 133865 (130.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::20c:29ff:fe40:a73f prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:40:a7:3f txqueuelen 1000 (Ethernet)
RX packets 148888 bytes 104945553 (100.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 755 bytes 175031 (170.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
~~~
brctl show
コマンドを実行すると次のように表示されます。
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29dc2afe no eth0
virbr0 8000.000000000000 yes
これで、ブリッジネットワークの使用準備ができました。