この記事は、Kumano dorm. Advent Calendar 2020 の18日目の記事です。
こんにちは。A2に住んでいる者です。
A2ネットを管理しているのですが、今年は色々改善したので、その話をします。
熊野寮のA2ブロックに所属する人が使用できるネットワーク(無線LAN及び有線LAN)です。 1人の管理者がプロパイダと1回線を契約し、A2ネットの利用者が管理者へ利用料を払うという形式を取っています。
談話室内での利用は無料としています1 が、居室・食堂・ロビー・事務室で利用するには利用料を徴収しており、現在の値段は1人あたり3,500円/年です。
4月、COVID-19の影響でほぼ全ての講義、ミーティング、研究会などがリモートになりました。 また、寮内の全ての新歓、全ての会議をオンライン化することになりました。 その関係で、希望者に対して各居室で利用できる無線LANを無料開放することが決定されました。
しかし、この頃のA2ネット(以下、「旧A2ネット」とします)は不可逆的なシステムでした。 旧A2ネットは談話室・食堂・ロビーには無線LANを供給していましたが、居室には有線LANを供給していました。 そのため、居室で無線LANを利用するためには利用者がアクセスポイントを各自で調達する必要がありました。
旧A2ネットで無線LANの無料開放をするということは即ち、旧A2ネットの管理外にある各居室のアクセスポイントのSSIDとパスワードを非加入者が知るということです2。 非加入者の頭を殴ってパスワードに関する記憶を飛ばせたら楽なのですが、そう簡単ではありません。 無料開放の終了後は管理外にあるアクセスポイントをどうにかしてA2ネット管理下に置き、非加入者が知らないパスワードに変更する必要がありました。
以下に旧A2ネットの構成図を示しておきます。黒い矢印は有線で接続しているという意味ですが、厳密な図ではありません。

6月、COVID-19が一旦落ち着きを見せた3 こともあり、無料開放が終了しました。
無料開放を受けて、やったことを以下に記します。
まずはこれです。
今まで各居室の人々が管理していたものをA2ネットが取り上げる権限は持っていないので、その機器自体ではなく、各居室のアクセスポイントのパスワードを変える権限をA2ネット管理者に付与するという形でA2ブロック構成員に合意を取りました。
また、居室内を含む全ての無線LANルーターをA2ネットで一元管理したほうが、今回のような緊急事態に対して柔軟に対応できると考えたため、今後アクセスポイントを居室に新しく導入する場合はA2ネットが購入し管理することにしました。
A2ネットはeo光で光回線を契約しているのですが、5/10Gbpsが利用可能になったタイミング4 ですぐに契約を1Gbpsから5Gbpsのプランに変更しました。 流石にA2ブロック構成員44人が同時に使用することは無いとはいえ、ビデオ会議等は帯域を大きく占領するので1Gbpsだと厳しいものがありました。
別に10Gbpsでも良かったんですが、新しく買う機器にいくら金を使うかが未知数だったのでケチりました。
先述したように旧A2ネットでは居室には有線LANのみしか提供していなかったため、そもそもアクセスポイントが無い部屋もありました。 そこで、アクセスポイントが無い部屋には新たに設置しました。
大本となる談話室の無線LANルーターは、IPv6対応・Wi-Fi6対応・10GbEポートを搭載したものに変えました。
食堂とロビーにもアクセスポイントを置いていたのですが、食堂・ロビー・事務室をカバーできるほどの強度を持っていなかったので、新しいものに変えました。 新しいアクセスポイントは食堂と事務室に配置したのですが、食堂から事務室までは有線で接続することが難しそうだった5 のでトライバンドメッシュWi-Fiを導入しました。
100Mbpsスイッチングハブを駆逐し(逆になぜ生きていたんだ)、
10GbEに対応したスイッチングハブを導入しました。
my new gear... とか言ってますが、僕のでは無いです。
my new gear... pic.twitter.com/q3HrhkyQTC
— へいほぅ (@h3y6e) July 2, 2020
配線後はこんな感じになりました6。

余っていたRaspberry Piで軽量DNS/DHCPサーバを作りました。
何故このようなことをしたのかというと、旧A2ネットでは無線LANルーター内蔵のDHCPサーバ機能を使っており、そのルーターでは最大16台までしかリースできないという仕様でした。 そのため、各クライアント側で他の端末と被らないようなIPアドレスを手動で固定してもらうという超原始的な方法を取っていました。 基本的には1回設定してしまえばそれで良いのですが、新しい端末を接続する度にその設定をするのは面倒だと感じたので、DHCPサーバを別で建てることにしたというわけです。
ソフトウェアには Dnsmasq を用いました。 この規模であればラズパイとDnsmasqを用いれば簡単に構築できるので良いですね。
dnsmasq.conf の conf-file=/etc/dnsmasq.more.conf の行のコメントを外し、dnsmasq.more.conf に以下を記述しました。
#######
# DNS #
#######
domain-needed
bogus-priv
local = /a2net/
domain = a2net
no-hosts
addn-hosts = /etc/hosts_dnsmasq
########
# DHCP #
########
expand-hosts
dhcp-range = 192.168.0.2, 192.168.0.199, 12h
dhcp-option = option:netmask, 255.255.255.0
dhcp-option = option:router, 192.168.0.1
dhcp-option = option:dns-server, 192.168.0.200, 192.168.0.1, 8.8.8.8
dhcp-option = option:ntp-server, 192.168.0.1
# static leases (Access Point)
# ここでアクセスポイントのIPアドレスを固定する
dhcp-host = xx:xx:xx:xx:xx:xx, xxx, 192.168.0.xxx
#######
# log #
#######
#log-dhcp
log-facility = /var/log/dnsmasq.log
アクセスポイント等はIPアドレスを固定し、それ以外のクライアントは198台まで自動でIPアドレスを割り当てられるようにしました。 12時間以内に198台以上接続されることは無かったので、今のところこれで問題はないです。
このサーバにはMackerelを導入して死活監視し、LINE Notifyで通知が来るようにしています。やりたいだけです。

おまけ。
利用者のためのマニュアル、confファイル、各種ドキュメント等はGitHub Organizationを用いて管理しています。
そしてGitHub Actionsを用いて rclone でGoogle DriveにアップロードするようなWorkflowを書いています。
マニュアルはGoogle Driveの共有機能を使って利用者に共有しているのですが、その更新は git push するだけでいいので便利です。
また、万が一引き継ぎ時にGitHubはどうしても使いたくないと言われた場合でも、スムーズに引き継ぎが行えますね。
name: Upload to Google Drive
on:
push:
branches: [ master ]
jobs:
upload:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
- name: setup rclone
env:
RCLONE_CONF: ${{ secrets.RCLONE_CONF }}
run: |
curl https://rclone.org/install.sh | sudo bash
mkdir -p /home/runner/.config/rclone
echo "$RCLONE_CONF" > /home/runner/.config/rclone/rclone.conf
- name: upload to Google Drive
run: rclone copy --exclude '.*{/**,}' ./ gdrive:$GITHUB_REPOSITORY
以下に新A2ネットの構成図を示しておきます。厳密な図ではありません。

例えば談話室では、時間帯によって異なりますが、上り下り共に実測値で200〜700Mbpsの速度が出ます。オンラインゲームをするには十分過ぎる速度だと思います7 。
居室では20〜600Mbpsくらい出ることを確認しています。振れ幅が大きいのは居室内のネットワーク機器の性能差によるものです。多分僕の知らないところに100Mbpsハブがあるんだと思います。 僕の部屋は大体300Mbpsくらい出ますし、寮の会議中でも150Mbpsは出ています。
管理者の意思で全てのアクセスポイントのパスワードを変えることが可能となったので、例えば毎年4月は無料でA2ネットを体験してもらい、5月以降も続けて使いたい人はA2ネットに加入してもらうみたいなこと8 も可能です。夢が広がりますね。
対象がなんであれシステムの改善は楽しいですね。 もっと弄りたいとは思っていますが、やればやるほど引き継ぎが難しくなるので我慢しています(アクセスポイントのパスワードを変える際、全ての管理画面に入って1個ずつ変更するという作業はかなり面倒なので、これを簡単にするくらいはやりたいなぁと思っています)。
さて、僕は今年度でここを出るので跡継ぎが必要です。 ちゃんとドキュメントは残していますし、引き継ぎはちゃんとします。 僕が退寮した後であっても分からないことがあれば何でも言ってくれて構わないので誰かやってください。お願いします。
最強のネットワーク環境が欲しい未来の京大生、小中規模のネットワークを自由に構築したい京大生、熊野寮A2ブロックに来て、A2ネットを改善しませんか?