本記事は筆者がAI(Gemini)を利用した調査・確認の回答をAI生成し、校正したものです。
不正確な場合はご容赦ください。
別記事にあるように、KVMサーバを移行するにあたり、イメージファイル(qcow2ファイル)をNASへバックアップしようと試みました。
ところが、大容量ファイル(といっても100GB程度だが)をNFS越しにコピーしたせいか、基幹LANの帯域を食いつぶしてしまい、sshが切れてcpが中断するという状況に陥りました。
結局、USB SSDを取り付けてイメージファイルをコピーして対応したのですが、その時、ムラムラっと「NASには2ポートあって未使用状態だ。USB-LANも数千円だし、NAS専用に2.5GbpsのLANを作ったらいいんじゃない?」と思いついてしまったのです。
なお、オチを先に言ってしまうと、我が家のNASはSATA HDDです。そこがボトムネックになってしまい、2.5Gbpsを生かしきることはできずに1割程度の速度向上にとどまる結果となりました。帯域分離という当初の目的は達成できたのでいいのですが、少し残念。
- KVMサーバ : Ubuntu Server 26.04 LTS(IP: 192.168.11.9 / デフォルトゲートウェイ: 192.168.11.1)
-
増設NIC : KVMサーバに2.5Gbps対応のUSB-LAN(インタフェース名:
eth1)を新たに増設。 -
NAS : QNAPのNAS(2.5Gbpsポート×2)
- ポート1 : 基幹LAN用(IP: 192.168.11.253 / デフォルトゲートウェイ: 192.168.11.1)
- ポート2 : 専用LAN用(IP: 192.168.12.253 / ホスト名:
NAS02b)
-
物理接続 : L2スイッチを介さず、KVMサーバの
eth1と NASのポート2をLANケーブル1本で直接接続。 -
論理設計 : 複数のVMが同一の専用セグメント(192.168.12.0/24)でNASと通信できるよう、KVMサーバ上に透過ブリッジ
br1を作成し、eth1を収容。
1. 物理・論理ネットワーク設計
直結環境における各機器のIPアドレスおよびデフォルトゲートウェイの設定値です。専用LAN(192.168.12.0/24)に属するすべてのポートでは、デフォルトゲートウェイを「設定なし」とすることが極めて重要です。
1.1 IPアドレス設計一覧
| デバイス / OS | インターフェース | IPアドレス | デフォルトGW | 役割・用途 |
|---|---|---|---|---|
| NAS | ポート1 | 192.168.11.253/24 | 192.168.11.1 | 基幹LAN接続(管理・外部通信用) |
| NAS | ポート2 | 192.168.12.253/24 | 設定なし | 専用LAN接続(ホスト名: NAS02b) |
| KVMサーバ | br0 (eth0) | 192.168.11.9/24 | 192.168.11.1 | KVMサーバ管理・外部通信用 |
| KVMサーバ | br1 (eth1) | 192.168.12.1/24 | 設定なし | 専用LAN(透過ブリッジ管理用) |
| 仮想マシン (VM) | 仮想NIC 1 (br0) | 192.168.11.x/24 | 192.168.11.1 | 基幹LAN・インターネット通信用 |
| 仮想マシン (VM) | 仮想NIC 2 (br1) | 192.168.12.x/24 | 設定なし | NAS専用通信用(DHCPから自動取得) |
【重要】 デフォルトゲートウェイの排除について
専用LAN側にデフォルトゲートウェイを設定してしまうと、各OSのデフォルトルートが専用LAN側に切り替わり、基幹LAN(インターネット接続)への通信が遮断される「マルチホームルーティング競合」が発生します。そのため、専用LAN側(192.168.12.0/24)のゲートウェイ設定は必ず空欄にしてください。
2. KVMサーバの透過ブリッジ(br1)作成
増設したUSB-LANインタフェース(eth1)を透過ブリッジ br1 に収容します。
1. Netplanの設定ファイル編集
既存のyamlファイルをバックアップし、編集します。※物理インターフェース名は環境に合わせて読み替えてください。
sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak
sudo vi /etc/netplan/00-installer-config.yaml
設定例:
network:
version: 2
renderer: networkd
ethernets:
eth0: # 基幹LAN用物理NIC
dhcp4: false
dhcp6: false
eth1: # 専用LAN用物理USB-NIC(2.5Gbps)
dhcp4: false
dhcp6: false
bridges:
# 既存の基幹LAN用ブリッジ
br0:
interfaces: [eth0]
addresses:
- 192.168.11.9/24
routes:
- to: default
via: 192.168.11.1
nameservers:
addresses: [192.168.11.1, 8.8.8.8]
parameters:
stp: false
forward-delay: 0
# 新設:専用LAN用ブリッジ
br1:
interfaces: [eth1]
addresses:
- 192.168.12.1/24
parameters:
stp: false
forward-delay: 0
2. ネットワーク設定の適用
作成した設定ファイルをシステムに反映します。
sudo netplan apply
3. DHCPサーバー(dnsmasq)の設定
VMが起動した際に、専用LAN(br1)用の仮想NICへIPアドレスを自動配付するためのDHCP環境を構築します。
1. dnsmasqパッケージのインストール
ホストOSにパッケージをインストールします。
sudo apt update
sudo apt install -y dnsmasq
2. 専用設定ファイルの編集
/etc/dnsmasq.d/ 配下に br1 専用の設定ファイルを新規作成します。
sudo vi /etc/dnsmasq.d/br1.conf
設定内容:
## br1インターフェースのみで要求を待ち受ける
interface=br1
bind-interfaces
## DNS機能を完全に無効化(ポート53を閉じ、systemd-resolvedとの衝突を防ぐ)
port=0
## DHCPによるIPアドレス配付範囲(192.168.12.10 〜 192.168.12.100)
dhcp-range=192.168.12.10,192.168.12.100,255.255.255.0,12h
## 【最重要】デフォルトゲートウェイ(オプション3)を配付しない
dhcp-option=3
## 【最重要】DNSサーバー(オプション6)を配付しない
dhcp-option=6
3. サービスの起動と有効化
設定を適用するためにサービスを起動し、自動起動の設定を有効にします。
sudo systemctl restart dnsmasq
sudo systemctl enable dnsmasq
4. 2.5Gbpsパフォーマンス最適化(netfilterバイパス)
Linuxは、L2ブリッジ(br1)を通過するフレームに対しても、ホストOSの iptables(netfilter)による不要なルール評価をバックグラウンドで処理します。これは2.5Gbps環境における通信遅延やCPU負荷の原因となるため、バイパス設定を行います。
1. カーネルパラメータの設定
専用の設定ファイルを新規作成し、ブリッジに対するnetfilterの呼び出しを停止します。
sudo vi /etc/sysctl.d/99-kvm-performance.conf
記述内容:
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-arptables = 0
2. パラメータの反映
記述したカーネルパラメータをシステムに即座に反映します。
sudo sysctl --system
【Tips】netfilterバイパスの設定の必要性について
実はUbuntu Server 26.04LTSではnetfilterを初期インストールしません。しかし、初期構築時に本設定を適用しておくことには以下の重要な意義があります。
- UFW設定変更時の「通信遮断」トラブル防止(最重要)
本設定を省略すると、将来的にホスト側で基幹LAN(br0)のセキュリティ強化(UFWの有効化やルール調整)を行った際、専用LAN(br1)側のVM-NAS間通信が意図せず遮断されるトラブルが発生するリスクがあります。バイパス設定を施すことで、ファイアウォール変更時の運用上の二次災害を恒久的に防ぎます。- 将来的な高速化への備え
現在、NASのストレージはSATA HDDを使用しているため、ディスクの物理的なシーケンシャル読込/書込速度(約150MB/s〜200MB/s)がボトルネックとなり、2.5Gbps LAN(実効転送速度約270MB/s〜280MB/s)の上限に達することはありません。そのため、ネットフィルタが動作していても転送速度の数値そのものに影響を及ぼすことはありません。
将来的にNAS内ストレージをSSD化、または高速なRAID構成へリプレースした際、ネットワーク側のボトルネックが排除されているため、追加の設定変更なしに2.5Gbpsラインレートの性能向上を即座に享受できます。- CPUリソースの節約
バックアップ処理や多数の小サイズファイルを転送する際、パケット数が爆発的に増加します。不要なnetfilter評価をスキップすることで、KVMサーバの余計なCPU割り込み処理を低減し、他のVMのパフォーマンスへの影響を抑えられます。
5. 仮想マシン(VM)への仮想NIC追加
VMの定義ファイル(XML)を修正し、作成した透過ブリッジ br1 を第2NICとして追加します。
1. KVM定義ファイル(XML)の修正
対象のVMを停止した状態で設定ファイルを編集します。
virsh edit <VM名>
<devices> セクション内に既存の br0 用の設定ブロック(<interface>)があるため、その直後に br1 用の設定ブロックを追加します。パフォーマンス向上のため、必ず virtio ドライバを指定します。
【修正箇所】
<devices>
<!-- 既存の基幹LAN(br0)接続用NIC -->
<interface type='bridge'>
<source bridge='br0'/>
<model type='virtio'/>
</interface>
<!-- 追加:専用LAN(br1)接続用NIC -->
<interface type='bridge'>
<source bridge='br1'/>
<model type='virtio'/>
</interface>
...
</devices>
変更を保存し、VMを起動します。
6. 疎通および動作確認
VMを起動後、ネットワークが想定通りに分離されているか検証します。
1. ゲストOS側でのIP・ルート確認
ゲストOS内(Linux / Windows)でルーティング情報を確認します。
-
Linuxゲストの場合
ip addr showおよびip routeコマンドを実行します。- 第2NICに
192.168.12.xのIPが配付されていること。 - デフォルトゲートウェイ(
0.0.0.0/0宛て)が192.168.11.1(br0側)のみを指していること。
- 第2NICに
-
Windowsゲストの場合
ipconfigおよびroute printコマンドを実行します。-
192.168.12.0セグメントのゲートウェイ表示が「リンク上 (on-link)」となり、外部へのゲートウェイが192.168.11.1のみであることを確認します。
-
2. 透過ブリッジの動作検証
ゲストOSから専用LAN側のNAS(192.168.12.253)に対して ping を実行します。
ping 192.168.12.253
疎通確認後、ゲストOS内でARPテーブルを表示します。
-
Linux :
arp -an -
Windows :
arp -a
【確認基準】
NASのIP(192.168.12.253)に対応する物理MACアドレスが直接ARPテーブルに登録されていれば、ホストの br1 がルーター(L3)を介さずに、物理直結された「L2透過ブリッジ」としてパケットを直接フォワーディングできていることを示します。