- 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 の場合
- 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 の場合
- 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書き換え以外に使われることはない.