A10 Thunder(vThunder、ACOS 5.2.0)でサーバに負荷分散するとき、サーバからの応答が必ず Thunder を通るように、送信元 NAT を使うことがあります。特にワンアーム構成では、サーバの応答が Thunder を通らずにクライアントへ返ってしまうため、送信元 NAT が必要です。この記事では、Thunder で設定できる3種類の送信元 NAT を設定し、セッションの表示で変換結果を確かめます。
- 送信元 NAT が必要な理由と、セッション表示の見方
- Source NAT Auto(Thunder のインタフェースのアドレスで変換)の設定
- Pool アドレス(指定した範囲のアドレスで変換)の設定
- Pool グループ(複数の Pool をまとめて変換)の設定
構成は 【A10 Thunder】サーバ負荷分散(L4)の基本設定と動作確認 5.2.0 のものを使います。先にこちらの記事をお読みください。
送信元 NAT の役割
送信元 NAT をしない場合、Thunder はクライアントの IP アドレスを送信元のまま、サーバへ要求を転送します。サーバは応答をクライアントの IP アドレスあてに返すため、サーバのデフォルトゲートウェイが Thunder でなければ、応答は Thunder を通りません。送信元 NAT をすると、サーバに届く要求の送信元が Thunder のアドレスになり、応答は必ず Thunder に返ります。
送信元 NAT をしない状態で、セッション(ADC ›› SLB ›› Session)を見ると、Reverse Dest がクライアントの IP アドレスになっています。
この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。クライアントのグローバル IP アドレスは伏せています。
| Protocol | Forward Source | Forward Dest | Reverse Source | Reverse Dest |
|---|---|---|---|---|
| Tcp | (伏せています):51102 | 10.0.10.200:80 | 10.0.200.100:80 | 1(伏せています):51102 |
| 列 | 意味 |
|---|---|
| Forward Source/Dest | クライアントから届いた要求の送信元と宛先です。宛先は VIP(10.0.10.200:80)です。 |
| Reverse Source/Dest | サーバから返ってくる応答の送信元と宛先です。Reverse Dest は、サーバから見た要求の送信元(応答の宛先)にあたります。 |
| 1 Reverse Dest | 送信元 NAT をしていないので、クライアントの IP アドレスとポートのままです。 |
送信元 NAT は、仮想サーバの仮想ポートごとに設定します。この記事では、次の3つの方法を確かめます。
| 方法 | 変換後の送信元 | CLI |
|---|---|---|
| Source NAT Auto | Thunder のインタフェースのアドレス | source-nat auto |
| Pool アドレス | 指定したアドレス範囲 | source-nat pool Pool名 |
| Pool グループ | 複数の Pool をまとめたもの | source-nat pool グループ名 |
Source NAT Auto
Thunder のインタフェースのアドレスで変換する場合は、仮想ポートで Source NAT Auto を有効にします。Pool を作る必要がなく、いちばん手軽な方法です。
仮想ポートを開く
ADC ›› SLB ›› Virtual Servers で、仮想サーバ(vip-web)の Edit をクリックします。
| Status | Name | Actions |
|---|---|---|
| vip-web | 1Edit Clone |
Virtual Port の一覧で、ポート 80 の Edit をクリックします。
| Port / Port Range | Protocol | Actions |
|---|---|---|
| 80 | tcp | 1Edit |
Source NAT Auto を有効にする
Source NAT Auto にチェックを入れ、仮想ポートと仮想サーバのそれぞれで Update をクリックします。
| Name | |
| Protocol | tcp |
| Port or Port Range | 80 |
| Connection Limit | 64000000 |
| Action | Enable |
| Source NAT Pool | |
| 1Source NAT Auto | ☑ |
| Precedence | ☐ |
| IP-RR | ☐ |
| Service Group | sg-web |
| ⋮ (中略) | |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Source NAT Auto | チェックを入れます。サーバへ転送するときの送信元を、Thunder のインタフェースのアドレスに変換します。 |
| 2 | Update | 仮想ポートの画面で Update をクリックし、続けて仮想サーバの画面でも Update をクリックします。 |
セッションを確認する
クライアントからアクセスしたあと、セッション(ADC ›› SLB ›› Session)を見ると、Reverse Dest が Thunder のインタフェースのアドレス 10.0.200.149 になっています。
| Protocol | Forward Source | Forward Dest | Reverse Source | Reverse Dest |
|---|---|---|---|---|
| Tcp | (伏せています):51192 | 10.0.10.200:80 | 10.0.200.173:80 | 110.0.200.149:24130 |
| Tcp | (伏せています):51196 | 10.0.10.200:80 | 10.0.200.173:80 | 10.0.200.149:24132 |
| Tcp | (伏せています):51193 | 10.0.10.200:80 | 10.0.200.100:80 | 10.0.200.149:24131 |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Reverse Dest(10.0.200.149) | 送信元が Thunder のサーバ側のインタフェースのアドレスに変換されています。ポート番号も Thunder が割り当てた番号(24130 など)に変わっており、同じアドレスで複数のセッションを区別しています。 |
CLI で設定する場合は、仮想ポートの配下で source-nat auto を設定します。
vThunder
vThunder(config)#slb virtual-server vip-web 10.0.10.200
vThunder(config-slb vserver)#port 80 tcp
vThunder(config-slb vserver-vport)#source-nat auto
Source NAT Auto では、サーバにつながる Thunder のインタフェースのアドレスが使われます。VRRP-A で冗長化している場合は、切り替わってもアドレスが変わらないよう、フローティング IP アドレスが使われます。
Pool アドレス
指定したアドレス範囲で変換したい場合は、Pool アドレスを使います。ここでは 10.0.200.10〜10.0.200.12 の範囲の Pool を作り、仮想ポートに適用します。
Pool を作成する
ADC ›› IP Source NAT ›› IPv4 Pools で Create をクリックし、次のように設定して Create をクリックします。
| 1Name | snat_pool_1 |
| 2Start Address | 10.0.200.10 |
| End Address | 10.0.200.12 |
| 3Netmask | /24 |
| Gateway | |
| VRID | |
| Scaleout Device ID | |
| 4IP-RR | ◉ Enable○ Disable |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Name | Pool の名前。snat_pool_1 にします。 |
| 2 | Start Address/End Address | 変換に使うアドレス範囲の最初と最後。10.0.200.10 と 10.0.200.12 にします。 |
| 3 | Netmask | Pool のアドレスのネットマスク。/24 にします。 |
| 4 | IP-RR | Pool のアドレスをラウンドロビンで順に使います。Enable を選びます。 |
| 5 | Create | Pool を作成します。 |
Pool のアドレスは、サーバから返ってくる応答の宛先になります。今回はサーバと同じセグメント(10.0.200.0/24)の空きアドレスを使っています。応答がこれらのアドレスあてに Thunder へ戻るよう、ほかの機器と重ならないアドレスを選びます。
仮想ポートに適用する
Source NAT Auto と同じ手順で仮想ポートを開き、Source NAT Pool で snat_pool_1 を選びます。前の手順で Source NAT Auto にチェックを入れた場合は、チェックを外します。仮想ポートと仮想サーバのそれぞれで Update をクリックします。
| Protocol | tcp |
| Port or Port Range | 80 |
| ⋮ (中略) | |
| 1Source NAT Pool | snat_pool_1 |
| 2Source NAT Auto | ☐ |
| Service Group | sg-web |
| Template TCP | |
| Persist Type | ○ Destination IP○ SSL SID○ Source IP |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Source NAT Pool | 送信元 NAT に使う Pool。snat_pool_1 を選びます。 |
| 2 | Source NAT Auto | チェックを外したままにします。 |
| 3 | Update | 仮想ポートと仮想サーバのそれぞれで Update をクリックします。 |
セッションを確認する
セッションを見ると、Reverse Dest が Pool の範囲のアドレス(今回は 10.0.200.10 と 10.0.200.11)になっています。
| Protocol | Forward Source | Forward Dest | Reverse Source | Reverse Dest |
|---|---|---|---|---|
| Tcp | (伏せています):51428 | 10.0.10.200:80 | 10.0.200.100:80 | 110.0.200.11:2050 |
| Tcp | (伏せています):51425 | 10.0.10.200:80 | 10.0.200.173:80 | 10.0.200.10:2049 |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Reverse Dest(10.0.200.10、10.0.200.11) | 送信元が Pool の範囲のアドレスに変換されています。IP-RR を有効にしているので、セッションによって使われるアドレスが分かれています。 |
CLI で設定する場合は、ip nat pool で Pool(snat_pool_1)を作り、仮想ポートの配下で source-nat pool に Pool の名前を指定します。
vThunder
vThunder(config)#ip nat pool snat_pool_1 10.0.200.10 10.0.200.12 netmask /24 ip-rr vThunder(config)#slb virtual-server vip-web 10.0.10.200 vThunder(config-slb vserver)#port 80 tcp vThunder(config-slb vserver-vport)#source-nat pool snat_pool_1
Pool グループ
1つの Pool は連続したアドレス範囲です。飛び飛びのアドレスで変換したいときは、複数の Pool をまとめた Pool グループを使います。ここでは 10.0.200.13、10.0.200.15、10.0.200.17 の3つのアドレスで変換します。
Pool を3つ作成する
Pool アドレスと同じ手順で、アドレスを1つずつ持つ Pool を3つ作ります。
| Pool Name | Start Address | End Address | Netmask |
|---|---|---|---|
| 1snat_pool_group_member1 | 10.0.200.13 | 10.0.200.13 | /24 |
| snat_pool_group_member2 | 10.0.200.15 | 10.0.200.15 | /24 |
| snat_pool_group_member3 | 10.0.200.17 | 10.0.200.17 | /24 |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Start Address=End Address | 最初と最後を同じアドレスにして、1つのアドレスだけを持つ Pool にしています。 |
Pool グループを作成する
ADC ›› IP Source NAT ›› Groups で Create をクリックし、次のように設定して Create をクリックします。
| 1Pool Group Name | snat_pool_group1 |
| 2Group Type | IPv4 |
| VRID | |
| 3IPv4 Member | ☑ snat_pool_group_member1 ☑ snat_pool_group_member2 ☑ snat_pool_group_member3 |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Pool Group Name | Pool グループの名前。snat_pool_group1 にします。 |
| 2 | Group Type | IPv4 を選びます。 |
| 3 | IPv4 Member | メンバーにする Pool。STEP 1 で作った3つの Pool にチェックを入れます。 |
| 4 | Create | Pool グループを作成します。 |
Groups の一覧に、作成した Pool グループとメンバーが表示されます。
| Name | Member List |
|---|---|
| snat_pool_group1 | snat_pool_group_member1, snat_pool_group_member2, snat_pool_group_member3 |
仮想ポートに適用する
仮想ポートを開き、Source NAT Pool で snat_pool_group1 を選びます。一覧には Pool と Pool グループの両方が表示されます。仮想ポートと仮想サーバのそれぞれで Update をクリックします。
| Protocol | tcp |
| ⋮ (中略) | |
| 1Source NAT Pool |
選べる Pool と Pool グループ
snat_pool_group_member1 snat_pool_group_member2 snat_pool_group_member3 snat_pool_group1 |
| Source NAT Auto | ☐ |
| Service Group | sg-web |
| ⋮ (中略) | |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Source NAT Pool | Pool グループ snat_pool_group1 を選びます。 |
| 2 | Update | 仮想ポートと仮想サーバのそれぞれで Update をクリックします。 |
セッションを確認する
セッションを見ると、Reverse Dest が Pool グループのアドレスになっています。今回の3つのセッションは、どれも 10.0.200.13 に変換されていました。
| Protocol | Forward Source | Forward Dest | Reverse Source | Reverse Dest |
|---|---|---|---|---|
| Tcp | (伏せています):51630 | 10.0.10.200:80 | 10.0.200.100:80 | 110.0.200.13:2048 |
| Tcp | (伏せています):51629 | 10.0.10.200:80 | 10.0.200.173:80 | 10.0.200.13:2049 |
| Tcp | (伏せています):51633 | 10.0.10.200:80 | 10.0.200.173:80 | 10.0.200.13:2051 |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Reverse Dest(10.0.200.13) | 送信元が Pool グループのメンバー(snat_pool_group_member1)のアドレスに変換されています。同じアドレスでも、ポート番号(2048、2049、2051)でセッションを区別しています。 |
CLI で設定する場合は、ip nat pool-group で Pool グループを作って Pool をメンバーに登録し、仮想ポートの配下で source-nat pool に Pool グループの名前を指定します。
vThunder
vThunder(config)#ip nat pool snat_pool_group_member1 10.0.200.13 10.0.200.13 netmask /24 vThunder(config)#ip nat pool snat_pool_group_member2 10.0.200.15 10.0.200.15 netmask /24 vThunder(config)#ip nat pool snat_pool_group_member3 10.0.200.17 10.0.200.17 netmask /24 vThunder(config)#ip nat pool-group snat_pool_group1 vThunder(config-pool-group:snat_pool_group1)#member snat_pool_group_member1 vThunder(config-pool-group:snat_pool_group1)#member snat_pool_group_member2 vThunder(config-pool-group:snat_pool_group1)#member snat_pool_group_member3 vThunder(config)#slb virtual-server vip-web 10.0.10.200 vThunder(config-slb vserver)#port 80 tcp vThunder(config-slb vserver-vport)#source-nat pool snat_pool_group1
まとめ
| 方法 | GUI の設定 | CLI(仮想ポートの配下) | 変換後の送信元 |
|---|---|---|---|
| Source NAT Auto | 仮想ポートの Source NAT Auto にチェック | source-nat auto | Thunder のインタフェースのアドレス |
| Pool アドレス | IP Source NAT ›› IPv4 Pools で作成し、Source NAT Pool で選ぶ | source-nat pool snat_pool_1 | Pool の範囲のアドレス |
| Pool グループ | IP Source NAT ›› Groups で作成し、Source NAT Pool で選ぶ | source-nat pool snat_pool_group1 | メンバーの Pool のアドレス |
どの方法でも、変換されたかどうかはセッション(ADC ›› SLB ›› Session)の Reverse Dest で確かめられます。Reverse Dest がクライアントの IP アドレスのままなら、送信元 NAT は効いていません。
コメント