テザリングでダウンロード容量制限をするプロキシ

ふと Nexus 4 をいろいろと触っていたところ、「データ使用」のサブメニューに「モバイルアクセスポイント」という項目を発見しました。最初はテザリングをする項目かなと思ったらどうやら違うようで「このWiFiアクセスポイントはテザリング経由」という設定ができるようです。

Android端末は設定によりますがWiFiに接続していると勝手にアプリをアップデートしてくれますが、大きいファイルをダウンロードすることになるとすぐ通信量があがってしまいます。日本の通信事業者各社は月間7GBの通信量制限をしているわけですが、この設定を行うことでその通信量を抑えることができます。

で、本題ですがMac OSXに同様のことをしてくれる機能があるとありがたいのですが、残念ながら無いようです。OSXもバージョンが上がり大変便利になりましたが、AppStore経由でソフトウェアアップデートで勝手にアプリやOSのアップデートをダウンロードしてくれます。が、テザリングしていてもダウンロードしてくれるので7GBなんてあっという間です。

そこで、ダウンロードされるファイルサイズを制限するプロキシを考えました。最初はRubyでWEBRickを使ったプロキシを考えましたが、プロキシのソフトウェアに設定を仕込むのがお手軽かと思い、今回はSquidを使うことにしました。

SquidをMacにインストールするにはHomebrewを使う方法などありますが、今回は簡単にインストールできるSquidManを使うことにしました。

インストールを行い、設定に以下を追記します。

# 端末から払い出されるIPアドレス帯を指定します
# 以下は iPhone 5 における例
acl tethered src 172.20.10.0/24
# ファイルサイズを10MBに制限
reply_body_max_size 10 MB tethered

本当はグローバルIPアドレスやDNS名を指定したいのですがその指定は簡単にはできなさそうなので、端末から払い出されるIPアドレスを判別し簡易的に識別することにします。同じIPアドレス帯を他で使っている場合にはちょっと難しいですね。。

設定ファイルを修正し起動したらプロキシ設定をOSXの設定から行います。一つ注意が必要で、「Webプロキシサーバー」に127.0.0.1やlocalhostなどを指定すると、Squidからは接続元のIPアドレスがローカルホストになってしまうため判別できませんので、「コンピュータ名.local」を指定します。「保護されたWebプロキシ」にも同じ設定をしましょう。

これで実際にテザリングして大きなファイルをダウンロードしようとしたときにSquidのエラー画面が表示されれば問題ないですね。

Have a nice NOMADO life.