ASAの Twice-Nat でDNSパケットの書き換え

  • Object NATでの説明はドキュメントにあるが, Twiceの例は載っていない. Objectの例も成功例だけしか載っていないので, NATルールの順番を逆にした場合どうなるかまでわからない.
  • nat コマンドの dns オプションはDNSパケットの中身を書き換えるが, DNSに関係なくNAT,UNNATは行われる.
    • PIX時代からある機能だが, 挙動がわかりにくくなる原因. DNSの書き換えは別機能としてNATと分離できなかったのか?
  • WEBサーバがIN, OUTにIPを持ち,DNSサーバはOUTにあり, INからアクセスする時はWEBサーバのIN側アドレスに行くようにDNSパケットを書き換える場合
  • nat (in,out) source static wevsrvin wevsrvout dns と nat (out,in) source static wevsrvout wevsrvin dns はどちらもDNSサーバからのwebsrvoutという回答を通過時に書き換えてwebsrvinにするが, DNSパケット以外での挙動が違ってくる.
  • 共通の挙動
IN                                              OUT				
src=Client:10000,dst=DNSsrv:53               -> src=NATpool:10000,dst=DNSsrv:53(websrv query)
dst=Client:10000,src=DNSsrv:53(Ans:websrvin) <- dst=NATpool:10000,src=DNSsrv:53(Ans:websrvout)
  • nat (in,out) source static wevsrvin wevsrvout dns の場合
    • 暗黙に nat (out,in) destination wevsrvout wevsrvin が行われる.
  • wevsrvoutはOUTのLANに実体があり, NATのsrc書き換え先に指定されているwevsrvoutと衝突が起きるため, no-proxy-arpオプションを必要とする.
    • IN側からwevsrvinがパケットをゲートウエイに発信する必要はないため, このnatルールがDNS書き換え以外の目的で使われることはない.
    • no-proxy-arpがなく, もしOUT側でdst=websrvoutのパケットが着信するとwevsrvinに書き換えられてINから出てくる. ただしsrcはOUT側のまま.
  • nat (out,in) source static wevsrvout wevsrvin dns の場合
    • 暗黙に nat (in,out) destination wevsrvin wevsrvout が行われる.
  • IN側のクライアントがwebsrvinあてのパケットをwebsrvinではなく, ゲートウエイに投げた場合, websrvoutあてに書き換えられてOUTから出てくる.
    • ただし,srcがIN側のクライアントのアドレスのままなので, OUTのサーバが受け付けないか,返答が帰ってこない.
  • 3つのネットワークIN, OUT, BACKがあり, WebサーバがOUTとBACKにIPを持ち, DNSサーバがOUTにあり, INからアクセスする時はWEBサーバのBACKアドレスに行くようにDNSパケットを書き換える場合
    • 共通の挙動
IN                                                OUT				
src=Client:10000,dst=DNSsrv:53                 -> src=NATpool:10000,dst=DNSsrv:53(websrv query)
dst=Client:10000,src=DNSsrv:53(Ans:websrvback) <- dst=NATpool:10000,src=DNSsrv:53(Ans:websrvout)
  • nat (out,in) source static wevsrvout wevsrvback dns の場合
    • 暗黙に nat (in,out) destination static wevsrvback wevsrvout が行われる.
    • IN にいるクライアントは, websrvbackあてのパケットをゲートウエイに投げる. 宛先がwevsrvoutに書き換えられ, outから出てくることになり, websrvbackへは向わないため,目的を果たせない.
  • nat (in,out) source static wevsrvback wevsrvout dns no-proxy-arp の場合.
    • 暗黙に nat (out,in) destination wevsrvout wevsrvback が行われる.
    • outからwevsrvout向けのパケットを受け取らないようにするため no-proxy-arpが必要. アドレス衝突が起きる.
    • INからは別ネットワークのwevsrvbackのsrcアドレスを持つパケットは通常来ないので, これがDNS書き換え以外に使われることはない.