LoginSignup
82
82

More than 5 years have passed since last update.

KVM環境で仮想マシンを外部ネットワークと接続する

Posted at

はじめに

KVM環境で仮想マシンを外部ネットワークと接続する方法を記述します。

iptablesのNAT(IPマスカレード)機能を利用する方法と物理NICを仮想ブリッジに
接続する方法があります。

環境

  • CentOS 6.4
  • qemu-kvm 0.12.1.2

iptablesのNAT(IPマスカレード)機能を利用する方法

仮想マシンから外部のサーバに接続することはできますが、外部のサーバから
仮想マシンへは接続できません。

外部のサーバから仮想マシンへ接続する必要がある場合は、物理NICを仮想ブリッジに
接続する方法を使用します。

  • 仮想ネットワークの一覧を表示
# virsh net-list --all
Name                 State      Autostart     Persistent
--------------------------------------------------
default              active     no            yes
  • ブリッジインタフェースの表示
# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          XXXX.XXXXXXXXXXXX       yes             virbr0-nic
  • 仮想マシンを作成する
# virt-install                                                 \
  --name srv001                                                \
  --hvm                                                        \
  --os-type=Linux                                              \
  --os-variant=rhel6                                           \
  --ram 1024                                                   \
  --vcpu=1                                                     \
  --graphics none                                              \
  --disk=/var/lib/libvirt/images/srv001,format=qcow2,size=8    \
  --network bridge=virbr0                                      \
  --location http://ftp.riken.jp/Linux/centos/6/os/x86_64/     \
  --extra-args='console=tty0 console=ttyS0,115200n8'           

--network bridge=${source bridge} で、libvirtdが管理する
仮想ネットワークを指定します。

iptablesのNAT(IPマスカレード)機能により外部ネットワークと接続するため
ホストOS側でiptablesが有効となっており、マスカレードの設定が
行われている必要があります。

物理NICを仮想ブリッジに接続する方法

外部のサーバから仮想マシンに接続する必要がある場合は、こちらの方法を使用します。

  • bridge-utilsパッケージをインストールする
# yum install bridge-utils
  • 仮想ブリッジを作成する
# brctl addbr br0
# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000000000000       no
virbr0          8000.525400b745d4       yes             virbr0-nic
                                                        vnet0
  • 仮想ブリッジに物理NICを接続する
# brctl addif br0 eth0
# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.001f2966513c       no              eth0
virbr0          8000.525400b745d4       yes             virbr0-nic
                                                        vnet0

ネットワーク設定を修正する

/etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=XXX.XXX.XXX.XXX
NETMASK=XXX.XXX.XXX.XXX
TYPE="Bridge"

/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="none"
HWADDR="XX:XX:XX:XX:XX:XX"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
  • networkを再起動して設定を反映する
# /etc/init.d/network restart
  • 仮想ブリッジの確認
# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.001f2966513c       no              eth0
virbr0          8000.525400b745d4       yes             virbr0-nic
                                                        vnet0
  • 仮想マシンを作成する
# virt-install                                                 \
  --name srv011                                                \
  --hvm                                                        \
  --os-type=Linux                                              \
  --os-variant=rhel6                                           \
  --ram 1024                                                   \
  --vcpu=1                                                     \
  --graphics none                                              \
  --disk=/var/lib/libvirt/images/srv001,format=qcow2,size=8    \
  --network bridge=br1                                         \
  --location http://ftp.riken.jp/Linux/centos/6/os/x86_64/     \
  --extra-args='console=tty0 console=ttyS0,115200n8'           

--network bridge=${source bridge} で物理NICが接続された仮想ブリッジを指定します。

おまけ

  • 仮想ネットワークの定義ファイル
/usr/share/libvirt/networks/default.xml
<network>
  <name>default</name>
  <bridge name="virbr0" />
  <forward/>
  <ip address="192.168.122.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.122.2" end="192.168.122.254" />
    </dhcp>
  </ip>
</network>
  • 仮想ネットワークを追加する
/usr/share/libvirt/networks/internal.xml
<network>
  <name>internal</name>
  <bridge name="virbr1" />
  <forward/>
  <ip address="192.168.123.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.123.2" end="192.168.123.254" />
    </dhcp>
  </ip>
</network>
# virsh net-define /usr/share/libvirt/networks/internal.xml
# virsh net-start internal
# virsh net-list --all
Name                 State      Autostart     Persistent
--------------------------------------------------
default              active     no            yes
internal             active     no            yes

# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.525400b745d4       yes             virbr0-nic
virbr1          8000.5254008f6eda       yes             virbr1-nic
  • 仮想マシンにNICを追加する

仮想マシンの設定を変更します。

# virsh edit srv001
    <interface type='bridge'>
      <mac address='XX:XX:XX:XX:XX:XX'/>
      <source bridge='virbr0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <!-- 追加箇所 -->
    <interface type='bridge'>
      <source bridge='virbr1'/>
      <model type='virtio'/>
    </interface>
    <!-- 追加箇所 -->

変更を反映させるため、仮想マシンを停止・起動します。

# virsh shutdown srv001
# virsh start srv001
  • 仮想ネットワークの削除
# virsh net-destroy default
# virsh net-undefine default
  • 仮想ブリッジの削除
# brctl delif br0 eth0
# brctl delbr br0

参考

82
82
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
82
82