検証用に kvm の guest 環境が必要になったのですが、既にネットワークが比較的複雑に構成されたDebian 12 サーバだったので、表題のようになるべくシンプルに host guest 間で通信できるようにと思いました。調べたところ、ブリッジを作成する方法や macvlan を使う方法は色々と見つかったのですが、どれも意にそぐわないものでした。しかし、何度かトライしたところ、ブリッジを手動で構成せずに、host guest 間で通信できるようになったので、備忘録として挙げてみました。
早速ですが、まず kvm をインストールします。
ネットワークの構成ですが、今回は、インターネットに接続するルータが gw23 : 10.1.1.23、kvm ホストが sv106: 10.1.1.106、ホスト側ネットワークは 10.1.86.0/24で、 virbr0 を、10.1.86.1/24、guest を 10.1.86.10/24 にする例です。なお virsh などの管理は一般ユーザで行えるようにしています。
以下設定です。ユーザを libvirt グループに追加します。
続いてインターネット接続するrouter上でスタティックルートを設定します。例は linux router の場合です。
編集が済んだらネットワークを起動させます。
2024/12/26追記1:ターミナルでコンソールがずれる場合、行数をvirsh console xxx とする前に `tput lines` で行数をカウントして例えば20行あった場合、stty rows 20 とすると行ずれがなくなります。2025/01/02追記:また、kvm に apt-get install --no-install-recommends xterm とすると /usr/bin/resize コマンドが使えるようになるので、virsh console xxx の後に eval resize として行数をセットすることが出来ます。( gnome-terminal でもこちらの方法は有効でした。)
2002/12/26追記2:virsh console ではTERM=vt220が適用されますが、一時的に TERM=xterm-256color /bin/bash とすると色付きの console になります。
2024/12/26追記3:vim-tinyで矢印キーを有効にして backspace を効かせたい場合は ~/.vimrc を以下のようにします。
早速ですが、まず kvm をインストールします。
apt install --no-install-recommends qemu-kvm libvirt-daemon-system libvirt-daemon virtinst \ bridge-utils libosinfo-bin qemu-utils libvirt-clients dnsmasq--no-install-recommends は不要なパッケージをなるべくインストールしないようにするオプションだそうです。kvm のインストール自体はこれで OK ですが、ここで注目してほしいのは dnsmasq です。というのも guest を作成したときに、virbr0 というインターフェースが自動で作成されるのですが、dnsmasq はこのインターフェース上で実行されるようで、virbr0 と dnsmasq の設定さえ適切にすれば、guest host 間の通信はできるのでは?と予想した所、ビンゴでした。
ネットワークの構成ですが、今回は、インターネットに接続するルータが gw23 : 10.1.1.23、kvm ホストが sv106: 10.1.1.106、ホスト側ネットワークは 10.1.86.0/24で、 virbr0 を、10.1.86.1/24、guest を 10.1.86.10/24 にする例です。なお virsh などの管理は一般ユーザで行えるようにしています。
以下設定です。ユーザを libvirt グループに追加します。
sudo adduser YourUserName libvirt続いてユーザ接続できるようにします。ここがないとユーザー権限で接続できません
virsh --connect qemu:///system list --all export LIBVIRT_DEFAULT_URI='qemu:///system'この記述を例えば ~/virsh.rc として保存しておいて . ~/virsh.rc または source ~/virsh.rc とするとコピペしなくて済むので良いと思います。
続いてインターネット接続するrouter上でスタティックルートを設定します。例は linux router の場合です。
ip route add 10.1.86.0/24 via 10.1.1.106 dev enp1s0f0続いて virbr0 の設定を以下のように行います。
$virsh net-edit default -------------------------- <network> <name>default</name> <uuid>f7adfd1d-154b-498a-8afc-947161274f80</uuid> <forward mode='route'/> <bridge name='virbr0' stp='on' delay='0'/> <mac address='52:54:00:da:99:41'/> <ip address='10.1.86.1' netmask='255.255.255.0'> <dhcp> <range start='10.1.86.100' end='10.1.86.254'/> </dhcp> </ip> </network> -------------------------要点としては、forward mode を nat から route に変えているところです。あとは、アドレスと付与範囲の変更だけです。
編集が済んだらネットワークを起動させます。
virsh net-start defaultなお、ネットワークを再起動させたい場合は、以下のようにします。
virsh net-destroy default virsh net-start defaultまた、ネットワークを自動起動させたい場合は、以下のようにします。
virsh net-autostart default続いて guest をインストールします。
virt-install --virt-type kvm --name kvm86a --location https://deb.debian.org/debian/dists/bookworm/main/installer-amd64/ --os-variant debian11 --disk size=10 --vcpus 2 --memory 1024 --graphics none --console pty,target_type=serial --extra-args "console=ttyS0"kvmがbiosで有効になってて、ターミナル上で CUI のインストーラが立ち上がればOKです。あとはインストーラの指示にしたがってインストールを続けてください。インストールが終了したら再起動されるので、ログインしてネットワークの設定を以下のように変更しておきます。
## edit /etc/network/interfaces allow-hotplug enp1s0 #iface enp1s0 inet dhcp iface enp1s0 inet static address 10.1.86.10 netmask 255.255.255.0 gateway 10.1.86.1 dns-nameservers 10.1.1.64Debian 12の場合、ネットワーク設定変更の反映は systemctl restart networking で行けます。なお Debianは sudo がデフォルトでインストールされませんが、 su コマンドで 管理者になれます。テキストベースの管理・インストールですが、思っていた以上にシンプルに出来ました。
2024/12/26追記1:ターミナルでコンソールがずれる場合、行数をvirsh console xxx とする前に `tput lines` で行数をカウントして例えば20行あった場合、stty rows 20 とすると行ずれがなくなります。2025/01/02追記:また、kvm に apt-get install --no-install-recommends xterm とすると /usr/bin/resize コマンドが使えるようになるので、virsh console xxx の後に eval resize として行数をセットすることが出来ます。( gnome-terminal でもこちらの方法は有効でした。)
2002/12/26追記2:virsh console ではTERM=vt220が適用されますが、一時的に TERM=xterm-256color /bin/bash とすると色付きの console になります。
2024/12/26追記3:vim-tinyで矢印キーを有効にして backspace を効かせたい場合は ~/.vimrc を以下のようにします。
set nocompatible set bs=indent,eol,start今回は以上です。それでは。
コメント
コメントを投稿