はじめに
OpenWRTルーターを使って学校のネットワークに接続しようとした奮闘の記録だよ。結果はまあ、なんとも言えないけど、この過程で色々勉強になったな。
スタート
ブラウザで openwrt通过深澜认证 って検索して、恩山無線フォーラム
の投稿で紹介されていたオープンソースプロジェクトを見つけたんだ。coffeehat/BIT-srun-login-script
っていうプロジェクト。それを見て、複数のプラットフォーム(OpenWRTも含む)に対応したGo言語版があるって知って、早速いじってみることにしたんだ。
プロジェクト作者の記事はこちら:深澜校园网登录的分析与python实现-北京理工大学版
奮闘前
OpenWRTのバージョンでコンパイル済みのバージョン、つまりIPKファイルが提供されてなかったんだ。それに、僕のスキルじゃREADMEが読めなくて、友達に聞いてみたらLinuxのコマンドだってことだった。でも、実際にやってみたら、それはLinuxカーネルをコンパイルするコマンドだってことがわかって、物理マシンでやるのは諦めて仮想マシンでやることにしたんだ。
参考:Building a custom kernel/zh-cn - Fedora Project Wiki
奮闘開始
友達にこれもらったんだけど、configuration - How to fix make error “No rule to make target ‘menuconfig’” when building a kernel for Beagleboard? - Unix & Linux Stack Exchange っていう記事。これを参考に試してみたんだ。
仮想マシンの作成
僕が使ってるFedoraには、仮想マシンソフト 盒子 が標準で入ってる。まずはCentOS 8をインストールしようとしたんだ。イメージファイルが外付けHDDに入ってたから、直接マウントして選択。そしたら、作成失敗ってエラーが出た。次にCentOS 7を試したけど、失敗。Ubuntuも失敗。
次々と失敗して、前にこのソフトでWin10をインストールできたから、ソフト自体がおかしいんじゃないかって疑っちゃったよ。エラーログを開いてみたけど、やっぱり意味不明。でも、パスに日本語が含まれてることに気づいたから、パスを英語に変えてもう一度試してみた。失敗。
で、次の日、カーネルを編集するんだから、Kaliを使ってみようかなって思ったんだ。USBメモリに入ってたKaliのイメージをPCにコピーして、最終的にインストールは失敗したけど、実行はできたんだ。もしかして、システムをローカルに置かないとダメなのかな?
だから、CentOS 7のイメージを ~/Documents/ にコピーして、インストール成功。IPKをコンパイルするだけだから、rootユーザーで十分だと思ったんだ。
ネットワーク接続
LinuxでLinux仮想マシンを作ったら、ネットワークは直接共有できると思ってたんだ。だから、直接 wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.19.6.tar.xz ってコマンドを入力した。そしたら、IPアドレスが見つからないって結果に。ifconfigコマンドを使ってもIPがない。
参考記事在虚拟机中设置静态IP (centos为例)
を参考に仮想マシンをネットワークに接続したんだ。でも、最後にファイルを編集する時は、ONBOOT の値を yes に変えて、DNSを2つ追加すればOKだった。
gitのインストール
ネットに繋がったら、まずgitをインストールしたんだ。yum install git で簡単にできた。それから、名前とメールアドレスを設定した。
| |
| |
ファイル転送
引き続き wget でLinuxカーネルをダウンロード。3〜4回試したけど、ほとんど50%くらいでダウンロード失敗するし、速度も遅かった。
注:
wget -c URLを使うと、中断したところから再開できるよ。
次に、盒子 というソフトが直接ドラッグ&ドロップでファイルを転送できるみたいだったから、PCでダウンロードしたファイルをそのままドラッグしてみた。失敗。ファイルは転送されなかった。転送後のファイルが ~/Downloads/ にあることを考えて、rootユーザーを使ってるから、Linux 添加用户和管理员用户
を参考にしてユーザーを作成したんだ。(最後にユーザーを削除する手順まで実行しそうになったよ)
su username コマンドでユーザーを切り替えて、~/Downloads/ フォルダを作成。もう一度ドラッグしてみたけど、また失敗。
盒子 の共有機能でPCの ~/Public を共有しようとしたんだけど、どう操作しても仮想マシンで見えなかった。(このソフトはRHELとFedoraにしか対応してないのかな?)
SSH転送
それで、SSHで転送することを思いついたんだ。(ftpコマンドを入力したら、入ってなかったから、インストールするのが面倒くさくて)
ローカルでSSH接続を有効にして、scp コマンドでSSHを使ってファイルを転送した。
| |
まず、IPアドレスを確認。仮想マシンで ip route コマンドを入力すると、IPは10.0.2.2だとわかった。
それから scp コマンドで転送。
ファイル解凍
tar コマンドでファイルを解凍した。
| |
あれ、gzipで圧縮されてないファイルだ。これ、どうやって解凍すればいいかわからないな。
SSH転送
やっぱりSSHで転送しよう。scp コマンドに -r を追加すればフォルダも転送できるはず。
試行錯誤
手順通りに、解凍したファイルを /usr/src/ に置いて、/boot のconfigファイルを /usr/src/linux-5.19.6/.config に置いた。でも、.config/ の下に置いても、.config の下に置いても、make menuconfig コマンドが実行できなかった。
まとめ
奮闘は失敗。また今度挑戦しよう。
でも、この記事を書きながら、元の投稿でOpenWRTで直接Pythonを実行しようとしてたことに気づいたんだ。時間があったら試してみようかな。
再挑戦
それから、認証を突破したことがある友達(普通のルーターだけど)に相談してみたんだ。彼はルーターのMACアドレスを自分のPCのものに変えたらしい。そしたら、LANケーブルを繋いだら認証ページが自動的にPCに転送されて、認証後につながるようになったんだ。でも、锐捷(Ruijie)のウェブ認証だった。
深澜(Senao)はPortal認証、つまりWebページ認証を使ってるってことは、WebだからHTTPを使ってるはずだよね。HTTPヘッダーを編集すれば認証を突破できるのかな?LinuxにはHTTPヘッダーを送信できるコマンドってあるんだろうか?調べてみたら、curl と wget コマンドで get や post リクエストをシミュレートできるってわかった。(それでFiddlerを開いてパケットキャプチャを始めて、認証プロセスを再現しようとしたんだ)
嘘だよ。ルーターを学校のネットワークに繋いで、PCをルーターに繋いで、認証ページのIPを入力したら、認証完了。ルーターにつながったよ。
LinuxコマンドでHttpのgetやpostリクエストをシミュレートする
使わなかったけど、せっかく見つけたから記録しておくね。
- GET リクエスト
- curl
| |
- wget
| |
- POST リクエスト
- curl
| |
- wget
| |
再度まとめ
時々、物事を複雑に考えすぎちゃいけないんだね。単純なことなのに、考えただけで実行せずに可能性を否定してしまうのは間違いだった。今回は、僕が最初に最後の再挑戦の部分を否定してしまったから、こんなに手間取ってしまったんだ。(もしデータ通信量が制限されてなかったら、こんなに試さないよ)
この記事を書きながら、二つの名言を思い出したよ。
学而不思則罔、思而不学則殆(学んで思わざれば則ち罔し、思いて学ばざれば則ち殆うし)
实践得真知(実践こそ真知)
だから、時々はいろいろ考えすぎずに、大胆に挑戦するべきなんだ。考えすぎることが自分の可能性を狭めてしまうこともあるからね!
参考記事
求助深澜校园网 Portal 认证应该怎么刷固件?-小米无线路由器以及小米无线相关的设备-恩山无线论坛
在虚拟机中设置静态IP (centos为例) - yexca’Blog
linux 系统下如何进行用户之间的切换_M李丽的博客-CSDN博客_linux切换系统
Linux 命令发送 Http 的 get 或 post 请求 (curl 和 wget 两种方法)_cyl937的博客-CSDN博客