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 にのみ適しています。
(任意) オペレーティングシステムの組み込み TOA カーネルモジュールをバックアップします。再起動に失敗した場合は、元のカーネルに切り替えることでオペレーティングシステムを復元できます。
VTOA カーネルモジュールをロードします。
#modprobe vtoaVTOA モジュールがロードされているかどうかを確認します。
#lsmod | grep vtoaオペレーティングシステムの起動時に VTOA カーネルモジュールが自動的にロードされるように構成します。
/etc/sysconfig/modules/vtoa.modulesファイルを作成し、次の内容をファイルに追加します。#!/bin/bash modprobe vtoa > /dev/null 2>&1次のコマンドを実行して、
vtoa.modulesファイルに実行権限を付与します。sudo chmod +x /etc/sysconfig/modules/vtoa.modules
方法 2: ソースコードを使用して TOA カーネルモジュールをロードする
(任意) オペレーティングシステムの組み込み TOA カーネルモジュールをバックアップします。再起動に失敗した場合は、元のカーネルに切り替えることでオペレーティングシステムを復元できます。
TOA ソースコードのダウンロードリンクにアクセスして、ソースコードパッケージをダウンロードします。サーバーがインターネットにアクセスしてこのファイルをダウンロードできることを確認してください。
カーネルバージョンが 2.x の場合は、toa_kernel2.x ファイルを使用します。
カーネルバージョンが 3.x の場合は、toa_kernel3.x ファイルを使用します。
カーネルバージョンが 4.x または 5.x の場合は、toa_kernel_common ファイルを使用します。
コンパイル環境 (gcc、kernel-headers、および kernel-devel) をインストールします。
CentOS
#yum install gcc kernel-headers kernel-devel -yUbuntu または Debian
#apt-get install gcc linux-headers-$(uname -r) -y重要Debian システムでこのコマンドを実行したときにエラーが発生した場合は、次の操作を参照してコンパイル環境をインストールしてください。次の例では、カーネルバージョン 5.10.0-33-amd64 の Debian 11.11 64 ビットを実行しているサーバーを使用します。
Debian_11.11_5.10.0-33-amd64.zip にアクセスしてファイルをダウンロードします。
次のコマンドを実行して、コンパイル環境をインストールします。
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
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 カーネルモジュールをロードします。
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.koTOA カーネルモジュールがロードされているかどうかを確認します。
# lsmod | grep toaオペレーティングシステムの起動時に TOA カーネルモジュールが自動的にロードされるように構成します。
CentOS
/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次のコマンドを実行して、
toa.modulesファイルに実行権限を付与します。sudo chmod +x /etc/sysconfig/modules/toa.modules
Ubuntu または Debian
/etc/modules-load.d/toa.confファイルを作成し、次の内容をファイルに追加します。toa
sudo rebootコマンドを実行してオペレーティングシステムを再起動します。
方法 3: RPM Package Manager (RPM) を使用して TOA カーネルモジュールをロードする
サポートされているオペレーティングシステム:
Redhat Linux
CentOS 6.x
CentOS 7.x
(任意) オペレーティングシステムの組み込み TOA カーネルモジュールをバックアップします。再起動に失敗した場合は、元のカーネルに切り替えることでオペレーティングシステムを復元できます。
サーバーのオペレーティングシステムに基づいて TOA カーネルモジュールのインストールファイルをダウンロードします。サーバーがインターネットにアクセスしてこのファイルをダウンロードできることを確認してください。
CentOS 7.x: kernel-3.10.0-957.21.3.el7.toa.x86_64.rpm
CentOS 6.x または Red Hat Enterprise Linux:
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コマンドに追加してカーネルを強制的にインストールします。
オペレーティングシステムの起動時に TOA カーネルモジュールが自動的にロードされるように構成します。
/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 fiCentOS 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
次のコマンドを実行して、
toa.modulesファイルに実行権限を付与します。sudo chmod +x /etc/sysconfig/modules/toa.modules
rebootコマンドを実行してオペレーティングシステムを再起動します。
結果
TOA カーネルモジュールがインストールされると、サーバーはリクエストの送信元 IP アドレスを取得できます。
サーバーがリクエストの送信元 IP アドレスを取得できない場合は、lsmod|grep toa コマンドを実行して TOA カーネルモジュールがロードされているかどうかを確認することをお勧めします。TOA モジュールがロードされていない場合は、modprobe toa コマンドを実行してモジュールを手動でロードします。TOA カーネルモジュールがロードされた後、サーバーのアクセスログを表示し、オリジンサーバーがリクエストの送信元 IP アドレスを取得できるかどうかをテストできます。
関連操作
TOA カーネルモジュールを一時的に無効にするには、
rmmod path/module nameコマンドを実行します。rmmod toa.koTOA カーネルモジュールをアンインストールします。
rmmod toaTOA カーネルモジュールがアンインストールされているかどうかを確認します。「TOA unloaded」メッセージが表示された場合、TOA カーネルモジュールはアンインストールされています。
dmesg -T
よくある質問
TOA カーネルモジュールは、ネットワーク接続を変換する際にネットワークパフォーマンスにどのように影響しますか?
TOA カーネルモジュールはバイパスモードでデプロイされます。したがって、ネットワークパフォーマンスへの影響は最小限です。
Linux カーネルをアップグレードした後に送信元 IP アドレスを取得できないのはなぜですか?
Linux カーネルをアップグレードすると、元の TOA カーネルモジュールはアップグレードされた Linux カーネルと一致しなくなります。Linux カーネルをアップグレードするたびに、TOA カーネルモジュールを再コンパイルしてインストールする必要があります。