自宅に（チョット高品質な）ネットワークを構築してみた

# はじめに
## 本記事の概要
一人暮らしを始めて0からネットワークを構築したときの記録をまとめました。
自宅ネットワーク構築系のネタはネット上に多く掲載されていますが、本記事は試行錯誤の過程に重点を置いています。

## 投稿した動機
- 私はネットワーク基盤担当なので、基盤系のネタを読みたい   
⇒しかしQiitaのAdvent Calendarには基盤系のネタが少ない  
⇒近年Twiter絵師曰「推しのジャンルがなければ自分で作ればよい」  
⇒書いてみた
- ~~Advent Calendarの投稿枠が前日に空いていた~~  
社外へ情報を発信し社会に貢献しようとする弊社メンバーの強い意志に共感した
- ~~弊社のアプリ系・研究系エンジニアが投稿記事の技術的ハードルを上げていたので「けしからん」と思いハードルを下げにきた~~  
基盤系エンジニアを目指す初学者が関心を持ちやすい記事を作成した方がよいと思った

## 対象とする読者
- __SOHO向けのネットワーク__を構築したい人
- オンラインゲームなどをするために__安定したネットワーク__へ改善したい人
- セキュリティ的な観点で__ネットワーク分離__を意識し始めた人

# ネットワーク設計
さっそく本題に入ります。
なお途中にネットワーク図を載せており、作図にあたっては [ネットワーク図を書くときに考えること(2)](http://stereocat.hatenablog.com/entry/20120708/1341733222) を参考にしつつ独自のアレンジを加えています。

▽凡例
<img width="80%" alt="凡例" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/a9f3ff24-c323-f453-4da8-342d3f03ff21.gif">

## 要求整理
一人暮らしを始めるにあたり、自宅のネットワークを利用して何をしたいか考えました。私の場合は以下の通り。

- 私用PCと私用スマホ（Android）でネットサーフィンしたい
- ローカルのNAS[^1]にデータを大量に保存し、私用PCとAndroidから参照したい 
    - 自宅外からもNASを参照したい
    - スキャナ[^2]で資料をスキャンし、NASに保存したい
- Nintendo SwitchやPlayStation 4でオンラインゲームしたい
- Echo dotで音楽を再生したい
- 電波時計の時刻同期用の電波装置[^3]を利用したい
- 社用ノートPCでテレワークしたい ~~…本当に？~~
  - ~~社用ノートPCに謎の通信監視システムがあり業務中にネットサーフィンすると検知されるリスクがあるので~~ __私用PCが万一マルウェアに感染した場合に社用ノートPCへの影響を阻止するため__ネットワークを分離したい

…欲望が駄々洩れですね。

## 第0.5世代
要求をもとにネットワークの論理的な設計を行いました。要件整理は非常に手間なので省略。
便宜上、構築前の検討に留まったネットワークは「第0.x世代」とします。
<img width="30%" alt="図面1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/4eb72fc5-63d2-3d07-c31d-86c2f4374bb7.gif">

▽考え方・補足

- WANはNTTフレッツ光網へ接続。フレッツ光網内の理解・書き方は [NTTフレッツ光における通信速度などの現状について、背景や仕組みから正しく理解する2020](https://diary.sorah.jp/2020/06/20/ngn-explained-2020) を参考にしました
- VPNの機能はルータの機能で実装することにしました。下手にサーバを立てるとセキュリティホールになりかねない…
- LAN内の機器は通信要件を基に以下のように分類しました
    - VLAN_A・B…制限なし
    - VLAN_C…インターネット向け通信のみ許可（外向きのみ）
    - VLAN_D～…サービスに必要な通信のみIPアドレス・ポート番号を限定して通信許可（双方向）
- スキャナは私用PCとUSBで接続しようかなー、とこの時点では考えていました
- NW機器が管理インターフェースを持つ前提で描きました

## 第0.9世代
一般のご家庭であればここまでで十分ですが、日頃ネットワークを弄っている身としてはいくつか不満がありました。

- インターネット向け通信はIPv6経由の方が帯域逼迫なく通信できるので、私用PCとAndroidでは__IPv6を使いたかった__  
⇒自宅の回線は__v6プラス__に対応していたので、これを利用しました
- スキャナを複数の端末から利用することを想定した場合、私用PCを踏み台にする構成は避けたかった  
⇒__スキャナを独立したOA機器として扱いたい__  
⇒USB機器をLAN接続できる__USBデバイスサーバ__[^4]を導入しました
- __NW機器の帯域利用量の監視__や__アクセスリストの通信破棄ログの取得__をしたかった  
⇒NW機器の監視装置として深く考えずRaspberry Pi 4を購入しました  
（情報系エンジニアたるものPiの一つは持っておいた方がええやろ、の精神）

これらを踏まえて再度設計を見直し。
<img width="40%" alt="図面2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/9a040a9a-7737-b07d-256d-5854a532256d.gif">

▽考え方・補足

- 我が家の場合、残念ながらWAN側から配布されるIPv6アドレスは/64なので、一般的なIPv6アドレス割当方式（SLAAC）に準ずるとIPv6のVLANは一つしか定義できなかった  
⇒仕方ないのでVLAN_B（Android）はVLAN_A（私用PC）へ集約しました
- IPv4インターネット向けの通信は基本的にIPv6 MAP-E経由としました
- VPNの通信は特定のポート番号を利用する必要があるためIPv4 PPPoE経由としました

## 機器選定
ここまでの設計をもとに、物理的な設計と機器選定を行いました。
ネットワーク機器は__安定性が命__であるため、エンタープライズ向け製品から選定しました。

- ルータに求められる特殊機能は（ざっくりと）IPv6 MAP-E、VPN  
⇒実家でYAMAHA RTX810を利用していたこともあり、__YAMAHA RTX830__を採用。The・安定択[^5]
- RTX830はダウンリンク4ポートなので、別途スイッチが必要  
⇒スイッチはVLAN機能が利用できれば何でも良い  
⇒勉強も兼ねて__Cisco Catalyst 2960CX-8TC-L__を採用。コンパクトで静音なのがGood.
- 無線アクセスポイント（無線AP）はVLANとSSIDを自由に設定できる製品にしたい  
⇒仕事でHPE Arubaシリーズを扱っていたのでArubaとし、卓上設置が可能な__HPE Aruba AP-303H__を採用[^6]
- 無線APの電源はPoE給電にしたかったので、別途PoEインジェクタを購入  
スイッチを給電タイプの製品にする（＝Catalyst 2960CX-8PC-Lを採用する）案もありましたが、スイッチを重ね置きする可能性を考慮し、発熱しやすいスイッチを採用する案は避けました

## 第1世代
光回線工事・機器調達を行い、自宅ネットワーク（第1世代）を構築しました。
<img width="30%" alt="図面3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/6e21b64a-0cad-cfa1-09c3-ed20b7aac21d.gif">

▽考え方・補足

- NW機器のマネジメント（Cisco的にはvty）にそれぞれACLを設定できたため、ルータのVLAN_FのACLを削除しました
- インターネット通信限定の機器（VLAN_C）のVLAN内通信を禁止するため、スイッチのポートは__保護ポート__に設定しました。また無線APもクライアント間通信を無効化しました

## 第2世代
第1世代を構築して1ヶ月経過し、インターネットからファイルをダウンロードしてNASに保管していたとき、ふと気づきました。

- 私用PCが複数台（仮にPC_A、PC_Bとする）あり、PC_Aがインターネットから大量ダウンロード通信し、同時にPC_BがNASから大量ダウンロード通信した場合、__ルータ～スイッチ間がボトルネックになる__  
⇒ルータ（RTX830）にはリンク冗長の機能がなく、リンク帯域増は困難  
⇒PC_B～NASの通信はスイッチ内で折り返すようにすればボトルネックを回避できる  
⇒__スイッチ__（Catalyst 2960CX）__内部のルーティングを有効にすればよい__

…というわけで、設計を見直し。
<img width="30%" alt="図面4" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/c8731cb8-0555-d9fd-af81-a701b90a9b2a.gif">

▽考え方・補足

- インターネット限定通信の機器（VLAN_C）とIPv6通信を除き、スイッチをゲートウェイとしました
- ルータ～スイッチ間にリンクセグメントを設定しました

## 第3世代（現在）
第2世代でルータ～スイッチ間のボトルネックを回避したことにより、別の問題が発生しました。

- スイッチのACLはステートレスなパケットフィルタで、通信制御としてはイマイチ  
できれば__ステートフルな通信制御にしたい__  
⇒LAN内に__ファイアウォール__を入れるしかない…

というわけで再び機器選定。

- 通信制御を実装するならば、__ルータと同じメーカーの製品の方が実装しやすい__  
⇒__YAMAHA FWX120__でFA。[^7]

そこでファイアウォールを購入し、再び設計を見直し。
<img width="30%" alt="図面5" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/9d4c91e8-bf60-9c75-14b0-51ca975dee61.gif">

▽考え方・補足

- スイッチの下にファイアウォールを接続し、サービスを提供する機器をファイアウォールへ収容変更しました
- スイッチ～ファイアウォール間にリンクセグメントを設定しました
- どうせならルータはインターネット接続機能に特化しようと考え、DHCP機能やDNSフォワーダ機能はファイアウォールで動作するようにしました  
⇒ルータを切り離しても私用PCはLAN内の機器と通信可能になりました

## 第4世代（将来構想）
今のところファイアウォールと接続する機器は4種類なので、YAMAHA FWX120のLANポートにピッタリ収容できています。
ファイアウォールのポート数が足りなくなった場合は、
  
- ファイアウォールの下に新しいスイッチを増設する
- ファイアウォールをアーム構成で接続し、現在のスイッチに機器を接続する

のいずれかで対応する予定です。機器数を増やしたくないので、多分後者にすると思います。
<img width="30%" alt="図面6" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/ebf57db2-7d74-31ac-1102-cfcb294391bf.gif">
<img width="30%" alt="図面7" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/9c5eb80b-3c4f-4c80-455e-b9b6de623191.gif">

# ファシリティ設計
こちらは現時点のみ紹介します。

## ラック・ラック内配線
<img width="30%" alt="写真1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/d4f0aa7b-7725-ec60-d466-5b39084ea6cb.jpeg">

▽考え方・補足

- 機器はメタルラック[^8]に設置しました。__安価で軽くて設置が容易であるものの、転倒しやすいので要注意__
- LANケーブルはラック手前に揃え、面ファスナーで束ねています。見た目を良くする意味だけでなく、__LANケーブルに引っ掛けてラックが手前に転倒することを防止しています__
- 電源ケーブルは束ねるのが難しいため、ラック奥に適当に垂らしています。~~ダサいとか言わないで~~ダサいですね
- ONUをラックに置くため、自前で長めの光ケーブルを購入しました。ただし（宅外から）ONUまではNTTの運用・保守の責任範囲であり__弄ることは推奨しません__
- Raspberry Piの電源ケーブルなど、電源アダプタが大きく隣のコンセントを潰してしまう場合、30 cm程度の延長コードで逃がすとよいです
- OAタップの__電源ケーブルを束ねてありますが、マネしないように。__年末に直す予定です…

## ラック外配線
<img width="30%" alt="写真2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/35923b8b-8328-663a-92c9-32ea589d6845.jpeg">

▽考え方・補足

- 無線アクセスポイントはメタルラックから離れた場所に設置したため、天井経由で配線。モールを被せた方が見た目きれいですが、賃貸の壁紙を傷付けてしまうのを避けるため剥がせる両面テープ＋コマンドフック[^9]で代用しています。  
両面テープが剥がれることは少ないですが、湿気が高まる季節になると剥がれやすくなる気がします。

# おわりに
自宅にチョット高品質なネットワークを構築するための一例を紹介しましたが、

- 無数にあるネットワーク機器から用途に適合した製品を選定する
- 機器の調達費用を負担する
- 機器の設置場所・電源・配線を用意する

など、知識0からチャレンジするには比較的ハードルが高く、実践が必要になります。
本格的にネットワークを実践したい方は~~弊社に入ろう~~ 業務としてネットワークに携われる環境へ身を置くことをお勧めします。

[^1]: 古いデスクトップPCにOpenMediaVaultを動かしています
[^2]: 富士通 ScanSnap iX500
[^3]: 共立プロダクツ P18-NTPLRBK
[^4]: サイレックス・テクノロジー DS-600
[^5]: NEC UNIVERGE IXシリーズも候補でしたが、IXシリーズは一般向けにファームウェアを配布しておらず脆弱性が発見された場合に対処できないため除外
[^6]: Arubaシリーズは比較的癖が強く、管理UIの日本語翻訳が十分とは言い難いです。普通はYAMAHA WLX212の方が扱いやすいと思います
[^7]: RTX810も候補でしたが実家で導入済みであり同じ機器を採用するのは面白みに欠けるので除外
[^8]: ドウシシャ M1560305BK 幅59.5cm×奥行29.5cm×高さ151.5cm
[^9]: 3M コマンドフック コード用 CMG-S-CL20