UNIX的なアレ

UNIX的なこととかいろいろ

いかにしてベンチャーの社内ネットワークを構築するか

情シス担当者なんていない

現在、nanapiは社員数30名弱くらいの会社規模です。アルバイトさんを含めると70名くらいになりますが、そのうちエンジニアは私を含めて8名。このくらいの会社の規模だと、まだ情シス的な仕事を専門的にやるような人はいません。

当然、ネットワークの専門家もまだ弊社にはいないので必然的にエンジニアの誰かがこのあたりを担当することになります。ベンチャーにおいてだいたいの場合、こういった技術的な行き場の分からない仕事ってのはCTOがやるもんです。

しかし、情シス的な仕事って本当に難儀な仕事。動いてて当たり前、高速で当たり前、ちょっとでもネットワークが遅くなるものならその時点ですでに障害です。

外注するという選択肢もありますが、何かしら社内でネットワークのトラブルがあれば少なくともその瞬間はたぶん僕が対応するなり調査するなりすることになります。どうせそうなるのであれば、自分で設計して構築したほうがいいやと思い全部自分でやりました。

今回導入した機器

12月からnanapiは渋谷にオフィスを移転しました。それをきっかけにネットワークをいろいろと作り直しました。人数も増えてきたのでちょうどよい機会です。

今回使ったネットワーク機器はこの辺りです。ネットワーク周りだと、メーカーを統一していたほうが中央管理できるので今回はYAMAHAで統一しました。

ルーター

たぶん、同規模のベンチャーではこれを使っている会社は多いのではないでしょうか。有名な機種ですね。

スイッチ

RTXで管理するために、同じYAMAHAのスイッチにしました。PoEスイッチを買っているのは、アクセスポイントに対応するためです。

アクセスポイント

[asin:B00BM4ZC10:detail]

そして最後にアクセスポイントです。このアクセスポイントは、5Ghzと2.4Ghzの同時利用ができます。

YAMAHAにしたのは慣れが大きいです。前のオフィスでもRTX810を使っていたことから、学習コストをできるだけかけたくなかったので同じメーカーのものにしています。

オマケ

これ、絶対に用意しておきましょう。ないと泣きを見ます。

YAMAHAで統一するメリット

GUIがあり、そこから多くのことを管理できる点が挙げられます。また、ルーターからアクセスポイントも操作することができるのでこのあたりも便利ですね。

f:id:wadap:20131217093027j:plain

L1は業者にしっかりとお願いする

ネットワーク構築において、L1でしくじると後でどうにもならなくなってしまいます。というわけで、ものすごく重要です。とはいえ、自分自身でケーブルを敷設するのも大変なので一般的には業者にお願いします。

まずオフィスのレイアウトによって、どのようにLANケーブルを引き回すかなどの話がでてきます。そこそこの規模のオフィスになると、まずOAフロアになっていると思うので、割りと自由にレイアウトを組めると思います。

なので、デスクの配置を決めその上でどのようにLANケーブルを敷設するのかをしっかりと業者と話し合う必要があります。その上で、必要なスイッチのポート数などが決まってきますので、このあたりから担当者はしっかりと入る必要があります。

そのスケジュールは適切か

オフィスネットワークの構築には複数の業者が入ります。ざっと思いつく限りでも以下の業者が挙げられます。

  • LANケーブルなどを敷設する業者
  • IP電話の設定などをやる業者
  • インターネット回線の工事をやる業者

さらに、上記に合わせてネットワーク機器の調達時期も重なってきます。弊社のようなWeb企業においてインターネットがつながらないというのは業務そのものがとまるので、移転時にネットワークがつながることは当たり前です。

このあたりはかなり計画的に進める必要があります。

どのようにして論理的にネットワークを切るか

従業員数だと70名ほどですが、一人2台端末を使う人やスマホなども接続することを考えると結構な台数のマシンがネットワークに接続することになります。

管理上、ある程度分けておきたいので/24のサブネットを切り用途ごとに分けるようにしました。以下の様な割り当てです。

セグメント 用途
10.5.1.0/24 社内管理機器系
10.5.3.0/24 社内開発環境
10.5.10.0/24 有線LAN+IP電話
10.5.15.0/24 無線LAN
10.5.20.0/24 ゲスト用無線LAN

このVLANを設定するにはRTXでは以下のようにします。

switch control use lan1 on
vlan lan1/1 802.1q vid=10 name=VLAN10
ip lan1/1 address 10.5.10.254/24
vlan lan1/2 802.1q vid=15 name=VLAN15
ip lan1/2 address 10.5.15.254/24
vlan lan1/3 802.1q vid=3 name=VLAN3
ip lan1/3 address 10.5.3.254/24
vlan lan1/4 802.1q vid=20 name=VLAN20
ip lan1/4 address 10.5.20.254/24

このようにある程度用途ごとにわけるようにしています。アドレッシングに関してはあとから増えることを想定してある程度飛ばしてつけています。

できるだけ無線LAN

f:id:wadap:20131225095125j:plain

有線LANのほうが当然安定はしていますが、オフィスのレイアウトの問題やケーブル敷設の問題など出来る限りLANケーブルは社内から減らしたいと思っています。移転の度に絡まり続けるLANケーブル...

しかし無線LANというと、ちょっと遅いイメージですが最近のマシンは5Ghzに対応しているのでかなり快適に使用できます。

実際に計測しても、80Mbps程度はいつもでているのでまず体感的に遅いと感じることはありません。私自身は、sshでサーバにはいって開発をするスタイルですが、それでも全く問題を感じないレベルです。

タグVLANをつかってSSIDごとにVLANを設定する

それでは無線LANを使用しますが、無線LANごとにVLANを設定したいという要件があります。後述しますが、ゲスト用のネットワークなんかは良い例です。

そこでVLANが登場するわけですが、VLANにはポートVLANとタグVLANが存在します。ポートVLANのほうが直感的にわかりますが、どうしても柔軟なネットワーク構成を組もうとすると無理がでてきます。特に複数のSSIDを用意して、SSIDごとに所属させるVLANを変えたいような場合はタグVLANを使ったほうが良いです。

このあたりはRTXのGUIから設定しました。

f:id:wadap:20131225202733j:plain

このようにしています。無線LANのアクセスポイントは、アクセスポイント自体にも管理用のIPアドレスが必要になります。

そういった場合はアクセスVLANに、管理機器用のセグメントを割り当てて、無線LANで使いたいセグメントをタグVLANで流すようにしました。

タグVLANでパケットを流すように設定したら、あとはアクセスポイント側でSSIDとVLANIDを紐付ければOKです。以下のようにGUIから設定できます。

f:id:wadap:20131225203206j:plain

アクセスポイントのチャンネルの割り当て

無線LANですが、最近の機器だと多くの機器が5Ghz帯をサポートしているので極力5Ghzで接続してもらうようにします。

2.4Ghzのほうが当然対応している機器も多いですが、その分すごい混線します。とくに今回オフィスを構えた渋谷とかになると、ものすごい量のSSIDが飛び交っています。

とはいえ古いマシン用に2.4Ghz帯の無線LANを飛ばす必要もあります。その際の無線LANのチャンネルですが、1channel〜13channelまでありますが5channelずつずらして設定しないと混線してしまいパフォーマンスが落ちます。 例えば以下のようにchannelを割り当てる必要があります。

  • 1channel
  • 6channel
  • 11channel

無線LANよろず講座|無線LANのチャンネルの割り当て方

しかし実際はこれだけでなく様々な要因で干渉されてしまい無線LANのパフォーマンスは落ちます。周囲のオフィスのネットワークもそうですし、電子レンジなどでも影響をうけてしまいます。

こればかりは自分らだけでは解決することは難しいので、極力5Ghzを使うという選択肢を取るべきですね。

f:id:wadap:20131225100122j:plain

なお、周囲のSSIDがどんなchannelで設定されているのかをみる場合は以下のアプリが便利です。Androidアプリでもあるのでもってオフィス内を歩いていろいろと調べたりしています。

https://itunes.apple.com/jp/app/inssider/id507308266?mt=12&at=10l8JW&ct=hatenablog https://play.google.com/store/apps/details?id=net.metageek&hl=ja

ちなみに5Ghz帯であればもっとchannelを増やすことができます。可能な限り5Ghz帯を使用したいですね。

WAN側の回線選定

nanapiでは、USENBROAD-GATE 02をつかっています。前のオフィスから使用していますが、得に問題もなく安定して使用できています。

http://www.gate02.ne.jp/networkservice/ba

ただし、オフィスとなるとできればIPアドレスは固定で運用したいもの。固定のIPアドレスも複数使用したいので、IP8プランを契約しています。なぜ複数のIPアドレスが必要なのかは後述します。

なお、USEN BROAD-GATEを使う場合はルーター側で使用する帯域の制限をかける必要があります。なんかこれをかけないとマズイらしい(詳細は忘れました)というわけで、RTXでは以下のようにしてシェイピングの設定を入れています。

queue lan2 type shaping
queue class filter 1 1 ip * * * * *
queue lan2 class filter list 1
queue lan2 class property 1 bandwidth=200m

ヤマハネットワーク製品

ゲストネットワークの構築

さて、ある程度の規模になってくると来客者向けにゲストネットワークがほしいよねーみたいな話になってきます。当然ですが、社内のネットワークとは分離しないといけない。

また、オフィスのIPアドレスは固定にしていてそれによっていろいろな制限をかけていたりします。ということは、インターネットに出て行く時のIPアドレスも変えたくなります。上記の2つの要件を実現するような設定をルーターに入れてみました。

相互通信をさせないようにする

まず前者ですが、これはパケットフィルタリングを行えばOKです。10.5.20.0/24のセグメントがゲスト用のネットワークなので、それ以外のネットワークとのパケットをすべてrejectします。これで相互通信ができなようになります。

ip filter 9000 reject 10.5.20.0/24 10.5.1.0/24
ip filter 9001 reject 10.5.20.0/24 10.5.3.0/24
ip filter 9002 reject 10.5.20.0/24 10.5.11.0/24
ip filter 9003 reject 10.5.20.0/24 10.5.15.0/24
ip filter 9004 reject 10.5.1.0/24 10.5.20.0/24
ip filter 9005 reject 10.5.3.0/24 10.5.20.0/24
ip filter 9006 reject 10.5.11.0/24 10.5.20.0/24
ip filter 9007 reject 10.5.15.0/24 10.5.20.0/24

出て行くIPアドレスを変更する

USENのIP8プランにすると、255.255.255.248でIPアドレスを割り当てられます。ようするに8つのIPアドレスが付与されるわけですが、その中で実際に使うことができるのは6つです。

これはルーターを最初に設定するときにすでに打っているコマンドですが、こんな感じで設定します。

ip lan2 address xxx.xxx.xxx.194/29

その上で、特定のIPアドレスからインターネットに出ようとする際にIPアドレスを付け替える設定は以下になります。nat-masqueradeを使用して設定します。

nat descriptor type 1 nat-masquerade
nat descriptor address outer 1 xxx.xxx.xxx.195
nat descriptor address inner 1 10.5.20.1-10.5.20.200

このようにすることで、特定のIPアドレスをもつマシンがでていくときにIPアドレスをつけかえて出て行くことができます。

ルーターを監視する

続いて、ルーターのCPU使用率などはある程度監視しておく必要があります。NAT周りでCPUが詰まることとかはよく聞く話ですし、ある程度のデータのモニタリングは必要です。

RTXはSNMPをしゃべることができるので、cactiで設定すればOKです。snmp周りの設定をしてから、cacti側に設定を入れます。

snmp host 10.5.3.1 hogehoge

とりあえず、snmpでアクセスするホストは1台だけなので指定して書くようにしました。あとはcactiで設定すればこんな感じで取ることができます。

f:id:wadap:20131225204444j:plain

RTX側でもリソースは記録していますが、本体の負荷が高い時などは外のホストにデータが記録されているほうがスムーズに確認することができます。そのため、今回はcactiで記録するようにしました。

syslogを飛ばす

さて、次はsyslogサーバにlogを投げておきます。以下の設定をいれます。

syslog host 10.5.3.1
syslog facility local0
syslog notice on
syslog info off

どのレベルまで送るかはお好みで。syslogサーバ側は上記に合わせて適切に設定を入れます。

とまぁいろいろやってきましたが、ざっとこんなところでしょうか。

さいごに

僕はネットワークエンジニアではないので、今回もいろいろと学びながら構築をしてきました。その中で感じたことは、この手の情シス周りのベストプラクティス的な情報があまりにも少ないということです。

そういう思いもあって、ブログにまとめてみることにしました。専門的にやられている方がいましたら、ぜひとも情報を発信してほしいなーと思います!