プロメモグラム

誰が見てもわかるような文章を目指す

Ubuntu 18.04 で KVM + OpenvSwitch(NAPT)

いくつかのサイトを参考に作成.

環境

OS

  • ホスト:Ubuntu Desktop (18.04)
  • ゲスト:Ubuntu Server (18.04)

Hypervisor

やりたいこと

正しい書き方かわからないけど概要はこんな感じ.

f:id:zia_glass:20181013044505p:plain

KVMの設定

基本は省略する.defaultネットワークを停止させ,自動起動を無効化する.

以下のコマンドでLinux標準ブリッジを無効化する.

rmmod bridge

OpenVSwitchの設定

インストール

apt install openvswitch-switch
apt install openvswitch-common
apt install python-openvswitch
apt install python-netifaces

Ubuntu 18.04はnetplanでネットワークされるが,OVSに非対応なので従来の設定ファイルを行う. (netplanの設定でmatchというキーを使えばIPアドレスを付加できたが接続は未検証) まずは,/etc/netplan/に存在するファイルの中身を全てコメントアウトする.

次に以下のパッケージをインストールする.

apt install ifupdown

/etc/network/interfacesを編集.ブリッジの設定をここに書く.

auto lo
iface lo inet loopback

auto eth0 
iface eth0 inet dhcp

auto br0 
iface br0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
ovs_type OVSBridge

保存したら設定を適用.

ifdown br0
ifup br0

ブリッジ設定ファイルを作成.

<network>
  <name>br0</name>
  <forward mode='bridge'/>
  <bridge name='br0'/>
  <virtualport type='openvswitch'/>
</network>

設定ファイルを適用.

virsh net-define br0.xml
virsh net-start br0
virsh net-autostart br0

作成したブリッジを仮想マシンに設定. この際にもともとあるmacvtapを選ばないように注意.

f:id:zia_glass:20181013044530p:plain

ufwフォワーディング設定

/etc/ufw/before.rules
*filterと書かれている行の前に以下を記述.

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-F
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

COMMIT

/etc/ufw/sysctl.conf

net/ipv4/ip_forward=1

/etc/default/ufw

DEFAULT_FORWARD_POLICY="ACCEPT"

3つの設定を弄ったら,ufwを適用. ufwはデフォルトで全通信を遮断しインターネットに繋がらなくなるので注意(許可する設定をする必要があるけど省略).

ufw disable
ufw enable

うまく行っているか確認.

iptables -L

dnsmasqの設定

インストールとSystemdで起動.

apt install dnsmasq
systemctl enable dnsmasq
systemctl start dnsmasq

/etc/dnsmasq.conf

listen-address=192.168.0.1
dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h

ゲストOS側の設定

ゲストはnetplanで大丈夫.うまく行けばインターネットに繋がる.

network:
    version2:
        ethernet:
            ens3:
                dhcp4: true
                addresses: []

設定適用.

netplan apply