内部NLBによるパケットの書き換えのまとめ

そういえば、内部 NLB 構成ってどうやって同一セグメントのクライアントにパケットが返ってきてるんだろ? リアルサーバーからみたときに、パケットの送信元がクライアントのになる DSR だとすると返せるのはわかるんだけど、VIP (NLBのIPアドレス) 宛のパケットを受ける設定してなくても動いてるし、NAT (DNAT) 型だとすると(クライアントが同一セグメントにいるので)戻りのパケットが NAT した NLB を経由しないんでクライアントに破棄されるだろうし??? とふと疑問を持ったので調べてみた結果です。

調べたところ、リアルサーバーに届くパケットはこんな感じでした:

  • ターゲットをインスタンスIDで指定した場合
    • src MAC = NLBのMAC
    • src IP = クライアントのIP
    • dst MAC = リアルサーバーのMAC
    • dst IP = リアルサーバーのIP
  • ターゲットをIPアドレスで指定した場合
    • src MAC = NLBのMAC
    • src IP = NLBのIP
    • dst MAC = リアルサーバーのMAC
    • dst IP = リアルサーバーのIP

まとめると:

  • 内部 NLB は NAT型 の L4LB
  • dstはリアルサーバーのMACアドレスIPアドレスに書き換えられる(DNAT)
  • srcのMACアドレスはNLBのMACアドレスに書き換えられる
    • リアルサーバーからの戻りのパケットが必ずNLBを経由するようにこうなってると思われ
    • DNATのみだと、srcはクライアントのMAC、IPになるので、リアルサーバーはNLBを経由せずに直接クライアントに戻りのパケットを送信しちゃって、クライアントは送ったのと違うところからパケットが返って来ることになるので破棄しちゃう
  • ターゲットタイプで違うのは、srcのIPアドレスのみ
  • ターゲットをインスタンスIDで指定したときの注意点

な感じでした。なるほどー

良いお年を!