コンテンツにスキップ

NAT_GLOBAL / NAT_POOL テーブル

概要

NAT_GLOBALNAT feature の admin mode と timeout を保持するグローバル設定、NAT_POOL は dynamic NAT で利用する変換アドレス / port 範囲の named pool を定義する CONFIG_DB テーブル1。同じ YANG モジュールには NAT_BINDINGSSTATIC_NATSTATIC_NAPT も定義される。schema.h では APPL_DB 側に NAT_GLOBAL_TABLE と pool 系 table の定数がある2

データフロー (自動生成)

flowchart LR
  CDB[("CONFIG_DB<br/>NAT_GLOBAL")]
  DM["natmgrd"]
  CDB --> DM
  APPDB[("APP_DB<br/>APP_NAT_GLOBAL_TABLE")]
  DM --> APPDB
  SYNCD["syncd"]
  APPDB --> SYNCD
  SAI["SAI<br/>sai_switch_api"]
  SYNCD --> SAI

凡例

CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。

key 構造

NAT_GLOBAL|Values
NAT_POOL|<name>
NAT_BINDINGS|<name>

NAT_GLOBALYANGcontainer Values を持つ singleton 的な形。NAT_POOLNAT_BINDINGSname が key。

主要フィールド

NAT_GLOBAL

フィールド 既定値 説明
admin_mode admin_mode disabled NAT feature の有効 / 無効
nat_timeout uint32 300..432000 600 NAT entry timeout 秒
nat_tcp_timeout uint32 300..432000 86400 TCP NAT entry timeout 秒
nat_udp_timeout uint16 120..600 300 UDP NAT entry timeout 秒

NAT_POOL

フィールド 必須 説明
nat_ip IP address range yes pool に含める単一 IP または IP 範囲
nat_port port range string no pool に含める L4 port 範囲

NAT_BINDINGS

フィールド 必須 説明
nat_pool leafref NAT_POOL.name yes binding 対象の NAT pool
nat_type enum snat / dnat no NAT 種別。既定は snat
twice_nat_id uint16 1..9999 no dynamic twice NAT 用 ID

制約

  • NAT_POOL / NAT_BINDINGS はそれぞれ最大 16 entries。
  • name は 1..32 文字、英数字で始まり、英数字 / - / _ を利用可能。
  • nat_ip は mandatory。
  • nat_portstart-end 形式の port 範囲。
  • NAT_BINDINGS.nat_pool は既存 NAT_POOL への leafref。

購読者

  • natmgrd: CONFIG_DB の NAT 設定を読み、APPL_DB NAT table 群へ反映する。
  • orchagent / NatOrch: APPL_DB の NAT global / pool / binding / static entry を消費し、SAI NAT object や kernel / ASIC 設定へ反映する。

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: STATIC_NATSTATIC_NAPTNAT_BINDINGSACL_TABLE
  • 関連 CLI: config nat
  • 関連 YANG: sonic-nat

関連リファレンス

引用元

関連 Topics

運用ヒント

典型値

  • key 形式: NAT_GLOBAL|ValuesSTATIC_NAT|<ip>NAT_POOL|<name> 等。
  • admin_mode: enablednat_timeout: 600nat_tcp_timeout: 86400

よくある誤設定

  • admin_mode を enabled にせず static_nat だけ入れても NAT は動作しない。

確認コマンド

sonic-db-cli CONFIG_DB hgetall 'NAT_GLOBAL|Values'
show nat config
show nat translations

例外条件・特殊挙動

  • NAT 機能が無効状態でのエントリ追加 → SWSS_LOG_WARN + スキップ: admin_mode = disabled 状態では "NAT Feature is not yet enabled, skipped adding ..." を WARN ログしてエントリをキューに保持。NAT 有効化 (enableNatFeature()) 後にキューが順次処理される (natorch.cpp L1791/L1909/L2011/L2139/L2296)。
  • NAT_GLOBAL キーが "Values" 以外 → SWSS_LOG_ERROR + エントリ消費: "Invalid key format. No Values: %s" をログし、エントリを m_toSync から消費して次へ進む (natorch.cpp L2924-2930)。
  • STATIC_NAT / STATIC_NAPT のキーサイズ不正 → SWSS_LOG_ERROR + エントリ消費: STATIC_NAT はキーサイズ 1 以外、STATIC_NAPT はキーサイズ 5 以外の場合にスキップ (natorch.cpp L2776/L2844)。
  • twice_nat_id が 1-9999 の範囲外 → YANG が拒否: range "1..9999" / error-message "Invalid twice nat id for the static NAT." / STATIC_NAT・STATIC_NAPT 共通。
  • nat_timeout が 300-432000 の範囲外 → YANG が拒否 (デフォルト 600): range "300..432000" / default "600"
  • nat_tcp_timeout が 300-432000 の範囲外 → YANG が拒否: range "300..432000"
  • nat_udp_timeout が 120-600 の範囲外 → YANG が拒否: range "120..600"
  • nat_type のデフォルト = "dnat": YANG default dnat。省略時は DNAT エントリとして処理される。
  • デフォルトルート / サブネットルートの更新は無視: routeOrch からのルート更新イベントでデフォルトルートまたはサブネットベースのルートは "Ignore default or subnet nexthop update event" としてスキップ (natorch.cpp L185-189)。

値依存挙動マトリクス

フィールド 挙動
admin_mode disabled (default) NAT 無効。pool/binding/static エントリを受け付けるがハードウェアに降ろさない (キュー保持)
admin_mode enabled NAT 有効化。キュー内の全エントリを ASIC に反映。conntrack エントリの aging 開始
nat_timeout 600 (default) 非 TCP/UDP NAT セッションを 600秒でタイムアウト
nat_tcp_timeout 86400 (default) TCP セッションを 24時間でタイムアウト
nat_udp_timeout 300 (default) UDP セッションを 5分でタイムアウト
nat_type (BINDINGS) snat 送信元 IP を変換 (内→外方向)
nat_type (BINDINGS) dnat (default) 宛先 IP を変換 (外→内方向)
twice_nat_id 1..9999 同 ID の snat/dnat エントリをペアとして twice NAT 処理
NAT_POOL エントリ数 17件目以上 YANG max-elements=16 でバリデーション拒否

enum: admin_mode=enabled/disabled、nat_type=snat/dnat。