ネットワーク運用をしていると、次のような状況に遭遇することがあります。
- 端末にスタティックルートを入れられない
- デフォルトゲートウェイも変更できない
- でも別セグメントからアクセスしたい
このようなケースでは、そのまま通信させようとすると非対称ルーティングが発生し、通信が成立しません。しかし、ルータ側でDNATとSNATを組み合わせることで、この問題をエレガントに解決できます。
この記事では、実際の現場で遭遇したNASの接続トラブルを例に、DNAT+SNATで通信を成立させる方法を解説します。
ある現場で、2つの異なるネットワークセグメントからそれぞれ個別にNASへアクセスする必要がある構成を組むことになりました。最初は「NASにスタティックルートを追加すれば解決するだろう」と考えていました。
ところが、そのNASのルーティング設定画面を開いてみると…まさかのデフォルトルートしか設定できない仕様でした。スタティックルートを個別に追加する画面が存在しなかったのです。
頭を抱えましたが、FortiGateのNAT設定(DNAT+SNAT)を組み合わせることで無事に解決できました。「端末側をいじれないなら、ルータ側で吸収する」という発想の転換が突破口になりました。
今回のネットワーク構成(前提条件)
まず今回の前提となるネットワーク構成を整理します。
| 要素 | IPアドレス / 設定 | 備考 |
|---|---|---|
| 社内クライアント | 10.20.40.100 | アクセス元 |
| ルータ(社内側) | 10.20.40.1 | DNAT/SNATを処理 |
| ルータ(端末側) | 10.10.50.1 | SNATの変換後送信元 |
| NAS(端末) | 10.10.50.10/24 | アクセス先 |
| NASのデフォルトGW | 192.168.1.1 | 変更不可 |
| NASのスタティックルート | — | 設定不可 |
なぜそのままでは通信できないのか
社内クライアント(10.20.40.100)からNAS(10.10.50.10)へ直接通信を試みると、次のような問題が起きます。
① 行きの通信はルータを経由して届く
送信元: 10.20.40.100
宛先: 10.10.50.10 ← ルータ経由でNASに届く② NASは返りの宛先を知らない(非対称ルーティング)
NASから見ると、送信元は 10.20.40.100 です。しかしNASは 10.20.40.0/24 への経路を持っていません。スタティックルートも設定できないため、返りの通信はデフォルトゲートウェイ(192.168.1.1)へ送られてしまいます。
【返りの通信】
送信元: 10.10.50.10
宛先: 10.20.40.100 → 経路なし → 192.168.1.1(デフォルトGW)へ
↑ 社内クライアントには届かない!解決策:DNAT + SNAT の組み合わせ
この問題は、ルータ側でNATを2種類組み合わせることで解決できます。
STEP 1:DNAT(宛先変換)
まず社内からの通信をルータ自身で受け付けます。社内クライアントはルータのIPを宛先として通信します。
【DNAT変換前】
送信元: 10.20.40.100
宛先: 10.20.40.1 ← ルータ自身が受け取る
【DNAT変換後】
送信元: 10.20.40.100
宛先: 10.10.50.10 ← NASへ転送するこれで通信はNASまで届きます。しかしまだ問題があります。送信元が 10.20.40.100 のままなので、NASは返りをデフォルトGW(192.168.1.1)へ送ってしまいます。
STEP 2:SNAT(送信元変換)
DNATだけでは解決しません。送信元IPをルータの端末側IPへ変換することで、NASから見て「同一セグメントからの通信」に見えるようにします。
【SNAT変換前】
送信元: 10.20.40.100 ← NASが経路を知らない
宛先: 10.10.50.10
【SNAT変換後】
送信元: 10.10.50.1 ← ルータの端末側IPに変換
宛先: 10.10.50.10 ← 同一セグメント通信になる!10.10.50.1(ルータの端末側IP)です。これは同一セグメント(10.10.50.0/24)なので、スタティックルートもデフォルトGWも関係なく、直接ルータへ返信できます。通信全体の流れを整理する
DNAT+SNATを組み合わせた場合の通信の流れを整理します。
10.20.40.100
DNAT: 宛先を変換
10.20.40.1→10.10.50.10
SNAT: 送信元を変換
10.20.40.100→10.10.50.1
10.10.50.10
送信元は10.10.50.1
(同一セグメント)
10.10.50.10→10.10.50.1
(同一セグメント返信)
NATテーブル参照
→元の送受信元に再変換
10.20.40.100
✅ 通信成立!
この構成のポイントと注意点
| 項目 | 内容 |
|---|---|
| ✅ 端末側の変更が不要 | スタティックルートもデフォルトルートの変更も一切不要 |
| ✅ 非対称ルーティングを回避 | SNATにより返りの通信が必ずルータへ戻る |
| ✅ ネットワーク分離を維持 | 2つのセグメントを論理的に分離したまま通信を成立させられる |
| ⚠ NASから見た送信元がルータのIPになる | NASのアクセスログには社内クライアントのIPではなくルータのIPが記録される |
| ⚠ ルータの設定に依存する | ルータがDNAT/SNATをサポートしている必要がある(FortiGateは対応) |
この手法が有効なケース
今回のNASのようなケースに限らず、以下のような状況でこの手法が活用できます。
まとめ
スタティックルートが入れられない端末や、デフォルトゲートウェイを変更できない端末は意外と多く存在します。NASのようにルーティング設定がデフォルトルートしか設定できない機器もその一つです。
そのままでは非対称ルーティングが発生して通信が成立しないケースでも、DNAT+SNATを組み合わせることで解決できます。
- DNAT:ルータ宛の通信の宛先を端末のIPに変換して転送する
- SNAT:送信元をルータのIPに変換して、端末から見て同一セグメント通信に見せる
- 端末側の設定変更は一切不要。ルータ側だけで解決できる
- NASのアクセスログにはルータのIPが記録される点に注意
「端末側をいじれないなら、ルータ側で吸収する」。この発想がネットワーク設計の引き出しを増やしてくれます。同じような制約で悩んでいるエンジニアの参考になれば幸いです。



