ネットワークエンジニアが自宅システムとその運用トラブル・作業道具をとりとめもなく紹介します。前回の紹介の2024年度版になりますので同じネタがあるかもしれませんが悪しからず。
システム全体解説
ネットワーク
数年にわたってネットワークを改造し作図していった結果、解説するのが面倒になるほど細かくなってしまいました。
元の図面はモノクロですが、部分的に色付け・色分けして多少わかりやすいようにしました。上から順に、インターネット・NGN、ルータ(RTX830)、ブリッジ(IX2235)、L3スイッチ(WS-C2960X-24PSQ-L)、端末・サーバです。
IPv4通信はブリッジを通らずルータとL3スイッチを経由します。
IPv6通信はブリッジを経由します。フレッツ光が光電話なし契約であり宅内のIPv6アドレスはSLAAC(/64)一つしか配布されないため、無理やりVLAN間ブリッジと通信制御をしています。
ファシリティ(ラック)
ラックの考え方は前回にも紹介しているため説明は省略。
変更点はラックを比較して見るとわかりやすいですね。
- UTPケーブルを細径に変更した
- ファイアウォール(FW120)を廃止した(フィルタの管理が手間になったため)
- ブリッジ(IX2235)を追加した
- Raspberry Pi 4からIntel NUCへ置き換えサーバを仮想化した
- L2/L3スイッチを変更した(C2960CX→C2960X)
- NASを小型化した
PlayStation 4からSteam on 自宅PCへ移行した
ネットワーク図とラックをマッピングすると↓のようになります。
製品個別解説
ネットワーク系
ルータ|YAMAHA RTX830
いわずと知れた名機器。
「v6プラス」対応機種 の中で業務系でも使うルータとなると、ヤマハ(RTX)、NEC(IX)、アライドテレシス、古河電工あたりでしょうか?
私の場合は(v6プラスとは関係なく)DDNSでリモートアクセスVPNを実現したかったためネットボランチDNSとして有名なヤマハルータを採用しました。
最近でもAndroidのVPN接続でL2TP/IPsecが廃止された際にいち早くIKEv2を実装するなど、小回りがきいたアップデートをされており好印象です。
ブリッジ|NEC IX2235
ルータの機能もありますが、ここではブリッジとして紹介。
前述の構成図の通り、異なるVLANをブリッジで一つのセグメントにしつつ、IPv4パケット(やARP)をドロップする、といった力業を実現できます。
ネットワーク的に正しい構成は微妙ですが、そもそもフレッツ光が/64を一つしか配布しないのがイケてないので仕方ありません。この点は、かの登先生も以下のように言及しています。
第一の問題は、フレッツ網では原則としてIPv6のIP アドレス(群)を、1つの回線について、/64という単位でしか割当てない(前述の1844京6744兆737億955万1616個である。)という問題である。IPv4では、1つの部門用の最小のLANを構築するためには、まさに/64が1つ必要になる (つまり、1つの部署ごとに、1844京6744兆737億955万1616個必要になる。)から、フレッツの/64では、1つの課のネットワークしか作れない、ということになってしまう。
ところが、実はこれには裏技があり、既存のフレッツ回線において「ひかり電話」を経由すると、突然、アドレスが/56も潤沢にもらえるのである。
しかし、IPv6の本質と異なる「ひかり電話」の契約の有無によって、もらえるIPv6アドレスの数が256倍も変わったり、通信の方式が変わったりするのは、明らかにおかしい。ひかり電話という無関係な部分をのぞいて、支払う料金が同一なのに、サービス内容が不公平である。
引用:秘密の NTT 電話局、フレッツ光、インターネット入門
L2/L3スイッチ|Cisco WS-C2960X-24PSQ-L
24ポート搭載、うち8ポートにPoE給電機能を内蔵しながらファンレス、その上でCiscoスイッチの多彩な設定機能を兼ね備えており、自宅L3/L2スイッチの最適解だと勝手に思っています。
細径UTPケーブル|日本製線 SPG6-PC-L*
細径ケーブルは通常径と比較してコンパクトに収容できます。また同社のUTPケーブルは巻き癖がつきにくく、まっすぐ整線できます。ふつくしい…
(以前P社の細径UTPケーブルを買ってみたところ、バネのように丸まった巻き癖がまったくとれませんでした。)
同社のケーブルは愛三電機から型番指定で取り寄せすれば購入できます。LANケーブルにしては少々高価ですが、ほぼ一生ものと考えれば十分許容できます。
余談ですが、LANケーブル≒ツイストペアケーブルとは文字通り「ツイストペア」構造が基本です。細いとはいえフラットケーブルのような規格外製品を買うのは避けましょう。
アクセスポイント|HPE Aruba AP-303H
ラックの上から天井へ配線した先に設置してあります。
業務用のネットワーク・無線設定機能をもちながら、比較的お手頃価格で調達できました(過去形)。AP-303Hは今でも現行機種ではありますが.11ac wave2までしか対応していません。今買うならAP-503Hになるかと思います(AP-605Hはちと高い)。
ただし指向性アンテナであるせいか遮蔽にやや弱めな印象があります。
Aruba APの仮想コントローラー型アクセスポイントはGUIで操作できる設定が細かく、マニュアル片手に設定画面をポチポチするだけでも勉強になります。
サーバ系
サーバは本職ではありません。参考程度に。
サーバ仮想化|Proxmox VE
Intel NUC ASUS NUCにProxmox VEを導入し、仮想サーバとして
フルリゾルバ(Unbound)、権威DNS(NSD)、ログ収集(Rsyslog)、性能監視(Prometheus、Grafana)、公開ファイルサーバ(NextCloud)を入れています。
Proxmox VEはLinuxコンテナ(LXC)を利用できる点も非常に便利です。LXCは軽量かつ数秒で起動します。
余談ですが、以前はESXiを使っていました。Intel CPUのPSODやUSB-NICの固定化で少し手間が掛かっていました。その後、例の買収騒動でESXiのフリー提供の先行きが怪しくなった(今は提供終了している?)ためProxmox VEへ切り替えました。
フルリゾルバ|Unbound
楽で確実に名前解決するならプロバイダのフルリゾルバやCloudflare(1.1.1.1)、Google Public DNS(8.8.8.8)を使ったほうがよいですが、自分の環境で名前解決したいという謎ポリシーでフルリゾルバを入れています。
名前解決の速度を重視するつもりはありませんが、やはり自宅内にあったほうがキャッシュでの解決は早いようです。
明らかにヤバそうなドメインは名前解決せずフィルタリングしています。
以前はPi-holeでフィルタリングしてUnboundで非再帰問合せという多段構成にしていましたが、Unboundでフィルタを再現できることに気づき今はUnboundのみです。(あとPi-holeを調整する際に内部のDNSmasqを弄るのが少し面倒でした)
フィルタリングの方法は、1日1回 StevenBlack の「Unified hosts + fakenews + gambling」をダウンロードし、テキスト加工してUnboundのlocal-zoneにnxdomainとして登録する、という方法です。(ちなみに+ porn のフィルタだとニコ動がブロックされます)
サンプルコード
#!/bin/bash
wget https://www.internic.net/domain/named.root -q -O /var/lib/unbound/root.hints
curl -s https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling/hosts | \
grep ^0.0.0.0 - | \
sed 's/ #.*$//;
s/^0.0.0.0 \(.*\)/local-zone: "\1" always_nxdomain/' \
>/etc/unbound/unbound.conf.d/blacklist
unbound-control dump_cache > dns-cache.txt
systemctl restart unbound.service
unbound-control load_cache < dns-cache.txt
注:bashは本職ではないので割と雑です
性能監視|Prometheus+Grafana
Ping応答時間(ICMP RTT)
Ping応答時間は不安定で、1回の最大ブレがグラフ全体を縦に引き伸ばしてしまうことがあります。そのため私のグラフでは直近3回の中央値をとり、その中の最大値が見えるようにしています。
サンプルコード
max_over_time(
(
quantile_over_time(
0.5, probe_icmp_duration_seconds{phase="rtt", job=~"blackbox_exporter-icmp_v4"}[45s]
) * 1000
)[$__interval:]
) > 0
注:PromQLは本職ではないので割と雑です
IPv4 - v6プラス
黄線のrtx810.lanは実家のルータで、自宅からはNGNで折り返します。見ての通り、NGN網内は非常に安定しています。
一方でインターネット上のノードに対する応答時間はブレます。たまに↓のように明らかにネットワーク経路を切り替えているような様子も見えます。
www.google.com へのPing応答時間(赤線)が4msから6msの中でブレることが多いです。なぜだろうか…
IPv4 - PPPoE
v6プラスと比較して不安定なのがよくわかります。
(v6プラスは~10ms、PPPoEは~82msくらい)
余談ですが、デフォルトゲートウェイはv6プラスにしており、公開ファイルサーバ(NextCloud)からの通信のみPPPoEを通しています。PPPoEのPing監視も公開ファイルサーバで実行しています。
IPv6 - IPoE
インターネット上のノードに対する応答時間が規則的に変動しています(ギザギザになっています)。なぜだろうか…
Ping落ち
IPv4 - v6プラス
v6プラスは22時前後にPing落ちしやすいです。
IPv4 - PPPoE
PPPoEはPing落ちが少ないです。
IPv6 - IPoE
v6プラスと同様の傾向。
というよりIPoEの品質がそのままv6プラスに反映されているようです。
通信量
私のグラフでは1週間スケールでも最大値が見えるようにしています。
サンプルコード
max_over_time(
(
rate(
ifHCInOctets{instance="c2960x.lan", ifAdminStatus="1", ifType="6"}[30s]
) * 8
)[$__interval:]
)
注:PromQLは本職ではないので割と雑です
エラーフレーム、フラグメントなど
とりあえず載せるだけ。
NAS|OpenMediaVault
RAIDなどの踏み込んだ機能を使わないのであればOpenMediaVaultが軽量で扱いやすいと思います。
メインPC(Windows)にHDDを積んでファイル共有するという手段も検討しましたが、共有ファイルを削除したときのごみ箱機能が欲しかったこと、電源停止が多いメインPCと分けたほうがHDDが長持ちしそうなこと、が理由でNASとして分けることにしました。
小型でHDDを4台搭載できるPCケース・ベアボーンPCの中でしっくりくるものがFractal Design Node 304しかなく、わざわざ海外から取り寄せました。国内で再販してくださいお願いします。
一世代前のNASの話
少し前まで Shuttle SW580R8 を利用していました。小型筐体でありながら3.5インチHDDを4本収容可能、1Gbps NIC×2、2.5Gbps NIC×2を搭載しておりスペックは優れています。(価格コムのベアボーンの検索に出ないモデルなので知らない人が多そう)
ただファンの音が少しだけ気になりました。静かな環境で5m離れればほぼ気にならないが3m以内だと気になる、くらいの音です。PCケースファンをNoctuaに置き換えても変わらず、もう一方のシステムファンの4ピンを抜いても変わらず…おそらく電源内蔵のファンから音が出ていたのでしょう。ベアボーンの欠点が出た感じです。やはり自作PC・ATX電源しか勝たん
自宅システムの運用監視から見えたこと
Catalyst IOSのバグ?
Prometheusを確認していたとある昼下がりのこと。
fd01:e971:092a::1(青線)は自宅ルータのユニークローカルアドレス(ULA)です。ULAのPing応答時間がインターネット上のノードより長いという異常を発見しました。
拡大して見ると、3回に1回Ping応答時間が跳ね上がっています。
9/6になにか構成変更したっけ、と振り返ったところ、L3スイッチ(C2960X)をバージョンアップしたことを思い出しました。
自宅L3スイッチが被疑対象と判断して試しに再起動したところ、症状が悪化。(①)
これはまずいと思いバージョンダウンしたところ、Ping応答時間が正常になりました。(②)
不正な通信?(ではなかった)
Rsyslogを確認していた、とある昼下がりのこと。
草木も眠るウシミツ・アワーに自宅PCから存在しないプライベートIPにパケットが飛んでいることを発見。
2024-11-18 02:04:36 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:53894 > 192.168.10.2:57769
2024-11-18 02:04:36 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:53895 > 192.168.10.2:57769
2024-11-18 02:04:37 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:53894 > 192.168.10.2:57769
2024-11-18 02:04:37 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:53895 > 192.168.10.2:57769
2024-11-18 02:04:38 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:53894 > 192.168.10.2:57769
2024-11-18 02:04:38 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:53895 > 192.168.10.2:57769
2024-11-18 02:04:42 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:53894 > 192.168.10.2:57769
2024-11-18 02:04:43 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:53895 > 192.168.10.2:57769
2024-11-18 02:12:29 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:60581 > 192.168.40.253:52562
2024-11-18 02:12:29 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:60582 > 192.168.40.253:52562
2024-11-18 02:12:35 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:60581 > 192.168.40.253:52562
2024-11-18 02:12:39 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:60582 > 192.168.40.253:52562
2024-11-18 02:15:56 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:60359 > 192.168.1.163:54522
2024-11-18 02:15:56 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:60360 > 192.168.1.163:54522
2024-11-18 02:15:56 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:60359 > 192.168.1.163:54522
2024-11-18 02:15:59 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:60360 > 192.168.1.163:54522
2024-11-18 02:16:06 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:60359 > 192.168.1.163:54522
2024-11-18 02:16:10 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:60360 > 192.168.1.163:54522
2024-11-18 02:23:41 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:64076 > 192.168.1.3:62623
2024-11-18 02:23:42 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:64077 > 192.168.1.3:62623
2024-11-18 02:23:43 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:64076 > 192.168.1.3:62623
2024-11-18 02:23:47 172.16.63.1(rtx830.lan) user.notice rtx830.lan TUNNEL[2] Rejected at OUT(default) filter: UDP 172.16.0.11:64077 > 192.168.1.3:62623
この日に何かしたっけ、と振り返ったところ、ルビコン3で独立傭兵をしていたことを思い出しました。お前も強化人間にならないか?
試しにポートを確認しながら対戦したところ、対戦開始時にSteam.exeが該当パケットを投げているようでした。
So-net v6プラス通信障害(2024-05-18 5:30~10:13)
しっかりと記録されていました。
障害発生時間帯はデフォルトゲートウェイをPPPoEに切り替えることで対処しました。
自動で検知・切り替える方法はFuture workです。(ヤマハルータならLuaスクリプトを使えばできそうな気はします。)
ちょっとした愚痴
このとき、障害・メンテナンス情報の 原因 として以下の通り記載されていました。
東京一部のエリアにて上記コースを利用中のお客さまについて、該当の時間帯でインターネット通信が遅延する事象が発生しておりました。現在は支障なくご利用できる状態に復旧が完了しております
これは原因ではないだろう、と思い後日サポートへ問い合わせた結果、以下の通り原因不開示とのことでした。
お客様に開示していない箇所での障害であったため、原因についても開示はいたしかねます。
開示する意思がないなら初めから原因などと書かないでいただきたい。
MTU設定ミス
自宅ルータのフラグメントの数値が上がっていました。
9/7って何していたかなー、と確認したところ、姫路近くにある某製鉄所へ出張していました。
そのためフラグメントの理由はVPNであろうと推測できました。確認したところWindows標準のMTUは1400、一方自宅ルータのMTUは1258に設定していました。
WindowsのVPNインターフェースのMTUを1258へ変更したところフラグメントがなくなりました。
ネットワーク作業道具紹介
先日Twitterならぬ Xで作業道具を紹介している方 を見ました。
いとをかし、と思い私も参戦。大体一緒ですが…
左上から順に…
袋、電源タップ(三極口)、長めのUTPケーブル(白色)、シリアルケーブル(水色)、クロスケーブル(赤色)、JJ(黒)、化粧ビス・ケージナット、ケージナット着脱工具、電動ドライバ・ピット(+1~+3、-6)、ニッパー、マジックバンド・ケーブルタグ、クレトップ、養生テープ、ガムテープ
飛行機で出張する際にドライバ・ピットが手荷物の制約に引っ掛かるのが悩みどころです。スタビードライバでなんとかならんか…と思いますが、機器を支えながら急いでドライバを回すといったケースがあり電動は外せません。
ニッパーは手荷物の制約にはかかりませんが、検査場で長さ測定されます。
ところで、シリアルケーブルのチップセットってFTDIとかProlificとかありますが、どれがいいのでしょうか?(私は作業用PCのドライバに制限があるためProlificのシリアルケーブルを持ち歩いています。)
まとめ っぽいなにか
このままだとオチがないため、なんかいいこと言っておきます。
図に関連して
システムを図面として表現するとき、決まったフォーマットはありません。おそらく建築・工業製品と違う点ではないでしょうか。(AWSのようにパターン化されているものもありますが。)目的に応じて図面のフォーマットを自ら定義しゴリゴリ描く、というのはシステムエンジニアの魅力です。
特にネットワークは図面を扱うことが多いです。ネットワーク図、フロア図、ラック図、電源図など。もっといえば図だけでなく配線管理表やIPアドレス管理表などもあります。必要に応じて図と表を使い分けます。なるべく二重管理にならないように…
図面はアートではなくデザインであるため才能はいりません。理屈を身に着け経験を積めば自然と上達します。才能がなくても見栄えする表現ができる、という点はシステムエンジニアの魅力でしょう。
ファシリティ・道具に関連して
システムがクラウドに移行しようと、自分(自社)専用のシステムを囲う必要がある以上、囲みを実現する手段としてネットワークは残り続けます。だから私は一生安泰です(慢心)
またすべての端末がSIMを搭載してキャリア電波で通信する…というなネットワークにならない限り、ネットワークが物理的に必要です。そのためネットワークエンジニアはファシリティを扱い、扱うための作業道具を振り回すことになります。道具を揃えるのにコストはかかりますが、デッキ構築型ローグライクのような楽しさがあります。(逆に言えば現場で道具が足りずに詰む場合もあります)
システム運用に関連して
自宅システムの運用監視をチョット真面目にやるだけでも色々なことが見えてきます。運用監視のプロトコルがわからない、という方は自宅システムから始めてみるといいでしょう。
これが会社規模になると…いうまでもなく大変です。ですので運用保守費を削らないでください
編集後記
X(旧Twitter)のTLに新卒の自宅 / 業務環境紹介が流れてきました。
恐ろしい才能…!おそらくあたしがあの域に到達したのは20代の後半……