意外にまとまった日本語に記事が無いのでメモ
ホストOSはCentos7です。
参考:
https://qiita.com/yoshiyasu1111/items/8d07a4fd55116fba07f7
↑ブリッジネットワークのところはほとんどそのままです!ありがとうございます!
https://2502.net/kvm-ubuntu-linux-18-04-windows-server-2016-headless-cli/
https://mseeeen.msen.jp/make-virtual-machine-with-kvm-in-centos-7/
1.まずKVMをインストール
yum -y install libguestfs libvirt libvirt-client python-virtinst qemu-kvm virt-manager virt-top virt-viewer virt-who virt-install bridge-utils
[root@localhost iso]# lsmod | grep kvm
kvm_intel 188644 0
kvm 621480 1 kvm_intel
irqbypass 13503 1 kvm
2.libvirtdの起動
[root@localhost iso]# systemctl start libvirtd
[root@localhost iso]# systemctl enable libvirtd
3.ブリッジネットワークの作成
ブリッジネットワークの作成
バックアップ
# cp /etc/sysconfig/network-scripts/ifcfg-enp10s0 /root
[root@localhost ~]# nmcli d s
DEVICE TYPE STATE CONNECTION
enp10s0 ethernet connected enp10s0
virbr0 bridge connected virbr0
enp11s0 ethernet disconnected --
enp12s0 ethernet disconnected --
enp13s0 ethernet disconnected --
enp14s0 ethernet disconnected --
enp15s0 ethernet disconnected --
enp16s0 ethernet disconnected --
enp17s0 ethernet disconnected --
enp18s0 ethernet disconnected --
enp9s0 ethernet disconnected --
enp1s0f0 ethernet unavailable --
enp1s0f1 ethernet unavailable --
lo loopback unmanaged --
virbr0-nic tun unmanaged --
デバイス名br0というブリッジをnmcli c aコマンドで作成します。
作成した後nmcli c sコマンドで確認するとbridge-br0が追加されています。
作成したbridge-br0のスパニングツリーの設定を無効にします。
そして、bridge-br0のIPアドレスを先程調べたIPアドレス10.10.5.200/16に設定し、
ゲートウェイ、DNSサーバの設定をします。
[root@localhost ~]# nmcli c m virbr0 ipv4.method manual ipv4.addresses 10.10.5.200/16
[root@localhost ~]# systemctl restart network
[root@localhost ~]#
[root@localhost ~]# ifup virbr0
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/10)
[root@localhost ~]# ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
3: enp10s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 10.10.2.141/16 brd 10.10.255.255 scope global noprefixroute enp10s0
valid_lft forever preferred_lft forever
14: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
inet 10.10.5.200/16 brd 10.10.255.255 scope global noprefixroute virbr0
valid_lft forever preferred_lft forever
# デバイス名br0というブリッジを作成
$ nmcli connection add type bridge ifname br0
接続 'bridge-br0' (ae86c45c-7740-4433-90f3-8e9f4354905b) が正常に追加されました。
# 接続情報の表示をすると、DEVICE名br0、接続名bridge-br0が追加されている。
[root@localhost ~]# nmcli connection add type bridge ifname br0
Connection 'bridge-br0' (6f9beae9-c703-4df4-bf2e-621d6b1c4b23) successfully added.
[root@localhost ~]# nmcli d s
DEVICE TYPE STATE CONNECTION
enp10s0 ethernet connected enp10s0
virbr0 bridge connected virbr0
br0 bridge connecting (getting IP configuration) bridge-br0
# bridge-br0のスパニングツリーが有効になっている
[root@localhost ~]# nmcli connection show bridge-br0 | grep bridge.stp
bridge.stp: yes
# bridge-br0のスパニングツリーを無効にする
[root@localhost ~]# nmcli connection modify bridge-br0 bridge.stp no
# bridge-br0のスパニングツリーが無効になっている
[root@localhost ~]# nmcli connection show bridge-br0 | grep bridge.stp
bridge.stp: no
# bridge-br0のIPアドレス、ゲートウェイ、DNSサーバの設定をします。
# IPアドレスは先程調べた値を指定します。
$ nmcli connection modify bridge-br0 ipv4.method manual ipv4.addresses "10.10.2.141/16" ipv4.gateway "10.10.0.254" ipv4.dns "8.8.8.8"
ブリッジbridge-br0に物理インターフェースenp10s0を追加します。
もともとenp10s0が接続していたenp10s0は削除してしまいます。
# ブリッジbridge-br0にデバイスenp10s0を接続タイプbridge-slaveとして追加する
[root@localhost ~]# nmcli connection add type bridge-slave ifname enp10s0 master bridge-br0
Connection 'bridge-slave-enp10s0' (32e616ed-f209-46b7-842c-92538f281787) successfully added.
# 接続の一覧表示。bridge-br0が追加されています。
[root@localhost ~]# nmcli c s
NAME UUID TYPE DEVICE
bridge-br0 6f9beae9-c703-4df4-bf2e-621d6b1c4b23 bridge br0
enp10s0 bc1f0354-a0d4-4e41-91fc-3d420d6fd5db ethernet enp10s0
virbr0 82b3ea70-e0cf-4b05-a709-c42f4b40c1ab bridge virbr0
bridge-slave-enp10s0 32e616ed-f209-46b7-842c-92538f281787 ethernet --
enp11s0 cc812463-8cc9-43a2-9845-807e0318780a ethernet --
enp12s0 4cc7705d-b94c-4ead-8673-922342d8fb24 ethernet --
enp13s0 fd0fdf28-2fc3-446a-9419-eb081486959b ethernet --
enp14s0 eaa2d0ad-6332-481c-aa63-6fc92421c924 ethernet --
enp15s0 a92d0934-20d5-4b0b-ba9e-039b9f3b618f ethernet --
enp16s0 2e914514-77bc-4a8f-925e-d4f4a71710c7 ethernet --
enp17s0 bf9421de-43fb-4e87-b433-86a9735f85ce ethernet --
enp18s0 7cee26d1-1bcc-4bbb-85b4-70f169912f5e ethernet --
enp1s0f0 6d8b2af8-d300-4fae-9daf-5d90c482dc4f ethernet --
enp1s0f1 d36f84d1-2cb7-4d9f-bcb8-827e95306c61 ethernet --
enp9s0 fe4db18c-6d86-4a5e-aa0e-677a161800aa ethernet --
# 不要になったenp10s0を削除します。
[root@localhost ~]# nmcli connection delete enp10s0
Connection 'enp10s0' (bc1f0354-a0d4-4e41-91fc-3d420d6fd5db) successfully deleted.
# bridge-slave-enp7s0という接続が出来ていて、enp7s0が接続されています。
$ nmcli connection show
NAME UUID TYPE DEVICE
bridge-br0 ae86c45c-7740-4433-90f3-8e9f4354905b bridge br0
bridge-slave-enp7s0 4686b212-a687-463f-ba8e-0f0d42bad827 ethernet enp7s0
virbr0 1244d4ca-0688-48ae-8bbf-bf199c197c1e bridge virbr0
現在のゲストOSのインターフェースvnet0はvirtbr0に接続されています。
これをbr0に接続するように変更します。
[root@localhost ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.006bf16ff424 no enp10s0
virbr0 8000.5254006164ca yes virbr0-nic
モジュールのインストール
ブリッジデバイス経由のパケットにiptablesの適用を行わない設定をします。
[root@localhost ~]# tail /etc/sysctl.conf
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
[root@localhost ~]# modprobe br_netfilter
[root@localhost ~]# modprobe bridge
[root@localhost ~]# lsmod | grep bridge
bridge 151336 0
stp 12976 1 bridge
llc 14552 2 stp,bridge
[root@localhost ~]# sysctl -p
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
4. WindowsVMインストール
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 79G 0 79G 0% /dev
tmpfs 79G 0 79G 0% /dev/shm
tmpfs 79G 571M 78G 1% /run
tmpfs 79G 0 79G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 13G 38G 25% /
/dev/sda1 1014M 151M 864M 15% /boot
/dev/mapper/centos-home 224G 33M 224G 1% /home
tmpfs 16G 0 16G 0% /run/user/0
[root@localhost ~]# virt-install \
--name win2016 \
--ram 16384 \
--disk path=/home/win2016/win2016.img,size=50,sparse=true \
--vcpus 4 \
--os-type windows \
--network bridge=br0 \
--cdrom /var/lib/libvirt/images/Win2016.ISO \
--vnc \
--vncport=5901 \
--vnclisten=0.0.0.0
5.WindowsServerVMにつないでみる
先にVNCビュアーをダウンロードしておきます
https://www.realvnc.com/en/connect/download/viewer/
ポートフォワード
踏み台へ
ssh fumidai@xx.xx.xx.xx -L 59001:localhost:5901
HVへ
ssh root@[hostのip] -L 5901:localhost:5901
踏み台なくても接続できる場合は、直接5901番にポートフォワードしてください。
これで手元からWindowsVMへ接続できるようになる