Juniper SSG140 Policy-based Destination NAT in ScreenOS 6.3

Juniper NetScreenシリーズやSSGシリーズのScreenOSで使えていたVIP(Virtual IP)機能ですが、SRXシリーズのJUNOSでは使えないようです。
SCREENOS TO JUNOS CONFIGURATION TRANSLATION TOOL(S2J)ではエラーになり、当該箇所はTRANSLATIONされません。
そんなこともあり、VIPで構成したものをPolicy-based Destination NAT(nat-dst)に書き換える作業をしています。
ところが世の中そんなに甘くはないものです。

資料の通りにやってみても上手くいかない。
インターネットで情報集めするものの...サイト毎に書いてあることが違うといういつものパターン。
[ScreenOS] Configuration Example - Policy-based Destination NAT in ScreenOS 6.3Configuration Example -- Configure Destination PAT (Port Address Translation) to Multiple Servers; includes Port Mapping/Port Forwardingを参考にして解決しました。
あくまでも私見での解釈ですので間違っていたら御免なさい。

= 前提条件 =
グローバルIPアドレス x.y.z.0/28(使えるIPアドレスは x.y.z.1 ~ x.y.z.14 まで)のインターネット環境があると仮定します。
"ethernet0/0"を"Untrust"ゾーン、"ethernet0/1"を"DMZ"ゾーンと設定します。
"ethernet0/0"にはIPアドレス x.y.z.2 が割り当てられてあり、他にサーバー用として割り当て可能なアドレスは以下の3つです。

x.y.z.3
x.y.z.7
x.y.z.10

グローバルIPアドレスと対象サービス(プロトコル:ポート番号)、転送されるプライベートIPアドレスは以下の通りです。

x.y.z.3 SMTP(TCP:25) → 192.168.1.2 
x.y.z.7 DNS(TCP/UDP:53) → 192.168.1.3 
x.y.z.10 HTTP(TCP:80) → 192.168.1.4
x.y.z.3 POP3(TCP:110) → 192.168.1.2
x.y.z.10 HTTPS(TCP:443) → 192.168.1.4

= 手順 =
1. Destination NATで使うグローバルIPアドレスをproxy-arp-entryとして定義する。

set interface ethernet0/0 proxy-arp-entry x.y.z.3 x.y.z.3
set interface ethernet0/0 proxy-arp-entry x.y.z.7 x.y.z.7
set interface ethernet0/0 proxy-arp-entry x.y.z.10 x.y.z.10

ScreenOS 6.3から"set arp nat-dst"が推奨されなくなりました。
代わりに"set interface Untrustインターフェース名 proxy-arp-entry グローバルIPアドレス グローバルIPアドレス"を設定しましょう。

2. route cacheを無効にする。

unset flow route-cache

資料の通りです。

3. グローバルIPアドレスを"DMZ"にオブジェクトとして定義する。

set address "DMZ" "global-mail" x.y.z.3 255.255.255.255
set address "DMZ" "global-dns" x.y.z.7 255.255.255.255
set address "DMZ" "global-web" x.y.z.10 255.255.255.255

通常は"DMZ"にはプライベートIPアドレスでオブジェクトを定義するのですが、Destination NATの場合はグローバルIPアドレスで定義します。

4. ポリシーを定義する。

set policy id 13 from "Untrust" to "DMZ"  "Any" "global-mail" "SMTP" nat dst ip 192.168.1.2 permit log
set policy id 13
set service "POP3"
exit
set policy id 14 from "Untrust" to "DMZ"  "Any" "global-dns" "DNS" nat dst ip 192.168.1.3 permit log
set policy id 14
exit
set policy id 15 from "Untrust" to "DMZ"  "Any" "global-web" "HTTP" nat dst ip 192.168.1.4 permit log
set policy id 15
set service "HTTPS"
exit

"Untrust" to "DMZ"のポリシーとして定義します。
"global-mail"などのdst-addressは3.で定義したものを使用します。
"nat dst ip プライベートIPアドレス permit"でDestination NATを有効にします。
policy id は一意の数字で構いません。

5. グローバルIPアドレスを"DMZ"インターフェースへのスタティックルートとして定義します。

set vrouter "trust-vr"
set route x.y.z.3/32 interface ethernet0/1
set route x.y.z.7/32 interface ethernet0/1
set route x.y.z.10/32 interface ethernet0/1
exit

"DMZ"のインターフェースは"ethernet0/1"になりますので上記の書き方になります。
"Untrust"にあるIPアドレスを転送するのに必要なようです。

= 備考 =
これでPolicy-based Destination NATが機能するはずです。
自分の環境に合わせて書き換えてみてください。
今回は"DMZ"にあるサーバを外部公開しましたが、"DMZ"の部分を"Trust"に変更すれば"Trust"にあるサーバも外部公開できるようです。
参考になれば幸いです。