注意!この方法は現在、大学のシステム変更に伴い、使用できません。(HTTPS透過が不可能になった)
新しい方法を開発し、公開できるように準備を進めていますので、研究中の方などはご連絡ください。
(新しい方法は、全ての通信が可能となり、次の対策も練り込まれた最新式の方法です。)
ご無沙汰しております。
最近は研究、金稼ぎ、勉強、遊びのループで、どうも更新が途絶えてしまっていました。。
それでも一応、記事のネタになる研究もたくさんあるので、時間が出来次第、放流していく予定ですが…
さて、私の大学に限らず、会社や大規模施設、学校内のネットワークといえば、
・ログインが必要、Proxyが必要
・Proxyを解除しないと、ログインができない(Connection Loopが起きる)
・さらにProxyに対応していない研究用機材、ロボット、IoT機器、測定機器をWi-Fiに接続する場合、
ネットワークの外には出れず、研究続行が困難
といった問題が、今まではありました。
これはパソコンやスマホなどを接続する場合は、ちょっと手間なだけで良いかもしれません。
まあ、ほとんどのWi-Fiが整備された大学なら、WPA2 Enterpriseによる自動ログイン、透過プロキシが大学側で実装されており、
こんな話を聞いて、「いつの時代の話だ?」と思ったかもしれません。
私が通う大学は、ほぼ全てのネットワークが未だにこんな感じです。
しかし、一部のネットワーク(ここではSと表記)のみ、向上心の強い先生が透過Proxy、自動ログイン対応のNWを構築していたりするのですが、
それも利用できるエリアや、設備は非常に限られています。
そして、そのネットワークの欠点として、学内内部のNWに接続できないという欠点がありました。
(履修登録システムや、先述のログインページ、レポート提出用のシステムに接続できない)
図に書いてみると、殆どのネットワークがこんな感じになっているからです。(予想ですが)
本当はAccessDefenderはスイッチで、他にもRADIUSサーバーがあったり…という構成ですが、そこは簡単に書いただけなので。
PCからなら、プロキシ除外設定をすれば良いですが、iOSや一部OSでは出来ないので、
全ての通信がプロキシを流れ、ループが発生します。
そこで今回、私が実現したのは至って簡単で「一から開発した」という訳ではありませんが、
入学時から学内のNWを隅々まで解析し、何十ものソフトウェアを検証、実験し、
・接続時のログインが不要(ログインが必要な場合も、プロキシ操作は不要で一貫して接続できる)
・プロキシを利用した場合も、学内NWに接続できる(=履修登録や、ログイン、レポート提出システムに接続できる)
・学内に設置が難しい専用サーバーや拠点を必要とせず、家庭用ルーター1台で実現
することに成功しました。
先ほど、パソコンやスマホなどで接続するなら、良いかもしれませんと書きましたが、
ほとんどの研究用機材(独自OSなるもの)や、ロボットや測定機器は、Proxyやログインは当然出来ませんし、
ロボット(LEGO Mindstorm EV3)に関してはWEPに対応していない(鍵なし or WPA2)という仕様で、困難を極めていました。
(なぜか、学内NWのSでは、WEPしか対応しておらず接続不能)
(まぁロボットに関してはNW外に出すことは無いと思うので、メリットは少ないですが。)
そしてPCやスマホを接続する場合も、楽なんですよね。
プロキシ設定いらず。ログインいらず。VMwareやVirtualPC使ってあれこれする時も あれれーなんてエラーも少ない。
ではでは、前置きが長くなりましたが、方法と使っている物について説明します。
方法について
とりあえず必要なものはこんな感じです。Linux系の知識と、基本的なNWの知識は前提で進みます。
・OpenWRTが焼けるルーター
→私はBuffalo WHR-G301N、WMR-300、WHR-HP-G300N、WZR-HP-AG300Hで検証しました。
WXR-1900DHPも出来るようですが、
ファームウェアが暗号化されている問題から、無線出力が出来なくなったりする不具合があります。
WMR-300に焼いておくことで、Wi-Fiがない教室でもLAN端子に差し込み、
近くに電源がなくてもUSBで電源が取れますので、モバイルバッテリーに繋いで…ということも可能です。
2.4GHzのみ対応ですが、2×2アンテナで300Mbps対応なので、オススメの1台です。
(LANポートが1つぐらいあれば完璧だったのですがね…)
・USB-TTLアダプタ
こちらとTeraTermというソフトを用いて、ルーター内部のソフトウェアを書き換えます。
ざっとやり方を説明すると
OpenWRTを焼く時の方法などは、先人の方が沢山分かりやすく書いて下さっているので割愛します。
ただ、WindowsではなくLinuxから焼いた方が失敗が少ない…とか、タイミングがどうとかありますが、
正直あまり関係ないです。
Windowsから行う場合は、ファイアウォールやセキュリティソフトを停止。あとはnetshでset neighbors 00-aa-bb-cc-dd-eeに出来ていればOKです。
実はこの00-aa-bb-ccというMACアドレスですが、書き換える端末のMACに書き換えてもOKですが、
特殊なTFTP転送時のMACアドレスで、そのままいれても機能します。
TFTP転送なら、手慣れた人ならTTLモジュールは必要ありませんね。
WMR-300の場合は、TeraTermから焼き込み操作出来ますので、あった方が良いかもしれません。
あとは、tftp用の.binファイルを使う必要があるということですね。
出来上がれば、sshを使ってこれをインストール。
https://openwrt.org/docs/guide-user/services/proxy/tinyproxy
ファイアウォールの設定も表記のまま設定してください。プロキシは後ほど設定します。
本題のプロキシですが、GUIから設定に入り、Upstream proxyを使います。
はvia proxyで、2つ下のフォームにIPアドレス形式でhttp://123.456.789.012:8080 という形で表記。
は空白でOK。
後はもうFiltering and ACLs行き、127.0.0.1の1つ下に自分のIPを入力する。
Listen address や Bind addressは入力しなくてOK
これで通信できなければ、DHCP and DNSの Local service onlyのチェックを外す。
後は、Upstream proxyでReject accessにプロキシを通したくないアドレスを入力。
IPアドレス or teikokutyo.com などの形式で入力。こちらもTarget hostは空白。
以上で透過プロキシとして使用できます。とりあえず。
httpsもプロキシが必要な場合はややこしいです。幸い私の通う大学では必要なかったため、現在研究中。
課題点
・遅い (ルーターのCPU、メモリ性能に依存する。)
→本来90Mbps出る回線が、50〜60Mbpsや、30Mbps台にまで落ち込むことも。pingも10→60まで上がったりする
・都度IPアドレスを許可リストに追加する必要がある
→予めDHCPの範囲を登録しておくという方法もあるが、非常に不便
・なぜかspeedtest.netでLATENCY TEST ERRORが出る。Googleのスピードテストもできない。
→スマホアプリだと出ない。ファイアウォール周りの見直しだろうか。プロキシ経由のPCでは出ないため、原因探索中。
もしかすると他のアプリでも通信エラーが出る可能性もあるため、原因を探っている。
さいごに
これを使って、例えば小中学校、高校みたいに通信がフィルタリングされているなら、
それを突破することも実現可能である。ただそれは研究してください。
私も、この方法を見つけるまで昨年の夏から研究していました。
もちろん、実行に伴う損害に関して当サイトおよび筆者はいかなる責任も負わないので、自己責任で行ってください。
(知識なく行うと最悪ネットワークが全て破損します。筆者の通う大学の超詳しい先輩ですら、一度事故って学内NWの一部を停止させてしまったことがあるようです。)
正直レベルの低い卒論が多いので、もう、卒論終わったも同然だなぁ。
名前やサイトは未記入で書けます。「非公開希望」と書いてコメントすると、筆者にのみ伝えることが可能で、掲載されません。