BIG-IP で設定するアドレス変換(NAT)の種類と、それぞれの設定・動作を確かめます。BIG-IP からサーバ(Node)に振り分けるとき、サーバの応答を必ず BIG-IP に戻すために、送信元アドレスを変換(SNAT)することがあります。BIG-IP をネットワークの片側だけにつなぐワンアーム構成では、サーバの応答が BIG-IP を通らないので、送信元の変換が必要です。
- NAT List:宛先アドレスを 1 対 1 で変換する
- SNAT:特定の送信元からの通信の送信元アドレスを変換する
- NAT List と SNAT の動作をキャプチャと統計で確かめる
- SNAT Pool:Virtual Server の通信の送信元を Pool のアドレスに変換する
- Auto Map:Virtual Server の通信の送信元を Self IP に変換する
この記事は、次の記事で作った構成(Virtual Server Web-VS:10.0.1.100、Web-01:10.0.2.24、Web-02:10.0.2.71)を使います。
BIG-IP 16.1.2 で検証しています。16.1 系はすでに F5 のサポート期間が終わっているので、これから構築する場合はサポート中のバージョンを選んでください。クライアントのグローバル IP アドレスは伏せています。
送信元の変換が必要な理由
サーバは、受け取ったパケットの送信元アドレスに向けて応答します。送信元がクライアントのアドレスのままだと、サーバの応答はデフォルトゲートウェイを通ってクライアントに直接返り、BIG-IP を通りません。BIG-IP は自分が転送した接続の応答を受け取れないので、通信が成り立たなくなります。
送信元を BIG-IP のアドレスに変換しておけば、サーバの応答の宛先が BIG-IP になり、応答は必ず BIG-IP を通って戻ります。
BIG-IP のアドレス変換には、次の4つがあります。
| 種類 | 変換するもの | 対応 | 適用する範囲 |
|---|---|---|---|
| NAT List | 宛先(外から NAT Address 宛ての通信)と送信元(Origin Address から出ていく通信) | 1 対 1 | BIG-IP 全体 |
| SNAT | 指定した送信元(Origin)からの通信の送信元 | 多 対 1 | BIG-IP 全体 |
| SNAT Pool | Virtual Server 宛ての通信の送信元を、Pool に登録したアドレスに | 多 対 1(または多 対 多) | 適用した Virtual Server |
| Auto Map | Virtual Server 宛ての通信の送信元を、BIG-IP の Self IP に | 多 対 1 | 適用した Virtual Server |
BIG-IP 全体で変換する(NAT List/SNAT)
Virtual Server に関係なく、ルータのように BIG-IP を通る通信をアドレス変換したいときは、NAT List や SNAT を使います。
NAT List(1 対 1 NAT)
NAT List は、NAT Address と Origin Address を 1 対 1 で対応づけます。クライアントが NAT Address 宛てに送ると、BIG-IP は宛先を Origin Address に変換して転送します。逆に Origin Address から出ていく通信は、送信元が NAT Address に変換されます。ポート番号は変換しません。ここでは、NAT Address 10.0.1.101 と Web-01(10.0.2.24)を対応づけます。
Local Traffic ›› Address Translation ›› NAT List を開き、右上の Create をクリックします。
この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
| 1Name | NATLIST-1 |
| 2NAT Address | 10.0.1.101 |
| 3Origin Address | 10.0.2.24 |
| State | Enabled |
| Traffic Group | ☑ Inherit traffic group from current partition / path traffic-group-1 (floating) |
| ARP | ☑ Enabled |
| VLAN / Tunnel Traffic | * All |
| Auto Last Hop | Default |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Name | 任意の名前。ここでは NATLIST-1 |
| 2 | NAT Address | クライアントが宛先にする変換後のアドレス。10.0.1.101 |
| 3 | Origin Address | NAT Address に対応づける実際のアドレス(Web-01)。10.0.2.24 |
| 4 | Finished | クリックすると、NAT List に NATLIST-1 が登録されます |
SNAT(Secure Network Address Translation)
SNAT は、指定した送信元(Origin)からの通信の送信元アドレスを、指定したアドレスに変換します。複数の送信元を1つのアドレスにまとめる多対 1 の変換です。ここでは、60.0.0.0/8 からの通信の送信元を 10.0.1.102 に変換します。
Local Traffic ›› Address Translation ›› SNAT List を開き、右上の Create をクリックします。
| 1Name | SNAT-1 |
| Description |
| 2Translation | IP Address 10.0.1.102 |
| 3Origin | Address List |
| Address List | Address/Prefix Length: 60.0.0.0/8 Add60.0.0.0/8 Edit Delete |
| Source Port | Preserve |
| VLAN / Tunnel Traffic | * All |
| Auto Last Hop | Default |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Name | 任意の名前。ここでは SNAT-1 |
| 2 | Translation | IP Address を選び、変換後の送信元アドレス 10.0.1.102 を入力します |
| 3 | Origin/Address List | 変換の対象にする送信元。Origin を Address List にし、Address/Prefix Length に 60.0.0.0/8 を入力して Add で一覧に登録します |
| 4 | Finished | クリックすると、SNAT List に SNAT-1 が登録されます |
NAT List と SNAT の動作を確かめる
NAT List と SNAT を組み合わせ、BIG-IP の外にあるクライアントから、内部の Web-01 にアドレス変換でアクセスできるかを確かめます。宛先は NAT List で、送信元は SNAT で変換されます。
クライアントのブラウザで http://10.0.1.101 を開くと、Web-01 のページが表示されます。
BIG-IP を通るパケットをキャプチャすると、行きと戻りでアドレスが変換されていることがわかります。
| No. | Source | Destination | Protocol | Info | 区間 |
|---|---|---|---|---|---|
| 1 | xx.xx.xxx.xxx | 10.0.1.101 | TCP | 54081 → 80 [SYN] Seq=0 | クライアント→BIG-IP |
| 2 | 10.0.1.102 | 10.0.2.24 | TCP | 54081 → 80 [SYN] Seq=0 | BIG-IP→Web-01 |
| 3 | 10.0.2.24 | 10.0.1.102 | TCP | 80 → 54081 [SYN, ACK] | Web-01→BIG-IP |
| 4 | 10.0.1.101 | xx.xx.xxx.xxx | TCP | 80 → 54081 [SYN, ACK] | BIG-IP→クライアント |
| No. | 区間 | 変換の内容 |
|---|---|---|
| 1 | クライアント→BIG-IP | 宛先は NAT Address の 10.0.1.101 |
| 2 | BIG-IP→Web-01 | 宛先が Origin Address の 10.0.2.24 に(NAT List)、送信元が 10.0.1.102 に(SNAT)変換される。ポート番号 54081 はそのまま |
| 3 | Web-01→BIG-IP | Web-01 は 10.0.1.102 に応答するので、応答が BIG-IP に戻る |
| 4 | BIG-IP→クライアント | 送信元が 10.0.1.101、宛先がクライアントのアドレスに戻される |
NAT の統計
Statistics ›› Module Statistics ›› Local Traffic を開き、Statistics Type を NATs にすると、NAT List ごとの通信量や接続数を確認できます。
| 1Statistics Type | NATs |
| Data Format | Normalized |
| Auto Refresh | Disabled |
| Bits | Packets | Connections | |||||||
|---|---|---|---|---|---|---|---|---|---|
| NAT | Partition / Path | State | In | Out | In | Out | Current | Maximum | Total |
| 2NATLIST-1 | Common | Enabled | 255.3K | 1.1M | 246 | 154 | 0 | 7 | 64 |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Statistics Type | NATs を選ぶと NAT List の統計が表示されます |
| 2 | NATLIST-1 | NAT List ごとの送受信量(Bits/Packets)と接続数(Current/Maximum/Total) |
Virtual Server で送信元を変換する(SNAT Pool/Auto Map)
Virtual Server 宛ての通信の送信元を変換するには、SNAT Pool か Auto Map を Virtual Server に適用します。宛先は、Virtual Server の働きで Virtual Server のアドレスから Node のアドレスに変換されます。
SNAT Pool
変換後の送信元アドレスを SNAT Pool に登録し、Virtual Server に適用します。ここでは 10.0.1.103 を登録し、Virtual Server(Web-VS:10.0.1.100)に適用します。
SNAT Pool を作る
Local Traffic ›› Address Translation ›› SNAT Pool List を開き、右上の Create をクリックします。
| 1Name | SNAT-Pool-1 |
| 2Member List | IP Address: 10.0.1.103 Add10.0.1.103 Edit Delete |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Name | 任意の名前。ここでは SNAT-Pool-1 |
| 2 | Member List | 変換後の送信元アドレス。IP Address に 10.0.1.103 を入力して Add で登録します |
| 3 | Finished | クリックすると、SNAT Pool List に SNAT-Pool-1 が登録されます |
Virtual Server に適用する
Local Traffic ›› Virtual Servers ›› Virtual Server List で Web-VS をクリックします。Source Address Translation を SNAT にすると SNAT Pool の欄が現れるので、SNAT-Pool-1 を選んで Update をクリックします。
| ⋮ (中略) | |
| 1Source Address Translation | SNAT |
| SNAT Pool | SNAT-Pool-1 |
| ⋮ (中略) | |
動作を確かめる
クライアントのブラウザで http://10.0.1.100 を開くと、Web-01 のページが表示されます。tmsh の show sys connection で、BIG-IP が持っている接続の情報を見ると、アドレス変換の様子がわかります。
BIG-IP(tmsh)
admin@(BIG-IP-1)(cfg-sync Standalone)(Active)(/Common)(tmos)# show sys connection
Really display 1000 connections? (y/n) y
Sys::Connections
xx.xx.xxx.xxx:57958 10.0.1.100:80 10.0.1.103:57958 10.0.2.24:80 tcp 3 (tmm: 1) none none
1行の前半2つがクライアントと BIG-IP の間(Client-side)、後半2つが BIG-IP と Node の間(Server-side)の接続です。Web-01 に転送するとき、送信元が SNAT Pool の 10.0.1.103 に変換されていることがわかります。送信元ポート 57958 は変わっていません。
Auto Map
Auto Map を適用すると、BIG-IP の Self IP(BIG-IP 自身のインタフェースのアドレス)を使って送信元を変換します。SNAT Pool のように変換用のアドレスを別に用意する必要はありません。冗長構成では、フェイルオーバーしても同じアドレスを使えるように Floating Self IP を用意しておくのが一般的です。
今回は1台構成で、Network ›› Self IPs で Self IP が 10.0.1.201 であることを確認できます。
| Name | IP Address | Netmask | VLAN / Tunnel |
|---|---|---|---|
| external-ip | 110.0.1.201 | 255.255.255.0 | external |
Web-VS の設定画面で、Source Address Translation を Auto Map にして Update をクリックします。
| ⋮ (中略) | |
| 1Source Address Translation | Auto Map |
| ⋮ (中略) | |
ブラウザで http://10.0.1.100 を開くと、今度は Web-02 のページが表示されました。show sys connection を見ると、Web-02(10.0.2.71)に転送するとき、送信元が Self IP の 10.0.1.201 に変換されています。
admin@(BIG-IP-1)(cfg-sync Standalone)(Active)(/Common)(tmos)# show sys connection
Really display 1000 connections? (y/n) y
Sys::Connections
xx.xx.xxx.xxx:61015 10.0.1.100:80 10.0.1.201:61015 10.0.2.71:80 tcp 0 (tmm:0) none none
うまくいかないとき
| 状態 | よくある原因 | 確認すること |
|---|---|---|
| 応答が返らない | 送信元を変換していないので、サーバの応答が BIG-IP を通らない | Virtual Server の Source Address Translation、サーバのデフォルトゲートウェイ |
| サーバから応答が届かない | サーバから SNAT のアドレス(10.0.1.102 など)に戻る経路がない | サーバ側のルーティング |
| NAT Address に届かない | BIG-IP がそのアドレスの ARP に応答していない | NAT List の ARP、VLAN / Tunnel Traffic の設定 |
| 変換されたか分からない | ― | show sys connection の Server-side の送信元、NATs の統計 |
まとめ
| 種類 | 設定場所 | この記事の設定 | 変換の結果 |
|---|---|---|---|
| NAT List | Local Traffic ›› Address Translation ›› NAT List | 10.0.1.101 ⇔ 10.0.2.24 | 宛先 10.0.1.101 → 10.0.2.24 |
| SNAT | Local Traffic ›› Address Translation ›› SNAT List | 60.0.0.0/8 → 10.0.1.102 | 送信元 → 10.0.1.102 |
| SNAT Pool | SNAT Pool List で作り、Virtual Server の Source Address Translation を SNAT に | SNAT-Pool-1(10.0.1.103) | 送信元 → 10.0.1.103 |
| Auto Map | Virtual Server の Source Address Translation を Auto Map に | Self IP 10.0.1.201 | 送信元 → 10.0.1.201 |
Virtual Server を使う負荷分散で送信元を変換するなら、まず SNAT Pool か Auto Map を検討します。変換の結果は show sys connection の Server-side の送信元で確かめられます。
コメント