NAT_GLOBAL / NAT_POOL テーブル¶
概要¶
NAT_GLOBAL は NAT feature の admin mode と timeout を保持するグローバル設定、NAT_POOL は dynamic NAT で利用する変換アドレス / port 範囲の named pool を定義する CONFIG_DB テーブル1。同じ YANG モジュールには NAT_BINDINGS、STATIC_NAT、STATIC_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 は YANG 上 container Values を持つ singleton 的な形。NAT_POOL と NAT_BINDINGS は name が 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_portはstart-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¶
関連リファレンス¶
- YANG:
sonic-nat - CLI:
config nat
引用元¶
関連 Topics¶
運用ヒント¶
典型値¶
- key 形式:
NAT_GLOBAL|Values、STATIC_NAT|<ip>、NAT_POOL|<name>等。 admin_mode: enabled、nat_timeout: 600、nat_tcp_timeout: 86400。
よくある誤設定¶
admin_modeを enabled にせず static_nat だけ入れても NAT は動作しない。
確認コマンド¶
例外条件・特殊挙動¶
- NAT 機能が無効状態でのエントリ追加 → SWSS_LOG_WARN + スキップ:
admin_mode = disabled状態では"NAT Feature is not yet enabled, skipped adding ..."を WARN ログしてエントリをキューに保持。NAT 有効化 (enableNatFeature()) 後にキューが順次処理される (natorch.cppL1791/L1909/L2011/L2139/L2296)。 - NAT_GLOBAL キーが "Values" 以外 → SWSS_LOG_ERROR + エントリ消費:
"Invalid key format. No Values: %s"をログし、エントリをm_toSyncから消費して次へ進む (natorch.cppL2924-2930)。 - STATIC_NAT / STATIC_NAPT のキーサイズ不正 → SWSS_LOG_ERROR + エントリ消費: STATIC_NAT はキーサイズ 1 以外、STATIC_NAPT はキーサイズ 5 以外の場合にスキップ (
natorch.cppL2776/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.cppL185-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。