28.4. MPTCP アプリケーションの複数パスの永続的な設定

nmcli コマンドを使用してマルチパス TCP (MPTCP) を設定し、ソースシステムと宛先システムの間に複数のサブフローを永続的に確立できます。サブフローは、さまざまなリソース、宛先へのさまざまなルート、さまざまなネットワークを使用できます。たとえばイーサネット、セルラー、wifi などです。その結果、接続が組み合わされ、ネットワークの回復力とスループットが向上します。

ここで使用した例では、サーバーは次のネットワークインターフェイスを使用します。

  • enp4s0:192.0.2.1/24
  • enp1s0:198.51.100.1/24
  • enp7s0:192.0.2.3/24

ここで使用した例では、クライアントは次のネットワークインターフェイスを使用します。

  • enp4s0f0:192.0.2.2/24
  • enp4s0f1:198.51.101.2/24
  • enp6s0:192.0.2.5/24

前提条件

  • 関連するインターフェイスでデフォルトゲートウェイを設定している

手順

  1. カーネルで MPTCP ソケットを有効にします。

    # echo "net.mptcp.enabled=1" > /etc/sysctl.d/90-enable-MPTCP.conf
    # sysctl -p /etc/sysctl.d/90-enable-MPTCP.conf
  2. オプション:RHEL カーネルのサブフロー制限のデフォルトは 2 です。不足する場合、以下を実行します。

    1. 次の内容で /etc/systemd/system/set_mptcp_limit.service ファイルを作成します。

      [Unit]
      Description=Set MPTCP subflow limit to 3
      After=network.target
      
      [Service]
      ExecStart=ip mptcp limits set subflows 3
      Type=oneshot
      
      [Install]
      WantedBy=multi-user.target

      ワンショット ユニットは、各ブートプロセス中にネットワーク (network.target) が動作した後に ip mptcp limits set subflows 3 コマンドを実行します。

      ip mptcp limits set subflows 3 コマンドは、各接続の 追加 サブフローの最大数を設定するため、合計が 4 になります。追加サブフローは最大 3 つです。

    2. set_mptcp_limit サービスを有効にします。

      # systemctl enable --now set_mptcp_limit
  3. 接続のアグリゲーションに使用するすべての接続プロファイルで MPTCP を有効にします。

    # nmcli connection modify <profile_name> connection.mptcp-flags signal,subflow,also-without-default-route

    connection.mptcp-flags パラメーターは、MPTCP エンドポイントと IP アドレスフラグを設定します。MPTCP が NetworkManager 接続プロファイルで有効になっている場合、設定により、関連するネットワークインターフェイスの IP アドレスが MPTCP エンドポイントとして設定されます。

    デフォルトでは、デフォルトゲートウェイがない場合、NetworkManager は MPTCP フラグを IP アドレスに追加しません。そのチェックをバイパスしたい場合は、also-without-default-route フラグも使用する必要があります。

検証

  1. MPTCP カーネルパラメーターが有効になっていることを確認します。

    # sysctl net.mptcp.enabled
    net.mptcp.enabled = 1
  2. デフォルトでは不足する場合に備えて、サブフロー制限を適切に設定していることを確認します。

    # ip mptcp limit show
    add_addr_accepted 2 subflows 3
  3. アドレスごとの MPTCP 設定が正しく設定されていることを確認します。

    # ip mptcp endpoint show
    192.0.2.1 id 1 subflow dev enp4s0
    198.51.100.1 id 2 subflow dev enp1s0
    192.0.2.3 id 3 subflow dev enp7s0
    ...
  4. アドレスごとの MPTCP 設定が正しく設定されていることを確認します。

    # ip mptcp endpoint show
    192.0.2.1 id 1 subflow dev enp4s0
    198.51.100.1 id 2 subflow dev enp1s0
    192.0.2.3 id 3 subflow dev enp7s0
    192.0.2.4 id 4 subflow dev enp3s0
    ...