NATによりDNS内のIPアドレスが変換される

NATは基本的にはIPヘッダの送信元IPアドレス、宛先IPアドレスを変換することが主目的ですが、アプリケーション層にあるIPアドレスを検知し変換する機能もあります

よくあるアプリケーションは DNS や FTP です。

Ciscoの場合

Ciscoルータに以下設定が入っていたとします。


(config)# interface gigabitEthernet 0/0
(config-if)# ip address 192.168.1.254 255.255.255.0
(config-if)# ip nat inside
(config)# interface gigabitEthernet 0/1
(config-if)# ip address 200.1.1.1 255.255.255.0
(config-if)# ip nat outside
(config)# access-list 1 permit any
(config)# ip nat inside source list 1 interface gigabitEthernet 0/1
(config)# ip nat inside source static 192.168.1.2 200.1.1.2
(config)# ip nat inside source static 192.168.1.3 200.1.1.3

また、192.168.1.2はDNSサーバで、outsideのエリアからはNAT変換される想定で「www.test.com ⇒ 200.1.1.3」というAレコードが入っていたとします。

outsideから200.1.1.2で来たDNSクエリパケットがCiscoルータにより宛先が192.168.1.2にNAT変換され、その返信としてinsideからoutsideへDNSレスポンスパケットを返すことを想定します。その際、NATによりDNSレスポンスパケットが以下のように書き換えられます

(NAT変換前)www.test.com ⇒ 200.1.1.3

(NAT変換後)www.test.com ⇒ 200.1.1.1

すると正しい名前解決ではなくなるので、通信が正常に行えなくなります

これはNATがDNSレスポンスパケット内のIPアドレスも変換する機能がデフォルトで有効になっていること、access-list 1のルールに引っかかってしまっていることが原因です。

スポンサーリンク

  • 回避策1 access-list 1を修正する
(config)# access-list 1 permit 192.168.1.0 0.0.0.255
(config)# access-list 1 permit 172.16.0.0 0.0.255.255
(config)# access-list 1 permit 10.0.0.0 0.255.255.255

DNSレスポンスパケット内のIPアドレスは200.1.1.3なので、ルールには引っかからなくなる。

  • 回避策2 NATのアプリケーション層のIP変換機能を無効化する
(config)# ip nat inside source static 192.168.1.2 200.1.1.2 no-payload

これにより、DNSやFTP等のアプリケーション層のIPアドレスを変換しなくなります

Juniper SRXの場合

こちらはさらに用途不明な機能。内側⇔外側の向きは関係なく、static NATの定義にある通りにグローバルアドレスをプライベートアドレスに変換してしまいます。しかもデフォルト有効。DNS ALG(Application Layer Gateway)機能です。

なので、プライべートアドレスで設置しているDNSサーバを、Juniper SRXでNATさせてインターネットに公開している場合は必ず以下コマンドを入れましょう。

# set applications application my-dns term dns-tcp protocol tcp
# set applications application my-dns term dns-tcp destination-port 53
# set applications application my-dns term dns-tcp application-protocol ignore
# set applications application my-dns term dns-udp protocol udp
# set applications application my-dns term dns-udp destination-port 53
# set applications application my-dns term dns-udp application-protocol ignore

確認は以下コマンドで。

> show security alg status
DNS      : Disabled 
FTP      : Enabled
H323     : Enabled

Ciscoと違い、プロトコル単位で有効/無効ができるのはいいですね。機能自体はちょっとあれだけど。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする