2026年6月16日
2026年6月16日
NAT を確認する手順|自分が NAT の内側か、どのルールと変換表で動いているかを Linux・Windows・ルーター・クラウドで調べる
NAT を確認するときは、「この端末やサーバーは NAT の内側にいるのか」「どの機器のどのルールで変換されているのか」「いま実際にどんな変換が行われているのか」の3段階に分けて調べると、見落としが減ります。この記事では、手元のアドレスと外から見えるアドレスの比べ方、Linux の iptables・nftables・conntrack での確認、Windows の NAT の確認、業務用ルーターとクラウドの NAT ゲートウェイの見方を、読み取り専用のコマンドを中心に説明します。ここで紹介する確認コマンドは設定を変えないので、本番機でも試しやすいものです。
手順1:自分が NAT の内側にいるかを確かめる
まず、端末やサーバーに付いているアドレスと、外のサーバーから見えるアドレスを比べます。
# Linux:自分に付いている IPv4 アドレス
ip -4 addr show
# 外から見えるアドレス(外部の確認用サービスを使う例)
curl -4 https://ifconfig.me
dig +short myip.opendns.com @resolver1.opendns.com
Windows では ipconfig で自分のアドレスを確認し、外から見えるアドレスは PowerShell の Invoke-RestMethod https://ifconfig.me などで調べられます。外部の確認用サービスは運営者の都合で変わることがあるため、使えない場合は別のサービスを使ってください。
2つが一致すれば、その端末は NAT を通らずにグローバル IP で通信しています。一致しなければどこかで NAT を通っています。自分のアドレスが次の範囲なら、内側にいると判断できます。
- 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16:プライベートアドレス(RFC 1918)
- 100.64.0.0/10:回線事業者の CGNAT などで使われる共有アドレス(RFC 6598)
自宅や社内のルーターの WAN 側アドレスも同じ方法で見ます。WAN 側がプライベートアドレスなら NAT が2段(二重 NAT)、100.64.0.0/10 なら回線事業者側でも NAT されている可能性が高い、と判断できます。どこで変換されているかを詳しく知りたい場合は、traceroute -n 8.8.8.8 の最初の数ホップのアドレスを見ると、内側のルーターの段数がおおよそ分かります。
手順2:Linux で NAT のルールを確認する
Linux のゲートウェイやサーバーで NAT をしている場合、ルールは netfilter に入っています。注意したいのは、iptables のコマンドが2種類あることです。
# どちらの iptables かを確認
iptables -V
# 例: iptables v1.8.x (nf_tables) なら nftables ベース
# iptables v1.8.x (legacy) なら従来方式
従来方式(legacy)で入れたルールは nftables のコマンドからは見えず、その逆も起こります。片方だけ見て「ルールが無い」と判断しないよう、両方を確認します。
# iptables の NAT テーブル(カウンターと行番号つき)
sudo iptables -t nat -L -n -v --line-numbers
# 保存形式で一覧(ルールをそのまま読める)
sudo iptables-save -t nat
# nftables のルール全体
sudo nft list ruleset
読み方の要点は次のとおりです。
- PREROUTING の
DNAT:外から届いたパケットの宛先を書き換える(ポート転送) - POSTROUTING の
SNAT/MASQUERADE:外へ出るパケットの送信元を書き換える(内側の端末を外へ出す) pktsとbytes:そのルールに当たった件数。テスト通信の前後で増えたかを見ると、ルールが実際に使われているかが分かる
Docker が入っているホストでは、DOCKER という名前のチェーンにコンテナの公開ポートの DNAT が並びます。自分で書いた覚えの無いルールがあれば、まず Docker や仮想化ソフトによるものかを確かめてください。
あわせて、カーネルの転送が有効かも見ておきます。NAT のルールがあっても、転送が無効なら内側との間でパケットは流れません。
sysctl net.ipv4.ip_forward
手順3:変換表(conntrack)で実際の変換を見る
ルールは「どう変換するか」の決まりで、実際にいま行われている変換は conntrack の表に記録されています。conntrack コマンドは conntrack-tools パッケージに含まれます。
# 変換中の接続の一覧
sudo conntrack -L
# 特定の内側ホストの分だけ
sudo conntrack -L -s 192.168.10.20
# 件数と上限
sudo conntrack -C
sysctl net.netfilter.nf_conntrack_max
1行には、元の方向(送信元と宛先)と、戻りの方向の組が並びます。戻りの方向の宛先が自分のグローバル IP やポートに変わっていれば、そこで NAT が行われています。件数が上限に近づいている場合は、カーネルログに nf_conntrack: table full が出ていないかも確認します。
パケットキャプチャで書き換え前後を比べる
ルールと変換表で分からないときは、外側と内側のインターフェースで同時にパケットを見ます。外側で見えた宛先 203.0.113.5:8080 が、内側で 192.168.10.20:80 に変わっていれば、DNAT が動いていると確かめられます。
sudo tcpdump -ni eth0 tcp port 8080
sudo tcpdump -ni eth1 host 192.168.10.20
手順4:Windows の NAT を確認する
Windows のクライアントやサーバーそのものが NAT をしている場面は多くありませんが、Hyper-V やコンテナの環境では WinNAT が使われます。PowerShell で次のように確認できます。
# NAT の一覧(内側のプレフィックスなど)
Get-NetNat
# 静的な対応(ポート転送)
Get-NetNatStaticMapping
何も表示されなければ、その Windows では WinNAT が設定されていません。Windows の「インターネット接続の共有」など別の仕組みで NAT している場合は、これらのコマンドには表示されないことがあります。
手順5:ルーターとクラウドの NAT を確認する
業務用ルーター
Cisco IOS では、次のコマンドで変換の状況と統計を見られます。
show ip nat translations
show ip nat statistics
ほかのメーカーにも変換表を表示するコマンドがありますが、名前と書式は機種とファームウェアで異なるため、各製品のコマンドリファレンスで確認してください。家庭用ルーターでは、管理画面の「NAT テーブル」「ポート転送」「セッション情報」といった項目に変換の一覧が表示されることがあります。表示できない機種もあります。
クラウドの NAT ゲートウェイ
クラウドでは、OS の外で NAT が行われます。AWS を例にすると、確認する場所は次のとおりです。
- サブネットに関連付けたルートテーブルで、0.0.0.0/0 の宛先が NAT ゲートウェイを向いているか
- NAT ゲートウェイの状態と、割り当てられた Elastic IP
- CloudWatch の NAT ゲートウェイのメトリクス。ポートの割り当て失敗を示す
ErrorPortAllocationが増えていれば、同じ宛先への同時接続が多すぎる可能性がある
Azure や Google Cloud にも同様の NAT サービスがあり、項目名や指標の名前はそれぞれ異なります。サービスの仕様は更新されることがあるため、公式ドキュメントで最新の情報を確認してください(2026年10月現在)。
確認結果の整理のしかた
調べた結果は、次の順で書き出しておくと、後から見ても状況が分かります。
- 端末のアドレスと外から見えるアドレス
- 通過している NAT の段数と、それぞれの機器
- 関係するルール(DNAT / SNAT / MASQUERADE)とカウンター
- 変換表に記録されている実際の対応
ルールを変更する場合は、確認の段階で sudo iptables-save > ~/iptables-backup.txt や sudo nft list ruleset > ~/nft-backup.txt で現在の状態を保存してから作業すると、問題が起きたときに戻せます。
まとめ
- 自分のアドレスと外から見えるアドレスを比べ、プライベートや 100.64.0.0/10 なら NAT の内側
- Linux は iptables(legacy と nf_tables の両方)と nftables のルールを見て、カウンターで当たり方を確かめる
- 実際の変換は conntrack の表と、外側・内側のパケットキャプチャで確認する
- Windows は
Get-NetNat、Cisco はshow ip nat translationsで状態を見られる - クラウドではルートテーブル、NAT ゲートウェイの状態、メトリクスを確認する