そういえば、内部 NLB 構成ってどうやって同一セグメントのクライアントにパケットが返ってきてるんだろ? リアルサーバーからみたときに、パケットの送信元がクライアントのになる DSR だとすると返せるのはわかるんだけど、VIP (NLBのIPアドレス) 宛のパケットを受ける設定してなくても動いてるし、NAT (DNAT) 型だとすると(クライアントが同一セグメントにいるので)戻りのパケットが NAT した NLB を経由しないんでクライアントに破棄されるだろうし??? とふと疑問を持ったので調べてみた結果です。
調べたところ、リアルサーバーに届くパケットはこんな感じでした:
まとめると:
- 内部 NLB は NAT型 の L4LB
- dstはリアルサーバーのMACアドレス、IPアドレスに書き換えられる(DNAT)
- srcのMACアドレスはNLBのMACアドレスに書き換えられる
- リアルサーバーからの戻りのパケットが必ずNLBを経由するようにこうなってると思われ
- DNATのみだと、srcはクライアントのMAC、IPになるので、リアルサーバーはNLBを経由せずに直接クライアントに戻りのパケットを送信しちゃって、クライアントは送ったのと違うところからパケットが返って来ることになるので破棄しちゃう
- ターゲットタイプで違うのは、srcのIPアドレスのみ
- ターゲットをインスタンスIDで指定したときの注意点
- リアルサーバーが内部NLBにアクセスすると、タイムアウトになる
- ref: Network Load Balancer のトラブルシューティング の「ターゲットからそのロードバランサーへのリクエストが接続タイムアウトになる」
- NLBに送ったパケットが、自分自身からのパケットになって届くので破棄されちゃう、ヘアピン問題
な感じでした。なるほどー
良いお年を!