A2ネットを改善しよう

2020-12-18
#kmnac #adventcalendar
  1. A2ネットとは
  2. 春、何があったのか
  3. やったこと
    1. 各居室で管理されていたアクセスポイントをA2ネットが部分的に管理できるようにした
    2. プランを変更した
    3. 機器を新しくした
    4. DHCPサーバを構築した
    5. ドキュメント等をGitHub + Google Driveで管理するようにした
  4. 結果
  5. 結論と宣伝

この記事は、Kumano dorm. Advent Calendar 2020の18日目の記事です。

こんにちは。A2に住んでいる者です。
A2ネットを管理しているのですが、今年は色々改善したので、その話をします。

A2ネットとは

熊野寮のA2ブロックに所属する人が使用できるネットワーク(無線LAN及び有線LAN)です。 1人の管理者がプロパイダと1回線を契約し、A2ネットの利用者が管理者へ利用料を払うという形式を取っています。

談話室内での利用は無料としています[1] が、居室・食堂・ロビー・事務室で利用するには利用料を徴収しており、現在の値段は1人あたり3,500円/年です。

[1] これは談話室に人が集まり、ブロックの団結を強固なものにすることを願っているためです。
今年は談話室にあまり集まれませんでしたが……

春、何があったのか

4月、COVID-19の影響でほぼ全ての講義、ミーティング、研究会などがリモートになりました。 また、寮内の全ての新歓、全ての会議をオンライン化することになりました。 その関係で、希望者に対して各居室で利用できる無線LANを無料開放することが決定されました。

しかし、この頃のA2ネット(以下、「旧A2ネット」とします)は不可逆的なシステムでした。 旧A2ネットは談話室・食堂・ロビーには無線LANを供給していましたが、居室には有線LANを供給していました。 そのため、居室で無線LANを利用するためには利用者がアクセスポイントを各自で調達する必要がありました。

旧A2ネットで無線LANの無料開放を行うということは即ち、旧A2ネットの管理外にある各居室のアクセスポイントのSSIDとパスワードを非加入者が知るということです[2]。 非加入者の頭を殴ってパスワードに関する記憶を飛ばせたら楽なのですが、現実はそう簡単ではありません。 無料開放終了後は管理外にあるアクセスポイントをどうにかしてA2ネット管理下に置き、非加入者が知らないパスワードに変更する必要がありました。

以下に旧A2ネットの構成図を示しておきます。黒い矢印は有線で接続しているという意味ですが、厳密な図ではありません。

旧A2ネット構成図。

6月、COVID-19が一旦落ち着きを見せた[3] こともあり、無料開放が終了しました。

[2] そもそもアクセスポイントの裏などにはSSIDとパスワードが書いてあるものが多いですし、普通の人はそれを変更せずにそのまま使うので、簡単にフリーライド出来る状態でした。
なんでこんな性善説の体現みたいな制度にしているんだと思う方もいると思いますので、このシステムの良いところを説明しておきます。まず、アクセスポイントの費用を各居室の人々が負担するので、A2ネット利用料に関しては加入者が少なくても低価格で提供できます。また、居室のアクセスポイントで何らかのトラブルが起きたとしても基本的には加入者が自分で解決する必要があるので、管理者の手間が減るという点もあります。
[3] まあ、その後また感染者数が増加し始めたんですけどもね。

やったこと

無料開放を受けて、やったことを以下に記します。

各居室で管理されていたアクセスポイントをA2ネットが部分的に管理できるようにした

まずはこれです。

今まで各居室の人々が管理していたものをA2ネットが取り上げる権限は持っていないので、その機器自体ではなく、各居室のアクセスポイントのパスワードを変える権限をA2ネット管理者に付与するという形でA2ブロック構成員に合意を取りました。

また、居室内を含む全ての無線LANルーターをA2ネットで一元管理したほうが、今回のような緊急事態に対して柔軟に対応出来ると考えたため、今後アクセスポイントを居室に新しく導入する場合はA2ネットが購入し管理することにしました。

プランを変更した

A2ネットはeo光で光回線を契約しているのですが、5/10Gbpsが利用可能になったタイミング[4] ですぐに契約を1Gbpsから5Gbpsのプランに変更しました。 流石にA2ブロック構成員44人が同時に使用することは無いとはいえ、ビデオ会議等は帯域を大きく占領するので1Gbpsだと厳しいものがありました。

別に10Gbpsでも良かったんですが、新しく買う機器にいくら金を使うかが未知数だったのでケチりました。

機器を新しくした

無線LANルーター

先述したように旧A2ネットでは居室には有線LANのみしか提供していなかったため、そもそもアクセスポイントが無い部屋もありました。 そこで、アクセスポイントが無い部屋には新たに設置しました。

大本となる談話室の無線LANルーターは、IPv6対応・Wi-Fi6対応・10GbEポートを搭載したものに変えました。

食堂とロビーにもアクセスポイントを置いていたのですが、食堂・ロビー・事務室をカバー出来るほどの強度を持っていなかったので、新しいものに変えました。 新しいアクセスポイントは食堂と事務室に配置したのですが、食堂から事務室までは有線による接続を行うことが難しそうだった[5] のでトライバンドメッシュWi-Fiを導入しました。

スイッチングハブ

100Mbpsスイッチングハブを駆逐し(逆になぜ生きていたんだ)、 10GbEに対応したスイッチングハブを導入しました。
my new gear...とか言ってますが、僕のでは無いです。

my new gear... pic.twitter.com/q3HrhkyQTC

— へいほぅ (@5ebec) July 2, 2020

配線後はこんな感じになりました[6]

スイッチングハブ等が置いてあるラック。

DHCPサーバを構築した

余っていた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で通知が来るようにしています。やりたいだけです。

DHCPサーバ

ドキュメント等をGitHub + Google Driveで管理するようにした

おまけ。
利用者のためのマニュアル、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

[4] COVID-19の影響で結構待たされた記憶があります。
[5] LANケーブルは天井に這わせることしか考えていなかったので有線接続出来ないと思っていたのですが、最近、事務室の扉の下の隙間からケーブルを通している人がいて、なるほどなぁと思いました(小並感)。
[6] ちなみにここの電源は居室からではなく、廊下のコンセントから取っています。これは居室のブレーカーが落ちると全居室のネットが切断されるためです。クーラーを使用している中で電子レンジと湯沸かし器を同時に使うと簡単に落とせます。僕が2回くらいやらかしました。

結果

以下に新A2ネットの構成図を示しておきます。厳密な図ではありません。

新A2ネット構成図。

例えば談話室では、時間帯によって異なりますが、上り下り共に実測値で200〜700Mbpsの速度が出ます。オンラインゲームをするには十分過ぎる速度だと思います[7]

居室では20〜600Mbpsくらい出ることを確認しています。振れ幅が大きいのは居室内のネットワーク機器の性能差によるものです。多分僕の知らないところに100Mbpsハブがあるんだと思います。 僕の部屋は大体300Mbpsくらい出ますし、寮の会議中でも150Mbpsは出ています。

管理者の意思で全てのアクセスポイントのパスワードを変えることが可能となったので、例えば毎年4月は無料でA2ネットを体験してもらい、5月以降も続けて使いたい人はA2ネットに加入してもらうみたいなこと[8] も可能です。夢が広がりますね。

[7] 一般に、インターネット回線でストレスなく通信出来る速度は10〜30Mbps程度と言われています。また、オンラインゲームなど大容量通信を行う環境では100Mbps以上の回線速度が理想的です。
[8] 「一ヶ月無料体験」はサブスクリプションサービスでよく利用される手口ですね。保有効果と言います。勿論、サービスがゴミだと思われては解約されるので、ある程度の質は必要です。

結論と宣伝

対象がなんであれシステムの改善は楽しいですね。もっと弄りたいとは思っていますが、やればやるほど引き継ぎが難しくなるので我慢しています(アクセスポイントのパスワードを変える際、全ての管理画面に入って1個ずつ変更するという作業はかなり面倒なので、これを簡単にするくらいはやりたいなぁと思っています)。

さて、僕は今年度でここを出るので跡継ぎが必要です。 ちゃんとドキュメントは残していますし、引き継ぎはちゃんとします。 僕が退寮した後であっても分からないことがあれば何でも言ってくれて構わないので誰かやってください。お願いします。

最強のネットワーク環境が欲しい未来の京大生、小中規模のネットワークを自由に構築したい京大生、熊野寮A2ブロックに来て、A2ネットを改善しませんか?