すべてのプロダクト
Search
ドキュメントセンター

Anti-DDoS:TOA カーネルモジュールをインストールしてリクエストの送信元 IP アドレスを取得する

最終更新日:Nov 09, 2025

Elastic Compute Service (ECS) インスタンスまたはデータセンターのサーバーをオリジンサーバーとして使用し、サービスのポートを Anti-DDoS Pro または Anti-DDoS Premium に追加して保護する場合、サービスへのリクエストのトラフィックは Anti-DDoS Pro または Anti-DDoS Premium によってスクラビングされた後、オリジンサーバーに転送されます。オリジンサーバーは、リクエストの送信元 IP アドレスを直接取得できません。送信元 IP アドレスを取得するには、オリジンサーバーに TCP Option Address (TOA) カーネルモジュールをインストールします。このトピックでは、Linux カーネルベースのオペレーティングシステムに TOA カーネルモジュールをインストールする方法について説明します。

シナリオ

シナリオ

説明

Anti-DDoS Proxy - ECS インスタンス

オリジンサーバーは ECS インスタンスにデプロイされます。トラフィックは Anti-DDoS Proxy によってスクラビングされ、ECS インスタンスにデプロイされているオリジンサーバーに転送されます。

Anti-DDoS Proxy - レイヤー 4 Server Load Balancer (SLB) インスタンス - ECS インスタンス

オリジンサーバーは ECS インスタンスにデプロイされます。トラフィックは Anti-DDoS Proxy によってスクラビングされます。その後、レイヤー 4 SLB インスタンスがトラフィックを ECS インスタンスにデプロイされているオリジンサーバーに転送します。

Anti-DDoS Proxy - データセンター内のサーバー

オリジンサーバーはデータセンターにデプロイされます。リクエストはまず Anti-DDoS Proxy によってスクラビングされ、その後データセンターにデプロイされているオリジンサーバーに転送されます。

使用上の注意

  • この方法は、ポートを使用して Anti-DDoS Proxy に追加された TCP ベースの非 Web サイトサービスでのみ使用できます。UDP ベースのサービスはサポートされていません。Web サイトサービスからのリクエストの送信元 IP アドレスを取得する方法の詳細については、「リクエストの送信元 IP アドレスを取得する」をご参照ください。

  • このトピックで説明する操作をテスト環境で実行し、操作が環境の安定性に影響するかどうかを確認することをお勧めします。操作が環境の安定性に影響しない場合は、本番環境で操作を実行してください。

  • root 以外のユーザーの場合は、sudo 権限が必要です。

方法 1: modprobe コマンドを実行して VTOA カーネルモジュールをロードする

この方法は Alibaba Cloud Linux 3 にのみ適しています。

  1. (任意) オペレーティングシステムの組み込み TOA カーネルモジュールをバックアップします。再起動に失敗した場合は、元のカーネルに切り替えることでオペレーティングシステムを復元できます。

  2. VTOA カーネルモジュールをロードします。

    #modprobe vtoa
  3. VTOA モジュールがロードされているかどうかを確認します。

    #lsmod | grep vtoa
  4. オペレーティングシステムの起動時に VTOA カーネルモジュールが自動的にロードされるように構成します。

    1. /etc/sysconfig/modules/vtoa.modules ファイルを作成し、次の内容をファイルに追加します。

      #!/bin/bash
      modprobe vtoa > /dev/null 2>&1
    2. 次のコマンドを実行して、vtoa.modules ファイルに実行権限を付与します。

      sudo chmod +x /etc/sysconfig/modules/vtoa.modules

方法 2: ソースコードを使用して TOA カーネルモジュールをロードする

  1. (任意) オペレーティングシステムの組み込み TOA カーネルモジュールをバックアップします。再起動に失敗した場合は、元のカーネルに切り替えることでオペレーティングシステムを復元できます。

  2. TOA ソースコードのダウンロードリンクにアクセスして、ソースコードパッケージをダウンロードします。サーバーがインターネットにアクセスしてこのファイルをダウンロードできることを確認してください。

    • カーネルバージョンが 2.x の場合は、toa_kernel2.x ファイルを使用します。

    • カーネルバージョンが 3.x の場合は、toa_kernel3.x ファイルを使用します。

    • カーネルバージョンが 4.x または 5.x の場合は、toa_kernel_common ファイルを使用します。

  3. コンパイル環境 (gcc、kernel-headers、および kernel-devel) をインストールします。

    • CentOS

      #yum install gcc kernel-headers kernel-devel -y
    • Ubuntu または Debian

      #apt-get install gcc linux-headers-$(uname -r) -y
      重要

      Debian システムでこのコマンドを実行したときにエラーが発生した場合は、次の操作を参照してコンパイル環境をインストールしてください。次の例では、カーネルバージョン 5.10.0-33-amd64 の Debian 11.11 64 ビットを実行しているサーバーを使用します。

      1. Debian_11.11_5.10.0-33-amd64.zip にアクセスしてファイルをダウンロードします。

      2. 次のコマンドを実行して、コンパイル環境をインストールします。

        sudo dpkg -i linux-headers-5.10.0-33-common_5.10.226-1_all.deb
        sudo dpkg -i linux-kbuild-5.10_5.10.237-1_amd64.deb
        sudo dpkg -i linux-compiler-gcc-10-x86_5.10.237-1_amd64.deb
        sudo dpkg -i linux-headers-5.10.0-33-amd64_5.10.226-1_amd64.deb
  4. TOA カーネルモジュールをコンパイルします。

    ソースコードパッケージを解凍し、cd コマンドを実行してフォルダを開き、ソースコードファイルをコンパイルします。コンパイルプロセス中に警告やエラーメッセージが表示されなければ、コンパイルは成功です。現在のディレクトリに toa.ko ファイルが生成されているかどうかを確認します。

    //ソースコードパッケージのパス。この例では、toa_kernel3.x ファイルのパスを使用します。
    //カーネルバージョンが 2.x の場合、#cd toa_kernel2.x/ 
    //カーネルバージョンが 3.x の場合、#cd toa_kernel3.x/ 
    //カーネルバージョンが 4.x または 5.x の場合、#cd toa_kernel_common/
    #cd toa_kernel3.x/ 
    //コンパイルを実行します。
    #make
    説明

    別のオペレーティングシステムに TOA カーネルモジュールをロードする場合は、toa.ko ファイルを別のサーバーにコピーし、次のステップを実行して TOA カーネルモジュールをロードします。

  5. TOA カーネルモジュールをロードします。

    #mv toa.ko /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/toa.ko && depmod
    #insmod /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/toa.ko
  6. TOA カーネルモジュールがロードされているかどうかを確認します。

    # lsmod | grep toa 
  7. オペレーティングシステムの起動時に TOA カーネルモジュールが自動的にロードされるように構成します。

    • CentOS

      1. /etc/sysconfig/modules/toa.modules ファイルを作成し、次の内容をファイルに追加します。

        #!/bin/bash
        if [ -e /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/toa.ko ] ;
        then
        insmod /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/toa.ko > /dev/null 2>&1
        fi
      2. 次のコマンドを実行して、toa.modules ファイルに実行権限を付与します。

        sudo chmod +x /etc/sysconfig/modules/toa.modules
    • Ubuntu または Debian

      /etc/modules-load.d/toa.conf ファイルを作成し、次の内容をファイルに追加します。

      toa
  8. sudo reboot コマンドを実行してオペレーティングシステムを再起動します。

方法 3: RPM Package Manager (RPM) を使用して TOA カーネルモジュールをロードする

サポートされているオペレーティングシステム:

  • Redhat Linux

  • CentOS 6.x

  • CentOS 7.x

  1. (任意) オペレーティングシステムの組み込み TOA カーネルモジュールをバックアップします。再起動に失敗した場合は、元のカーネルに切り替えることでオペレーティングシステムを復元できます。

  2. サーバーのオペレーティングシステムに基づいて TOA カーネルモジュールのインストールファイルをダウンロードします。サーバーがインターネットにアクセスしてこのファイルをダウンロードできることを確認してください。

  3. TOA カーネルモジュールをインストールします。

    • CentOS 7.x

      インストールファイルのディレクトリに移動し、次のコマンドを実行します。

      sudo yum localinstall kernel-3.10.0-957.21.3.el7.toa.x86_64.rpm
      説明

      依存関係の問題を防ぐために、yum localinstall コマンドを使用することをお勧めします。sudo rpm -ivh kernel-3.10.0-957.21.3.el7.toa.x86_64.rpm コマンドを使用することもできます。

    • CentOS 6.x または Red Hat Enterprise Linux

      インストールファイルのディレクトリに移動し、次のコマンドを実行します。

      sudo rpm -ivh kernel-firmware-2.6.32-696.13.2.el6.centos.plus.toa.x86_64.rpm
      sudo rpm -ivh kernel-2.6.32-696.13.2.el6.centos.plus.toa.x86_64.rpm
      説明
      • kernel-firmware が 2.6.32-696.13.2.el6.centos.plus.toa 以降を実行している場合は、上記の 2 番目のコマンドのみを使用してください。

      • インストール中に依存関係の問題が発生した場合は、--nodeps パラメーターを rpm コマンドに追加します。

      • カーネルのバージョンが TOA カーネルモジュールのバージョンよりも新しい場合は、--force パラメーターを rpm コマンドに追加してカーネルを強制的にインストールします。

  4. オペレーティングシステムの起動時に TOA カーネルモジュールが自動的にロードされるように構成します。

    1. /etc/sysconfig/modules/toa.modules ファイルを作成し、次の内容をファイルに追加します。

      • CentOS 7.x:

        #!/bin/bash
        if [ -e /lib/modules/`uname -r`/kernel/net/toa/toa.ko.xz ] ;
        then 
        modprobe toa > /dev/null 2>&1
        fi                            
      • CentOS 6.x または Red Hat Enterprise Linux:

        #!/bin/bash
        if [ -e /lib/modules/`uname -r`/kernel/net/toa/toa.ko ] ;
        then 
        modprobe toa > /dev/null 2>&1
        fi                            
    2. 次のコマンドを実行して、toa.modules ファイルに実行権限を付与します。

      sudo chmod +x /etc/sysconfig/modules/toa.modules
  5. reboot コマンドを実行してオペレーティングシステムを再起動します。

結果

TOA カーネルモジュールがインストールされると、サーバーはリクエストの送信元 IP アドレスを取得できます。

サーバーがリクエストの送信元 IP アドレスを取得できない場合は、lsmod|grep toa コマンドを実行して TOA カーネルモジュールがロードされているかどうかを確認することをお勧めします。TOA モジュールがロードされていない場合は、modprobe toa コマンドを実行してモジュールを手動でロードします。TOA カーネルモジュールがロードされた後、サーバーのアクセスログを表示し、オリジンサーバーがリクエストの送信元 IP アドレスを取得できるかどうかをテストできます。

関連操作

  • TOA カーネルモジュールを一時的に無効にするには、rmmod path/module name コマンドを実行します。

    rmmod toa.ko
  • TOA カーネルモジュールをアンインストールします。

    rmmod toa
  • TOA カーネルモジュールがアンインストールされているかどうかを確認します。「TOA unloaded」メッセージが表示された場合、TOA カーネルモジュールはアンインストールされています。

    dmesg -T

よくある質問

TOA カーネルモジュールは、ネットワーク接続を変換する際にネットワークパフォーマンスにどのように影響しますか?

TOA カーネルモジュールはバイパスモードでデプロイされます。したがって、ネットワークパフォーマンスへの影響は最小限です。

Linux カーネルをアップグレードした後に送信元 IP アドレスを取得できないのはなぜですか?

Linux カーネルをアップグレードすると、元の TOA カーネルモジュールはアップグレードされた Linux カーネルと一致しなくなります。Linux カーネルをアップグレードするたびに、TOA カーネルモジュールを再コンパイルしてインストールする必要があります。