今回はVLANによるネットワーク分割でハマった件と原因・解決策について備忘禄として残しておく。
VLANとは
VLANの前提となるLANはローカルエリアネットワークの略で、基本的には同じスイッチ(ルーターのスイッチポート含む)に直接つながっている機器同士がMACアドレスという機器固有のアドレスを使って通信する様子をイメージしてもらえれば良いかと思う。
(スイッチがスタッキングしてたり、色々と例外もあるんだけど。)
※LAN内でもIPアドレスは参照されるが、一旦IPアドレスを元に相手のMACアドレスを特定して実際の通信はMACアドレスに宛てられる。
VLANとはVirtual LANの略で、物理的なスイッチポートに囚われず、仮想的にネットワークを区切ったり、統合したりできる。
例えばVLANで一つのスイッチに繋がれた機器を2つのネットワークグループに分割すれば、これらのネットワーク同士はもはやMACアドレスで通信することはできなくなる。
そこで登場するのがルーター・L3スイッチなどのIPアドレスでルーティングをする機器。
一度分割したネットワークもこれでまた接続させることが出来る。
なんでそんな面倒なことをするかというと、LANの中は基本的に機器同士が常時おしゃべりをしてるので、適当にグループを分けてやらないと無駄話が飛び交って仕事が進まなくなるためだ。ただ別のグループへも必要な連絡事項は通す必要があるので、ルーターの出番という訳。
今回分割したネットワーク
今回はメインPCが所属するメインのネットワークから、Ciscoの検証用ネットワーク機材を管理するためのターミナルサーバーを切り離してみた。
我が家のメインスイッチCiscoのCBS250にはVLANの機能が付いている。そしてCBS250はL2スイッチングだけではなく、L3ルーティングも部分的に対応しているのでネットワークを分割してもVLANを跨いで通信ができる。
特にアクセス制御リストで拒否設定等しないかぎり、問題なく通信できるはずだった。
設定内容
CBS250
既存のVLAN1に加えてVLAN99を作成してIPアドレス192.168.99.1を付与、ターミナルサーバーが接続されたポートをVLAN99に所属させた。
ターミナルサーバー
IPアドレス192.168.99.2を付与し、デフォルトゲートウェイを192.168.99.1に設定。
NTT ホームゲートウェイ
192.168.99.0/24ネットワーク宛ての通信が来たら192.168.1.254へ転送されるようルーティングを設定。
ハマったところ
同じネットワークに所属させていたときは通信できていたのだが、ネットワークを分けたことでTELNET接続してもブランク表示されるようになってしまった。
Wiresharkでパケットを見てみると、3WAYハンドシェイクの後TCP再送が繰り返されている。
WindowsファイアウォールをOFFにしてみると、ちゃんと通信できることが分かった。
しかしメインPCから開始した通信なのになんで手元のファイアウォールで蹴るのかさっぱり分からない。
ターミナルサーバーからしたら通信したいと言われてデータ送ったら捨てられるとか意味不明。。
原因
メインPC側で返信が破棄されてしまう原因は、往路と復路が違うためにファイアウォールが自分が送った通信の返信だと判断できずにデータを捨てていたっぽい。
経路をa~hの記号で図示してみた。
(a) メインPCは192.168.99.2宛てに通信しようとするが、その時点で自分と異なるネットワーク宛てだと分かるので、デフォルトゲートウェイであるNTT-ホームゲートウェイのMACアドレスに宛ててフレームを送る。
(b) Cisco CBS250はMACアドレスをみてフレームをNTTホームゲートウェイへ転送する。この時点ではL2スイッチとしての仕事しかしてない。だってMACアドレス的には俺宛じゃないし。。という理屈。
(c) NTTホームゲートウェイは自分のMAC宛に届いたフレームからIPパケットを取り出して、自分が持ってる経路情報を確認。次の宛先がCBS250であることを知る。そこでCBS250のMACアドレス宛にフレームを転送する。もし人格があれば「おいCBS250、お前のとこやん」て思ってるはず。
(d) CBS250はここで初めて、自分のMACアドレス宛に届いたフレームからIPパケットを見て、自分に繋がってるCiscoターミナルサーバー宛であることを知り、そちらに転送する。
(e) ターミナルサーバーはデータを受け取り、返信先を確認する。
(f) ターミナルサーバーは返信先の192.168.1.152が別ネットワーク宛てだと分かるのでデフォルトゲートウェイに設定してあるCBS250のMAC宛に返信データのフレームを送信。
(g) CBS250は自分のMACアドレス宛に届いたIPパケットから配送先が192.168.1.152であることを確認し、自分に接続されたネットワーク宛てなのでMACアドレスのリスト(ARPテーブル)を確認。自分に接続されたメインPC宛てであることが分かったのでメインPCのMACアドレス宛にフレームを転送。
(h) メインPCに到着したデータはファイアウォールで検査される。しかし送ったのと異なるルートで返ってきた返信は、PC側から開始した一連の通信であることが認められず、ファイアウォールはこの返信を破棄する。
ということらしい。
改善策
とりあえずメインPCをスタティックIPにして、手動でデフォルトゲートウェイをCBS250にしてたみたところ、行きも返りもNTTホームムゲートウェイを通らずCBS250だけで完結したのでファイアウォールではじかれるようなこともなくなった。
まぁこのままだとネット接続できないのでCBS250側に0.0.0.0/0宛ての通信を192.168.1.1へ通信させるよう設定。(いわゆるデフォルトゲートウェイ)。
これでひとまずの改善策となった。
本格的に設定を固める際はDHCPサーバー側で配布するゲートウェイをCBS250にしてやる必要があるが、とりあえず実証実験は終わったので一旦満足。
以上