複数のサブネットを持つネットワーク
前の記事で、自宅のネットワークは複数のサブネットで構成していると紹介しました。
スイッチにLANケーブルを差し込んでそのまま同じLANにある機器にアクセスできるのは同じサブネット内に限ることですから、何も設定しないとサブネットの間の相互アクセスがうまくいかない場合があります。
本記事ではこのネットワーク構成図を例にして説明していきます。
PCからNASにアクセスしようとする場合
PCのデフォルトゲートウェイはRouterC
ですので、デフォルト状態ではパケットはRouterC
に送信されます。
このパケットの宛先がLANアドレスですので、RouterC
に破棄されるか、外に送信してもプロバイダーの端末機器に破棄されます。
故に、真っ先にやらなければならないのはPCに「NASへのパケットはRouterC
ではなく、RouterB
に送信する」という指示を設定することです。
PCのルーティングテーブル
Windows10では以下のコマンドでルーティングテーブルにスタティックルーティングを追加できます。
route -p add 10.0.0.0 mask 255.255.0.0 10.1.0.1
このコマンドの意味は10.0.x.xへのパケットはすべて10.1.0.1に送信するという意味です。
個別に設定されたスタティックルーティングはデフォルトゲイトウェイより優先度が高いため、NASへの通信はまず確実にRouterB
に送信します。
from | 10.1.0.2 |
to | 10.0.0.3 |
ルーターB
RouterB
は直接NASのいるSubnetAに繋がっていて、自動的にルーティングテーブルを取得できるので、特に設定は不要です。
ここで注意するべきのRouterB
は内部ルーターですので、NAT変換を行わないように設定されています。RouterB
を通過してもパケットの送信元アドレスはPCのままです。
NASからの返信
RouterA
がパケットを受け取ったら、送信先が自分のサブネットだと分かるので、パケットをNASに送信します。ただし、ここまではPCとNASの通信が完了していません。NASが処理後の返信をPCに返さなければなりません。
NASからの返信はこんな感じ
from | 10.0.0.3 |
to | 10.1.0.2 |
このパケットは先にNASのゲートウェイであるRouterA
に送信されますが、RouterA
もデフォルト動作としてすべてのパケットをインタネットに送信するので、SubnetBに到達できません。
設定方法は2つあります:
NASのゲートウェイを設定する
これは最初に行ってPCの設定と同じ。
NASにも10.1.x.xへのパケットを先に10.0.0.2に送信するスタティックルーティングを設定します。
RouterA
にスタティックルーティングを設定する
或いは、NASの設定を変更せず、PCへの返信を敢えてまずRouterA
に送信して、そしてRouterA
からRouterB
に転送します。
RouterA
のデフォルトルーティング設定はこちらの記事をご参照ください。
RouterA
に10.1.x.xあてのパケットだけインタネットではなく、10.0.0.2(RouterB
)に送るようにスタティックルーティングを設定します。
#Router(config)# ip route 10.1.0.0/16 10.0.0.2
それぞれのパラメータは宛先、サブネットマスク、次のアドレス。
CISCOの命令はWindows10と多少違いますが、考え方は全く同じです。
二つの方法の違い
この二つの方法の結果は同じですが、通信の経路が多少違いますので、実際の状況のよって使い分けたほうがいいです。
- NASなどの端末機器にゲートウェイを設定するほうが通信経路が最短になり、
RouterA
で余計なトラフィックが発生しません。 - ルーターにスタティックルーティングを設定するほうが転送負荷が発生しますが、汎用性に優れており、LAN内の機器をいちいち設定する必要がありません。
NATについて
以上の設定はRouterB
でNAT変換をしない前提の話です。
RouterB
でNATを有効にすれば、PCからのパケットの送信元がRouterB
を通過した時点でRouterB
のサブネットA側のアドレスに差し替えされますので、上記のNASとRouterA
の設定が一切不要です。
ただし、そうするとサブネットAからサブネットBへのアクセスができなくなりますし(ポートフォーワードをやれば一応できますが)、そもそもNATはIPアドレス不足を解決するための手段であり、IPアドレスが潤沢にある内部ネットワーク環境でむやみに使うものではないと思います。