ebichumangのブログ

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アドレス:
    1. enp1s0f0 ➔ 192.168.11.87 (ルートテーブル番号: 101)
    2. 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」>「設定」>「追加オプション」欄は、何かを記述するよりも『完全に空欄(何も書かない)』に保つことが、最も競合が起きず、最も安定して最高速を引き出せるクリーンな原状回復となる。