Elastic Compute Service (ECS) インスタンスまたはデータセンターのサーバーをオリジンサーバーとして使用し、保護のためにサービスのポートをAnti-DDoSプロキシに追加すると、サービスのリクエストのトラフィックはAnti-DDoSプロキシによってスクラブされ、オリジンサーバーに転送されます。 オリジンサーバーは、リクエストの発信IPアドレスを直接取得できません。 送信元IPアドレスを取得するには、TCP Option Address (TOA) カーネルモジュールをオリジンサーバーにインストールします。 このトピックでは、TOAカーネルモジュールをインストールする方法について説明します。
シナリオ
シナリオ | 説明 |
Anti-DDoS Proxy - ECSインスタンス | 配信元サーバーはECSインスタンスにデプロイされています。 トラフィックはAnti-DDoS Proxyによってスクラブされ、ECSインスタンスにデプロイされている配信元サーバーに転送されます。 |
Anti-DDoS Proxy - Layer 4 Server Load Balancer (SLB) インスタンス-ECSインスタンス | 配信元サーバーはECSインスタンスにデプロイされています。 トラフィックはAnti-DDoS Proxyによってスクラブされます。 次に、レイヤー4 SLBインスタンスは、ECSインスタンスにデプロイされているオリジンサーバーにトラフィックを転送します。 |
データセンターのAnti-DDoS Proxy - Server | オリジンサーバーはデータセンターにデプロイされています。 リクエストは、まずAnti-DDoS Proxyによってスクラブされ、データセンターにデプロイされている配信元サーバーに転送されます。 |
使用上の注意
このトピックで説明するメソッドは、Linuxカーネルベースのオペレーティングシステムにのみ適用されます。
このメソッドは、ポートを使用してAnti-DDoS Proxyに追加されたTCPベースのWebサイト以外のサービスでのみ使用できます。 UDPベースのサービスはサポートされていません。 Webサイトサービスからリクエストの送信元IPアドレスを取得する方法の詳細については、「リクエストの送信元IPアドレスの取得」をご参照ください。
サーバーがTOAソースコードのダウンロードリンクにアクセスできることを確認します。
root以外のユーザーの場合は、sudo権限が必要です。
このトピックで説明する操作をテスト環境で実行し、操作が環境の安定性に影響を与えるかどうかを確認することをお勧めします。 操作が環境の安定性に影響しない場合は、運用環境で操作を実行します。
オペレーティングシステムにTOAカーネルモジュールが組み込まれている場合は、事前にモジュールをバックアップすることをお勧めします。 再起動に失敗した場合は、元のTOAカーネルモジュールに切り替えることで、オペレーティングシステムを復元できます。
TOAカーネルモジュールは、要求内のデータを変換するために使用され、バイパスモードで展開されます。 このモジュールは、ネットワークパフォーマンスへの影響が最小限です。
Linuxカーネルがアップグレードされた後、元のTOAカーネルモジュールはアップグレードされたLinuxカーネルと一致しません。 Linuxカーネルをアップグレードするたびに、TOAカーネルモジュールを再コンパイルしてインストールする必要があります。
方法1: modprobeコマンドを実行してVTOAカーネルモジュールを読み込む
この方法は、Alibaba Cloud Linux 3にのみ適しています。
VTOAカーネルモジュールをロードします。
#modprobe vtoa
VTOAモジュールがロードされているかどうかを確認します。
#lsmod | grep vtoa
オペレーティングシステムの起動時に自動的にロードされるようにVTOAカーネルモジュールを設定します。
/etc/sysconfig/modules/vtoa.mo dules
ファイルを作成し、次の内容をファイルに追加します。#!/bin/bash modprobe vtoa > /dev/null 2>&1
次のコマンドを実行して、
vtoa.mo dules
ファイルに実行権限を付与します。sudo chmod + x /etc/sysconfig/modules/vtoa.mo dules
方法2: ソースコードを使用して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 -y
UbuntuまたはDebian
#apt-get install gcc linux-headers-$(uname -r) -y
TOAカーネルモジュールをコンパイルします。
ソースコードパッケージを解凍し、cdコマンドを実行してフォルダーを開き、ソースコードファイルをコンパイルします。 コンパイルプロセス中に警告メッセージやエラーメッセージが表示されない場合、コンパイルは成功です。 カレントディレクトリにtoa.koファイルが生成されているか確認してください。
// ソースコードパッケージのパス。 この例では。 toa_kernel3.xファイルのパスが使用されます。 # cd toa_kernel3.x / // コンパイルを実行します。 # メイク
説明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.ko
TOAカーネルモジュールがロードされているかどうかを確認します。
# lsmod | grep toa
オペレーティングシステムの起動時に自動的にロードされるようにTOAカーネルモジュールを設定します。
CentOS
/etc/sysconfig/modules/toa.mo dules
ファイルを作成し、次の内容をファイルに追加します。#!/bin/bash [ -e /lib/modules/'uname -r'/kernel/net/netfilter/ipvs/toa.ko ] ; その後、insmod /lib/modules/'uname -r'/kernel/net/netfilter/ipvs/toa.ko > /dev/null 2>&1 fi
次のコマンドを実行して、
toa.mo dules
ファイルに実行権限を付与します。sudo chmod + x /etc/sysconfig/modules/toa.mo dules
UbuntuまたはDebian
/etc/modules-load.d/toa.conf
ファイルを作成し、次の内容をファイルに追加します。トア
sudo reboot
コマンドを実行して、オペレーティングシステムを再起動します。
方法3: RPMパッケージマネージャ (RPM) を使用してTOAカーネルモジュールを読み込む
サポートされるオペレーティングシステム:
Redhat Linux
CentOS 6.x
CentOS 7.x
サーバーのオペレーティングシステムに基づいて、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カーネルモジュールのバージョンよりも新しい場合は、
rpm
コマンドに-- force
パラメーターを追加して、カーネルを強制的にインストールします。
オペレーティングシステムの起動時に自動的にロードされるようにTOAカーネルモジュールを設定します。
/etc/sysconfig/modules/toa.mo dules
ファイルを作成し、次の内容をファイルに追加します。CentOS 7.x:
#!/bin/bash [ -e /lib/modules/'uname -r'/kernel/net/toa/toa.ko.xz ] ; その後、modprobe toa > /dev/null 2>&1 fi
CentOS 6.xまたはRed Hat Enterprise Linux:
#!/bin/bash [ -e /lib/modules/'uname -r'/kernel/net/toa/toa.ko ] ; その後、modprobe toa > /dev/null 2>&1 fi
次のコマンドを実行して、
toa.mo dules
ファイルに実行権限を付与します。sudo chmod + x /etc/sysconfig/modules/toa.mo dules
reboot
コマンドを実行して、オペレーティングシステムを再起動します。
結果
TOAカーネルモジュールがインストールされた後、サーバは、要求の発信IPアドレスを取得することができる。
サーバーがリクエストの送信元IPアドレスを取得できない場合は、lsmod | grep toa
コマンドを実行して、TOAカーネルモジュールがロードされているかどうかを確認することを推奨します。 TOAモジュールがロードされていない場合は、modprobe toa
コマンドを実行してモジュールを手動でロードします。 TOAカーネルモジュールがロードされた後、サーバーアクセスログを表示し、オリジンサーバーがリクエストの送信元IPアドレスを取得できるかどうかをテストできます。
参照
TOAカーネルモジュールを一時的に無効にするには、
rmmod path/TOA kernel module name
コマンドを実行します。rmmod toa.ko
TOAカーネルモジュールをアンインストールします。
rmmod toa
TOAカーネルモジュールがアンインストールされているかどうかを確認します。 「TOAアンロード」メッセージが表示されると、TOAカーネルモジュールがアンインストールされます。
dmesg -T