更新日: 2023-11-07 19:20:41 +0900
公開日: 2011/05/25
発売日: 2007/10/25
この文書は2007/10/25に書かれたもので、ソフトウエアの名称、バージョン、設定項目、社名などの固有名詞などなどは当時のまま掲載しています。
ですので、インストール手順や設定内容は最新版のドキュメントを参照していただき、この文書からは理論や考え方、構成のヒントなどを読み取っていただければと思います。
今回は、スケールしやすく運用もしやすいネットワーク構成とはどういうものか、という話をしたいと思います。
深く考えずに設計したネットワークにサーバをじゃんじゃん追加していくと、そのうち破綻します。筆者らもそうでした。が、脳みそをふりしぼって考えて、ときには失敗しながらも改良を重ね、いまではかなり満足のいく構成ができたんじゃないかと自負しています。
そこで今回は、前半で典型的なネットワーク構成が持つ問題点と「理想の構成」について考察し、後半では「理想の構成」をVLANを活用して作ってみたいと思います。
まずはものすごくシンプルな構成からスタートしましょう。図1を見てください。
「rt」は自ネットワークの出入口となるルータ兼、ファイアウォール兼、ロードバランサだと思ってください。rtから上へ延びる線はISPの上位ルータへ、下へ延びる線はスイッチングハブ(以下、スイッチ)につながっており、スイッチにはWebサーバなどのサーバマシンがぶらさがっています。
とてもシンプルでわかりやすいんですが、問題があります。例えば、rtが故障した場合を考えてみましょう。
rtは上流との出入口ですので、ここが止まると外部との通信が一切できなくなってしまいます。つまり、全サービスが停止してしまいます。このように可用性が低いのが問題その1。
次に、復旧作業を考えてみます。故障したrtを復旧するには、
といった作業が必要になります。
一刻も早くサービスを復旧しなければならないのに、現地までの移動時間で貴重な時間をロスしてしまいます。
また、物理的な機器の移動やケーブルの差し換えが必要なので、電源ケーブルやLANケーブルの抜きまちがい、差しまちがいをしてしまう可能性もあります。「ちゃんとラベルを貼ってあるから大丈夫」「注意をすればそんなことは起こらない」と思うかもしれませんが、どんなに注意をしていても人間はうっかりミスをします。特に慌てている状況下では。このように、復旧作業そのものに潜在的なリスクがあるというのが問題その2です。
図1の問題点であった、
を解消するにはどういう構成がよいでしょうか。
例えばこんな構成はどうでしょう。(図2)
図1との違いで特徴的な点はこうです:
もしrtが故障した場合は、同じスイッチにぶらさがっているrtのスタンバイ機をアクティブ化すればいいので、前の構成より大幅にダウンタイムを短縮できます。また、物理的な機器の移動がないので復旧作業も簡素化できます。
とはいえこれまた問題点がないわけではありません。
この構成ですと、論理的なネットワークセグメントは、
の2つ存在するのですが、これらが物理的に1つのスイッチにつながっています。影響としては、内部ネットワークのブロードキャストが外部へ流れてしまったり、また、その逆もことも起こり得ますので、セキュリティの観点から望ましくありません。また、上位回線が従量課金の場合は、無駄なパケットで金銭的コストが増える可能性もあります。
図2は、フラットであるという構成そのものはよかったのですが、論理ネットワークが混在しているという問題がありました。それではネットワークをわけてみましょうというのが図3です。
図3を見ると、ネットワークが2つあることが見て取れると思います。上側が上位ルータとのネットワーク、下側が内部ネットワークです。そしてrtはNICが2つ搭載されていて、両方のネットワークにつながっています。
目的別にネットワークがわかれていて、図を見てもその構成がわかりやすいですね。
しかしながら、図4のように、配下の内部ネットワークが複数になった場合に、rtにはその分だけNICが必要になり、まるでタコ足配線のように構成が煩雑になってしまいます。
それから、rtはNICが2つ以上あり、2つのスイッチにつながっていなければなりません。つまり、物理構成(NICの枚数)と物理配置(2つのスイッチへの接続)がrtになるための条件となってしまいます。もし、rtとなるマシンをLinuxベースで作っている場合、内部ネットワークのWebサーバなど、同じPCサーバという意味で代替候補機はうようよいるわけなのですが、この2つの制約(物理構成、物理配置)のため、rtの代替機とすることはできません。
さて、ここまでで3つのネットワーク構成をみてきましたが、それぞれ一長一短がありました。
全ての希望が叶えられる夢の構成はないでしょうか?
・・・ということを追い求め続けた結果、筆者らDSASチームが出した現時点での答えが図5です。
物理構成はフラット構成(図2)と同じですが、VLAN(Virtual LAN)というものを使って、論理的にネットワークを分割しています。
4つのネットワーク構成それぞれについて、メリットとデメリットをみてきました。最後の「理想の構成」の最大のメリットは何かというと、「運用のしやすさ」なのですが、もうちょっと具体的に、これまでの話を整理しながら整理してみましょう。
物理的にはフラットな構成なので、最初に設置してしまえば、以後の物理的な作業(機器の移設や電源、LANケーブルの差し替え)は発生しません。
同一のネットワークセグメント内でのサーバの役割変更(Webサーバをメールサーバに役割変更するなど)はソフトウエア的に行えますし、ネットワークセグメントをまたぐ移動はVLANで論理的に行えます。
うっかりケーブルを抜いてしまったといったミスをはじめ、落下による機材の破損や作業者の負傷といった可能性もあるので、物理的な作業は極力少ない方が望ましいと考えます。
さて、このサーバの役割変更をさらに押し進め、
といった環境を整えれば、物理的作業が不要なだけでなく、役割変更や復旧作業を全てリモートから行うことができるようになり、作業時間をかなり短縮することができます。
rt配下のネットワークセグメントが増えても、後述するポートVLANとタグVLANを活用しているので物理的な複雑度は増しません。
逆に、物理的にネットワークセグメントを分割している場合を考えてみましょう。タコ足配線化して物理的な複雑度が増すという問題点は、さきほど見た図4のとおりです。それに加え、rtの物理構成(NICの数)も他のサーバと大きく異なってしまうため、「リモートから、Webサーバをrtサーバに役割変更」といったことをしようと思っても絶望的になってしまいます。
前節でVLANというものが出てきました。LinuxでVLANを使ったフラットなネットワークを組んでみる前に、VLANについて簡単に解説します。
VLANとは、 「物理的にではなく論理的にネットワークセグメントを分割するためのもの」もしくは 「ハードウエア的にではなくソフトウエア的にネットワークセグメントを分割するためのもの」といえます。
通常ですと、ネットワークセグメントを分割するには、複数のスイッチによって物理的に分割します。
一方、VLANの場合は、スイッチの設定を操作することにより、(物理構成を変更せずに)ネットワークを分割することができます。
VLANではVID(VLAN ID, VLAN Identifier)という識別子により、論理的に分割されたネットワークを区別します。「このVLANのVIDは2で、あのVLANのVIDは3」といった具合です。
VIDは0から4095までの数値で表現されます。ただしいくつかのVIDは予約されていますので、VLANを構成するときはこれら以外のVIDを使いましょう(表1)。
また、製品によってはVLANに文字列の名前をつけることができますが、これは人間が見たときにわかりやすくするためだけの機能であり、その製品の世界でのみ有効なラベルに過ぎません。本来のVLANの識別子は数値のVIDのみですので、混乱しないようにしましょう。
VID | 説明 |
---|---|
0 | 「null VLAN ID」と呼ばれるもので、管理用に予約されています。 |
1 | デフォルトのVID。機器の設定により変更可能。 |
4095(0xFFF) | 「implementation use」として、管理用に予約されています。 |
先ほどから「論理的に分割」という言葉を使ってきましたが、具体的にはどういうことなのか説明します。
一口にVLANといっても、いくつか種類があります。今回はそのうちのポートVLANとタグVLANについて説明します。
ポートVLANとは、スイッチのポートにVIDを割り振ってグルーピングする機能です。従って、ひとつのポートはひとつのVLANにしか属することができません。
スイッチにつながる機器には特別なものは必要ありませんが、スイッチ自身にポートVLANの機能が搭載されている必要があります。
タグVLANとは、イーサネットフレームに、VIDなどを含む4オクテットの情報(タグ)を埋め込んで、埋め込んだタグの中のVIDによりグルーピングする機能です。IEEE 802.1Qにその仕様が定められています。
VIDが含まれるタグはイーサネットフレームにつくものなので、ひとつのポートで複数の異なるVIDのイーサネットフレームを通すことができます。ここが1ポート1VLANのポートVLANとは対照的な点です。
よく引き合いに出されるタグVLANの使用例は、図6のようにスイッチをまたいだVLANを作るときです。この場合、物理的なスイッチが異なるため、スイッチを横断するようなポートVLANを複数構成することができません。そこでタグVLANの出番です。スイッチ間接続用のポートでタグVLANを有効にすると、VIDを含むタグが付与されたフレームがスイッチ間を流れるので、複数のスイッチの間で複数のVLANを構成できるようになります。
さて、タグVLANの場合、スイッチがタグVLANに対応していることはもちろんですが、スイッチ(のタグVLANを有効にしたポート)につなげる機器もタグVLANに対応したものでなければなりません。タグの付与と除去をしなければならないからです。図6の場合は、タグVLANを有効にしたポートにはタグVLANに対応したスイッチがつながっているのでいいのですが、はてさてここにLinuxサーバはつなげられるでしょうか?
実はLinuxはタグVLANに対応しているのでつなげることができます。少なくともkernel 2.6ではパッチなどは不要です。タグVLANの機能を有効にしてkernelをビルドすれば、Linuxでもタグつきのフレームを扱うことができます。そしてこの機能を使うことにより、図5のような構成が可能となるわけです。
ここまででVLANについてとVLANを使ったネットワーク構成のお話をしましたので、最後に実際にVLANを使った簡単なネットワークを作りつつ、LinuxでタグVLANを扱う方法を紹介したいと思います。
これから図7のようなネットワークを組んでみたいと思います。
使用するスイッチのポートは(1)〜(3)の3つで、それぞれのポートにつながっているマシンを順にA、X、Bと名付けます。
表2が、今回使用するVLANの一覧で、VLAN FOOにはマシンAとXが、VLAN BARにはマシンBとXが属しています。VLANごとのネットワークアドレスは表の通りで、図7のように、AのIPアドレスは10.6.25.10、Bは192.168.0.20とします。Xは両方のネットワークのIPアドレスを持つことになるのですが、それはおいおい説明するとして、最初は便宜的に10.6.25.9を割り当てておきます。
まずはこのようなネットワークを組んでみて、期待した通りVLAN FOOとVLAN BARの間で通信ができないことを確認します(VLANによる論理ネットワークの分割)。続いて、Xでパケット転送を有効にして、VLAN FOOとVLAN BARとの間で特定の通信のみ許可できるようになるところまでもっていきたいと思います。
VLAN | ID | 名前 | ネットワーク | 所属するマシン |
---|---|---|---|---|
2 | FOO | 10.6.25.0/24 | A, X | |
3 | BAR | 192.168.0.0/24 | B, X |
なにはさておき、VLANをサポートしているスイッチングハブが必要です。今回はたまたま手元にあった、Allied TelesisのCentreCOM FS816M(注1)を使用します。
スイッチにつながるPCは3台必要で、kernel 2.6系のLinuxが既にインストールされているものとします。ディストリビューションはなんでも構いませんが、以下の説明ではDebianを使っています。
マシンA、X、Bに、図7の通りのIPアドレスを設定して、まずはなにも設定していないスイッチにつないでみましょう。
この状態ではまだVLANの設定をしていないので、マシンに設定したIPアドレス帯が異なっても、ブロードキャストなどは届いてしまうはずです。
実際に確認してみましょう。
Bで、
B# ping -b 255.255.255.255
と実行した際の、Aでのパケットキャプチャは図8のようになります。B(192.168.0.20)からのパケットが届いてしまっているのが確認できますね。
A# tcpdump -ne -i eth0 net 192.168 16:49:29.409268 00:90:cc:10:66:9b > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 98: 192.168.0.20 > 255.255.255.255: ICMP echo request, id 50195, seq 1, length 64 16:49:30.423368 00:90:cc:10:66:9b > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 98: 192.168.0.20 > 255.255.255.255: ICMP echo request, id 50195, seq 2, length 64 16:49:31.423580 00:90:cc:10:66:9b > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 98: 192.168.0.20 > 255.255.255.255: ICMP echo request, id 50195, seq 3, length 64
次に、ポートVLANの設定をします。これで、論理的に分断されるので、AとBの間の通信は不通になるはずです。
今回使用するスイッチでは、シリアル経由で管理コンソールにログインして、図9のコマンドを投入します。(1)でVLANを作成し、(2)でVLAN FOOに(マシンAがつながっている)ポート1を追加し、(3)でVLAN BARに(マシンBがつながっている)ポート3を追加しています。
VLANの設定状態を確認するには、図10のようにSHOW VLANコマンドを使います。VLAN FOOとBARに、それぞれポート1と3が属しているのが確認できます。
ここまでできたら、さきほどの図8と同じように、AでパケットキャプチャをしながらBでpingを打ってみましょう。さきほどとは異なり、パケットが流れてこないのが確認できると思います。同じように、どのVLANにも属していないポート2につながっているマシンXでパケットキャプチャをしてみても、パケットが流れてこないのが確認できるはずです。
CREATE VLAN=FOO VID=2 ┐(1) CREATE VLAN=BAR VID=3 ┘ ADD VLAN=FOO PORT=1 ─(2) ADD VLAN=BAR PORT=3 ─(3)
sw# SHOW VLAN VLAN Information (VID range: 0) -------------------------------------------------- Name ................ default Identifier .......... 1 Status .............. Static Protected Ports ..... No Untagged Ports ...... 2,4-16 Tagged Ports ........ None Trunk Ports ......... None Mirror Port ......... None Management Port ..... None -------------------------------------------------- Name ................ FOO Identifier .......... 2 Status .............. Static Protected Ports ..... No Untagged Ports ...... 1 ← ポート1 Tagged Ports ........ None Trunk Ports ......... None Management Port ..... None -------------------------------------------------- Name ................ BAR Identifier .......... 3 Status .............. Static Protected Ports ..... No Untagged Ports ...... 3 ← ポート3 Tagged Ports ........ None Trunk Ports ......... None Management Port ..... None --------------------------------------------------
ここまでで、VLANを作り通信を遮断することができました。続いては、ポート2にタグVLANの設定をして、マシンXにはVLAN FOOとVLAN BARの両方のパケット(ただしタグつき)を流すようにしてみます。
スイッチにログインして、図11のコマンドを投入します。図9と似ていますが、「FRAME=TAGGED」という句がついています。(1)の場合は、VLAN FOOに(マシンXがつながっている)ポート2を追加しろ、ただし「イーサネットフレームにVLANのタグをつけて」という意味になります。(2)も同様です。
設定ができたら確認してみましょう(図12)。VLAN FOOとVLAN BARの「Tagged Ports」にポート2が追加されたのが確認できますね。
ADD VLAN=FOO PORT=2 FRAME=TAGGED ─(1) ADD VLAN=BAR PORT=2 FRAME=TAGGED ─(2)
sw# SHOW VLAN VLAN Information (VID range: 0) -------------------------------------------------- Name ................ default Identifier .......... 1 Status .............. Static Protected Ports ..... No Untagged Ports ...... 2,4-16 Tagged Ports ........ None Trunk Ports ......... None Mirror Port ......... None Management Port ..... None -------------------------------------------------- Name ................ FOO Identifier .......... 2 Status .............. Static Protected Ports ..... No Untagged Ports ...... 1 Tagged Ports ........ 2 ← ポート2 Trunk Ports ......... None Management Port ..... None -------------------------------------------------- Name ................ BAR Identifier .......... 3 Status .............. Static Protected Ports ..... No Untagged Ports ...... 3 Tagged Ports ........ 2 ← ポート2 Trunk Ports ......... None Management Port ..... None --------------------------------------------------
スイッチのタグVLANの設定ができれば、もうポート2のマシンXにはVLAN FOOやVLAN BARのパケットが流れているはずです。ただし、タグつきのイーサネットフレームで。
というわけで確認してみましょう。マシンXで、図13のようにtcpdumpを実行します(注2)。ここで注目して欲しいのは「ethertype」の後の文字列です。さきほどの図8のように、通常のパケットキャプチャの場合はここが「IPv4」となるのですが、今回は「802.1Q」となっています。これこそ、通常の(IPv4などの)イーサネットフレームではなく、タグVLAN拡張されたイーサネットフレームであることの印です。
X# tcpdump -ne -i eth0 17:21:21.917767 00:1a:a0:42:f8:6f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 64: ethertype ARP, arp who-has ... 17:21:21.931694 00:16:e6:f0:32:9a > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 64: ethertype ARP, arp who-has ...
タグVLANのパケットが来ているのが確認できたところで、AからXへpingを打ってみましょう。
・・・あれ、応答がありません。
実は、「ethertype 802.1Q」のフレームは、タグVLANの情報が挿入された分だけフレームのサイズが大きくなってしまい、イーサネットの規格からすると不正なものとなってしまいます。その結果、イーサネットフレームの処理が正しく行えないので、通信ができないということになってしまっています。そこで、イーサネットフレームのタグVLANの部分を処理する機構が必要になってくるわけです。
Linuxの場合は、kernelの設定と補助ツールでタグVLANに対応することができます。
Xとなるマシンで、CONFIG_VLAN_8021Qがmやyになっていれば、そのkernelは既にタグVLANに対応しています(注3)。
そうでない場合は、make menuconfigなどでCONFIG_VLAN_8021Qを有効にしてkernelをビルドしなおします(図14)。
Networking ---> [*] Networking support Networking options ---> <M> 802.1Q VLAN Support
kernelのサポートに加え、vconfigという管理コマンドも必要です。
vconfigのインストールは、お使いのディストリビューションにバイナリパッケージがあれば、それを使えばいいでしょう。恐らく、「vconfig」や「vlan」でパッケージを検索すれば、見つかると思います。Debianの場合は「vlan」という名のパッケージなので、
# aptitude install vlan
でvconfigコマンドをインストールできます。
自分でソースをコンパイルする場合は、LinuxのVLAN実装のサイト(注4)からアーカイブをダウンロードしてコンパイルしてください。アーカイブの中にはkernelパッチも含まれていますが、kernel 2.6の場合はパッチを当てる必要はありません。
LinuxでタグVLANを扱うには、vconfigコマンドでVLAN IDとひもづいた仮想ネットワークインターフェースを作ります。すると、そのインターフェースから、ひもづけたVLANのパケットのみが、タグの部分が除去された状態で受信できます。逆に、送信する場合は、kernelが自動的にイーサフレームにタグを挿入してくれます。この仮想ネットワークインターフェースは、通常の「eth0」といったものと同じように、tcpdumpやiptablesで扱うことができます。
では実際に設定してみましょう。図15を見てください。
まずはじめに、kernelのタグVLANサポートをモジュールにしている場合は、(1)のようにしてkernelモジュールをロードしておきます。
次にvconfigコマンドを使って、VLAN IDとひもづく仮想ネットワークインターフェースを作ります。(2)では、物理インターフェースeth0を行き来するVLAN IDが2のパケット用のインターフェースを作っています。この結果、(4)のように、「eth0.2」というインターフェースが新しくできます(注5)。同様に、(3)でVLAN IDが3のインターフェースを作っています。これも同じく、(4)をみると「eth0.3」ができているのが確認できます。
インターフェースができたので、IPアドレスを割り当てます。(5)でVLAN FOO(VID=2)用のeth0.2には10.6.25.1を、(6)でVLAN BAR(VID=3)用のeth0.3には192.168.0.1を割り当てています。
これでAから10.6.25.1へのpingが、Bから192.168.0.1へのpingが通るはずですが・・・Aからのpingが通りませんね。マシンXのルーティングテーブルを確認してみましょう(図16)。おやおや。宛先(Destination)が10.6.25.0/24の場合の経路が2つありますね。どうやら、VLANに属していないeth0のほうへパケットが流れてしまい、期待した通りに通信できないのが原因のようです。ですので、図中のroute delコマンドでeth0を経由する経路を削除します。これで、A←→X、B←→Xの通信ができるようになりました。
ちなみにDebianの場合ですが、VLAN用のインターフェースの作成からアドレスの割り当てまでは、vlanパッケージがインストールされていれば、/etc/network/interfacesにリスト1のように書いておくと、起動時に自動的に設定してくれます。詳しくはman vlan-interfacesを参照してください。
X# modprobe 8021q ─(1) X# vconfig add eth0 2 ─(2) Added VLAN with VID == 2 to IF -:eth0:- X# vconfig add eth0 3 ─(3) Added VLAN with VID == 3 to IF -:eth0:- X# ip addr show ※一部省略してあります 2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:1a:a0:42:f4:12 brd ff:ff:ff:ff:ff:ff inet 10.6.25.9/24 brd 10.6.25.255 scope global eth0 3: eth0.2@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop ┐ link/ether 00:1a:a0:42:f4:12 brd ff:ff:ff:ff:ff:ff │(4) 4: eth0.3@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop │ link/ether 00:1a:a0:42:f4:12 brd ff:ff:ff:ff:ff:ff ┘ # ifconfig eth0.2 10.6.25.1 netmask 255.255.255.0 broadcast 10.6.25.255 ─(5) # ifconfig eth0.3 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 ─(6)
X# netstat -nr Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0.3 10.6.25.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 10.6.25.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0.2 0.0.0.0 10.6.25.254 0.0.0.0 UG 0 0 0 eth0 X# route del -net 10.6.25.0 netmask 255.255.255.0 dev eth0
auto eth0 iface eth0 inet static address 10.6.25.9 netmask 255.255.255.0 network 10.6.25.0 broadcast 10.6.25.255 gateway 10.6.25.254 auto eth0.2 iface eth0.2 inet static address 10.6.25.1 netmask 255.255.255.0 post-up route del -net 10.6.25.0 netmask 255.255.255.0 dev eth0 auto eth0.3 iface eth0.3 inet static address 192.168.0.1 netmask 255.255.255.0
ここまでで、AとXの間、XとBの間の通信はできるようになりました。次に、マシンXでパケット転送を有効にして、Xを経由してAとBが通信できるようにしてみましょう。
マシンAで図17の(1)を、マシンBで図17の(2)を実行して、対向のVLANのルーティングを、XのIPアドレス(10.6.25.1または192.168.0.1)に向けます。あとは、マシンXで図17の(3)を実行すれば、AとBの間で通信ができるようになります。
(1)マシンAで実行 A# route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.6.25.1 dev eth0 (2)マシンBで実行 B# route add -net 10.6.25.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth0 (3)マシンXで実行 X# echo 1 > /proc/sys/net/ipv4/ip_forward
最後に、全てのパケットを転送するのではなく、許可したもののみ転送するようにしてみましょう。マシンAが属するVLAN FOOがサーバファーム内部のネットワークで、マシンBが属するVLAN BARが上位ルータとのネットワークと思っていただくとイメージしやすいんではないかと思います。
許可・拒否の制御はiptablesのFORWARDチェインで行います。出入口のインターフェースはeth0.2とeth0.3となります。Linuxでゲートウェイルータを作ったことがある方ならピンとくるのではないかと思います。
では、マシンXで、リスト2のコマンドを実行します。
リスト2を解説すると、
ということになります。
01: iptables -F FORWARD 02: iptables -P FORWARD DROP 03: iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED 04: iptables -A FORWARD -j ACCEPT -i eth0.2 -o eth0.3
BAR→FOOは全拒否ではなく、HTTP(ポート80)だけ許可するようにするには、リスト2に続いて、リスト3を実行すればOKです。
01: iptables -A FORWARD -j ACCEPT -i eth0.3 -o eth0.2 -p tcp -d 10.6.25.0/24 --dport 80
今回は運用しやすいネットワーク構成を求めて、VLANを使ったフラットな構成について考察してみました。
「KISS」(Keep It Simple, Stupid)という格言の通り、構成は極力単純に、シンプルにするべきだと考えます。今回は、複雑になりがちなネットワーク構成を、VLANを活用してシンプルな物理構成で実現するお話をしました。
VLANというと、オフィスやフロア間のネットワークといった文脈で見聞きすることが多いと思いますが、今回のようにサーバファームで活用することにより、「物理構成の単純化」を実現でき、「運用のしやすさ」につなげることができます。
タコ足配線でお悩みの方もそうでない方も、ネットワーク構成を設計する際にはVLANの導入を検討してみるのもいいのではないかと思います。
「デフォルトVLAN」とはなにかというと、VLANではないネットワークです。例えば、本文の図10では、ポート1と3はポートVLANに参加していますが、それ以外のポート(2と4〜16)はデフォルトVLANに参加している(=どのVLANにも参加していない)ことになります。
今回はあえて説明のためVLANを2つ(FOOとBAR)作りましたが、片方はデフォルトVLANでも構いません。
例えば、VLAN FOOをデフォルトVLANにした場合、マシンAとマシンXのeth0とはそのままで通信できるので、図16で行ったようなルーティングテーブルの操作は必要ありません。パケットフィルタリングは、リスト2とリスト3の「eth0.2」を「eth0」に置き換えればOKです。
VLAN FOO側がサーバファーム内部のネットワークで、サーバが大量にあるような場合は、いちいちスイッチでポートVLANの設定をするのが面倒なので、内部はデフォルトVLANにしてしまうというのもアリだと思います。
VLANを活用したフラットな構成の実例として、筆者らのDSASの構成をお見せしたいと思います。(図18)
基本的には本文中の図5と同じですが、上位ルータとつながっているスイッチをコアスイッチと呼び、このコアスイッチを中心として、各サーバラックのスイッチへとのびているようなスター型の構成にしています。リニア型、つまり、コアスイッチ‐スイッチ1‐スイッチ2を直列につなぐような構成だと、スイッチ1が故障した場合にスイッチ2までその影響を受ける可能性があるため、リニア型ではなくスター型にしています。
ちょっと余談になりますが、図18の図中のモノの配置が左右対称でないのが気になった方はするいどいです。実は、実稼働中の構成では、左列のスイッチと対になるスイッチが右列にもあり、各サーバは両方のスイッチにつながっています。本連載ではまだ紹介していないトピックなので図では省略しましたが、次回、レイヤ2以下の冗長化のお話をする予定ですので、そのときにまた改めて解説したいと思います。