ルーティング NAT FortiGate トラブルシューティング NAS

ネットワーク運用をしていると、次のような状況に遭遇することがあります。

  • 端末にスタティックルートを入れられない
  • デフォルトゲートウェイも変更できない
  • でも別セグメントからアクセスしたい

このようなケースでは、そのまま通信させようとすると非対称ルーティングが発生し、通信が成立しません。しかし、ルータ側でDNATとSNATを組み合わせることで、この問題をエレガントに解決できます。

この記事では、実際の現場で遭遇したNASの接続トラブルを例に、DNAT+SNATで通信を成立させる方法を解説します。

👷 現場での体験談

ある現場で、2つの異なるネットワークセグメントからそれぞれ個別にNASへアクセスする必要がある構成を組むことになりました。最初は「NASにスタティックルートを追加すれば解決するだろう」と考えていました。

ところが、そのNASのルーティング設定画面を開いてみると…まさかのデフォルトルートしか設定できない仕様でした。スタティックルートを個別に追加する画面が存在しなかったのです。

頭を抱えましたが、FortiGateのNAT設定(DNAT+SNAT)を組み合わせることで無事に解決できました。「端末側をいじれないなら、ルータ側で吸収する」という発想の転換が突破口になりました。

今回のネットワーク構成(前提条件)

まず今回の前提となるネットワーク構成を整理します。

図1:ネットワーク構成図
社内ネットワーク 社内クライアント 10.20.40.100 10.20.40.0/24 ルータ(FortiGate) 社内側:10.20.40.1 端末側:10.10.50.1 DNAT + SNAT 処理 端末側ネットワーク NAS(端末) 10.10.50.10/24 GW: 192.168.1.1 スタティックルート 設定不可 ⚠ 10.10.50.0/24 目標:10.20.40.100 → 10.10.50.10
要素IPアドレス / 設定備考
社内クライアント10.20.40.100アクセス元
ルータ(社内側)10.20.40.1DNAT/SNATを処理
ルータ(端末側)10.10.50.1SNATの変換後送信元
NAS(端末)10.10.50.10/24アクセス先
NASのデフォルトGW192.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)へ
                                   ↑ 社内クライアントには届かない!
❌ 非対称ルーティングの発生 行きと返りで通信経路が異なる状態を「非対称ルーティング」といいます。この状態では通信が成立しません。通常はスタティックルートを追加すれば解決しますが、今回はそれができません。
図2:通信経路の比較(NAT前 vs NAT後)

解決策:DNAT + SNAT の組み合わせ

この問題は、ルータ側でNATを2種類組み合わせることで解決できます。

🎯
DNAT(宛先NATで受付)
社内クライアントの通信をルータ自身で受け、宛先をNASのIPへ変換する。通信の「入口」を作る
🔄
SNAT(送信元を変換)
送信元IPをルータのIPに変換する。NASから見て「同一セグメントからの通信」に見せる。返りの経路問題を解決する

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   ← 同一セグメント通信になる!
✅ なぜSNATで解決するのか NASから見ると、通信相手は 10.10.50.1(ルータの端末側IP)です。これは同一セグメント(10.10.50.0/24)なので、スタティックルートもデフォルトGWも関係なく、直接ルータへ返信できます。

通信全体の流れを整理する

DNAT+SNATを組み合わせた場合の通信の流れを整理します。

図3:DNAT+SNAT適用後の通信フロー
▶ 行きの通信
社内クライアント
10.20.40.100
ルータ
DNAT: 宛先を変換
10.20.40.1→10.10.50.10
SNAT: 送信元を変換
10.20.40.100→10.10.50.1
NAS
10.10.50.10
送信元は10.10.50.1
(同一セグメント)
◀ 返りの通信
NAS
10.10.50.10→10.10.50.1
(同一セグメント返信)
ルータ
NATテーブル参照
→元の送受信元に再変換
社内クライアント
10.20.40.100
✅ 通信成立!

この構成のポイントと注意点

項目内容
✅ 端末側の変更が不要スタティックルートもデフォルトルートの変更も一切不要
✅ 非対称ルーティングを回避SNATにより返りの通信が必ずルータへ戻る
✅ ネットワーク分離を維持2つのセグメントを論理的に分離したまま通信を成立させられる
⚠ NASから見た送信元がルータのIPになるNASのアクセスログには社内クライアントのIPではなくルータのIPが記録される
⚠ ルータの設定に依存するルータがDNAT/SNATをサポートしている必要がある(FortiGateは対応)
⚠ ログへの影響に注意 SNATにより送信元IPがルータのIPに変換されるため、NAS側のアクセスログには社内クライアント(10.20.40.100)ではなくルータのIP(10.10.50.1)が記録されます。アクセス監査が必要な環境では、この点を事前に考慮した設計が必要です。
図4:各解決手段の適用しやすさ(端末変更不可の制約がある場合)

この手法が有効なケース

今回のNASのようなケースに限らず、以下のような状況でこの手法が活用できます。

🖨️
プリンタ・複合機
デフォルトゲートウェイしか設定できない機器から異なるセグメントへのアクセス
📦
NAS・ストレージ
今回の体験談のケース。ルーティング設定に制限がある機器からの複数セグメントアクセス
🏭
IoT・制御機器
設定変更が困難な機器や、ベンダー保守が必要で勝手に変更できない機器
🔧
ベンダー保守機器
ネットワーク設定を変更するとサポート対象外になるような機器への別セグメントからのアクセス

まとめ

スタティックルートが入れられない端末や、デフォルトゲートウェイを変更できない端末は意外と多く存在します。NASのようにルーティング設定がデフォルトルートしか設定できない機器もその一つです。

そのままでは非対称ルーティングが発生して通信が成立しないケースでも、DNAT+SNATを組み合わせることで解決できます。

  • DNAT:ルータ宛の通信の宛先を端末のIPに変換して転送する
  • SNAT:送信元をルータのIPに変換して、端末から見て同一セグメント通信に見せる
  • 端末側の設定変更は一切不要。ルータ側だけで解決できる
  • NASのアクセスログにはルータのIPが記録される点に注意

「端末側をいじれないなら、ルータ側で吸収する」。この発想がネットワーク設計の引き出しを増やしてくれます。同じような制約で悩んでいるエンジニアの参考になれば幸いです。