OMV SMBマルチチャンネル最適化・永続化
1. はじめに
Linux はデフォルトで「弱ホストモデル(Weak Host Model)」というルーティング仕様を採用しています。 同一サブネット(例:192.168.11.x)に複数の物理ポートを所属させて SMB マルチチャンネルを構成した場合、Windows(クライアント)からの書き込み(アップロード)は分散されますが、Linux からの応答(ダウンロード)パケットが全てデフォルトルートの単一ポートに固着(逆流)し、ダウンロード速度が頭打ちになるボトルネックが発生します。
本構成では、「強ホストモード(ソースベースルーティング)」をポリシールーティングで強制し、「パケットが届いたポートと同じポートから必ず返信させる」ことでボトルネックを完全に解消。双方向で理論限界値を引き出す。
2. ネットワーク環境
- OS: Linux 7.0.10+Debian 13/ OpenMediaVault 8.3.1-3
- ネットワーク管理: systemd-networkd
- 対象ポートと固定IPアドレス:
- enp1s0f0 ➔ 192.168.11.87 (ルートテーブル番号: 101)
- enp1s0f1 ➔ 192.168.11.88 (ルートテーブル番号: 102)
- 対象サブネット: 192.168.11.0/24
3. 設定手順(3ステップ)
【ステップ1】ポリシールーティング・スクリプトの作成
外部ファイルに依存せず、数字のテーブル番号(101, 102)を直接指定して動的にカーネルを制御する。
- ファイル配置パス: /etc/network/if-up.d/99-policy-routing
- 作成・上書きコマンド:
Bash
sudo tee /etc/network/if-up.d/99-policy-routing << 'EOF'
#!/bin/bash
# インターフェース名とテーブル番号の定義
TABLE_ENP1S0F0=101
TABLE_ENP1S0F1=102
# 1. 各カスタムテーブル(101, 102)に対象セグメントのルートを強制登録
ip route add 192.168.11.0/24 dev enp1s0f0 table $TABLE_ENP1S0F0 2>/dev/null || ip route change 192.168.11.0/24 dev enp1s0f0 table $TABLE_ENP1S0F0
ip route add 192.168.11.0/24 dev enp1s0f1 table $TABLE_ENP1S0F1 2>/dev/null || ip route change 192.168.11.0/24 dev enp1s0f1 table $TABLE_ENP1S0F1
# 2. 各IP(.87, .88)から送信されるパケットは、それぞれのテーブルを必ずルックアップさせる(強ホスト化)
ip rule show | grep -q "from 192.168.11.87 lookup $TABLE_ENP1S0F0" || ip rule add from 192.168.11.87 lookup $TABLE_ENP1S0F0
ip rule show | grep -q "from 192.168.11.88 lookup $TABLE_ENP1S0F1" || ip rule add from 192.168.11.88 lookup $TABLE_ENP1S0F1
# ルーティングキャッシュのクリア
ip route flush cache
EOF
- 実行権限の付与:
Bash
sudo chmod +x /etc/network/if-up.d/99-policy-routing
【ステップ2】systemd による自動起動
systemd-networkd 環境下で、OS起動時・ネットワーク復旧時に上記スクリプトを確実に自動実行させるためのサービス化設定。
- ファイル配置パス: /etc/systemd/system/smb-policy-routing.service
- 作成コマンド:
Bash
sudo tee /etc/systemd/system/smb-policy-routing.service << 'EOF'
[Unit]
Description=Samba Multi-Channel Policy Routing for 10GbE
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/etc/network/if-up.d/99-policy-routing
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
- サービスの登録と即時有効化:
Bash
# systemdの設定をリロード
sudo systemctl daemon-reload
# サーバー起動時の自動実行(永続化)を有効化
sudo systemctl enable smb-policy-routing.service
# サービスを手動で即時開始
sudo systemctl start smb-policy-routing.service
【ステップ3】動作・正常性の確認コマンド
① Linux カーネルルールの確認
Bash
ip rule show
正常時の出力事実:
Plaintext
0: from all lookup local
32764: from 192.168.11.88 lookup 102
32765: from 192.168.11.87 lookup 101
32766: from all lookup main
32767: from all lookup default
② systemd 自動起動ステータスの確認
Bash
sudo systemctl status smb-policy-routing.service
正常時の出力事実: 緑色の文字で active (exited) と表示され、かつ status=0/SUCCESS で終了していること。
4. OMV / Samba 側の重要ポイント
- OMV 7.x(Samba 4.22.8以降)のデフォルト状態において、内部で最初から server multi channel support = Yes、および aio read size = 1 / aio write size = 1 が標準搭載されて機能している。
- したがって、OMV管理画面の「サービス」>「SMB/CIFS」>「設定」>「追加オプション」欄は、何かを記述するよりも『完全に空欄(何も書かない)』に保つことが、最も競合が起きず、最も安定して最高速を引き出せるクリーンな原状回復となる。