macOSとAndroidでUSBテザリング
これまで仕事をしてきて、様々な施設に訪問する事があるのですが、必ずしも自社のWiFiが飛んでいるとは限らないケースがあります。また、一方で、スマフォ側はきちんと4GLTEで外につながってるのに、WiFiテザリングだとPCからうまく接続できない。
本来ならば、WiFiテザリングで繋げられれば良いのですが、昨今の電波状況だとうまくテザリングが出来ないことも多いです。そこで使う手法がUSBテザリング。ケーブルでAndroid⇔macOSを接続して、Android経由で通信を確立する方法です。
目次
この手段を使うケース
USBテザリングを使うケースは主に以下の数パターンあるかと思います。
- スマフォは4Gで通信出来ているが、WiFiテザリングだと周りのチャンネル数が多すぎて干渉し、不安定なケース(電波の周波数帯が4GとWiFiでは異なるのです)
- 会社用のスマフォはWiFiに参加できるが、自分のPCは直接参加できないケース(Android機をWiFiにつなげて、バイパスする手法)。また、会社用スマフォだと部屋の中では、WiFiにはつながるが、4G通信できないケース
- 一部のテザリング契約をしていないスマフォでテザリングではなく、USBテザリングだと通信できるケース。
- プレゼンなどが迫っていて、ピンチになっていてじっくりとテザリング検証できない時。
- スマフォのバッテリーが少ない状態で、充電ができない環境の時(PC側から充電出来、またWiFiテザリングじゃないので、消費電力を抑えられる)
- 一部の企業向けiPhoneでは、管理者側から制限でUSBテザリングが出来ないケースがある。
主に1.のケースだと思います。また、この手法を使うと、WiFiテザリングではないので、基本ケーブルで接続した1台だけがネット回線に繋がります(APになるわけではないため)。
※忘れがちなのですが、スマフォでWiFiに接続している時は、テザリングができません。USBテザリングは可能です。
事前準備
ドライバのインストール
macOS⇔iPhoneの場合は、ケーブルをつなげればUSBテザリングがそのまま可能です。が、Androidの場合にはドライバーを事前にインストールしておく必要があります。この時利用するドライバがHoRNDISです。現在最新版は、9.2がリリースされています。
インストールするだけで良いです。
図:Androidはドライバが必要になる
Android側の接続設定
ドライバのインストールが完了したら、ケーブルでAndroid⇔macOSを接続します。この時、Android機側では、USBテザリングをONにする必要性があります。Zenfone4では以下の手順でONに出来ます。
- 設定アプリを開く
- 無線とネットワークを開く
- テザリングとポータブルアクセスを開く
- USBテザリングをONにする。
図:このスイッチをオンにする
ONにするとどうなるか?
通信の確立
スイッチをオンにすると、ステータス(左上)にUSBテザリング接続のアイコンが出現します。この時、スマフォ側で通信ができていれば、ケーブルで接続したmacOS側でWiFiやLANが無効の状態であっても、ケーブル経由で安定したネット接続を構築する事が可能です。
また、この時、環境設定のネットワークを確認すると、USBテザリングがきちんと出来ている事が確認できます。また、スマフォ側でWiFiに接続出来ている場合、4Gではなくスマフォを介したWiFi接続になるので、パケットはもちろん消費しません。非常にニッチな手段ですが、この手法であれば、いざという時に、通信経路を確保する事が可能になるかもしれません。
図:Androidに接続済みを示す表示
※ちなみに、直近だと、iPhone自体はネットに繋がるのに、テザリングおよびUSBテザリングにすると繋がらない。自分のスマフォからはiPhoneのテザリングにつながる。ということで、自分のPC⇔自分のスマフォ⇔会社のiPhoneという接続で安定したネット接続を実現したなんてケースがありました(自分のスマフォでやってしまうと、自分のスマフォのパケットが無くなってしまいますからね)。
実際に通信速度を計測
自分のスマフォはIIJですが、使いたくないので、会社スマフォに接続させた上で、自分のスマフォとUSBテザリング。決して早くはないが、ぶちぶち切れて不安定であったネットワーク環境が安定して接続できるようになった。
M1 Macで使う方法
ARMなCPUを搭載してるM1 MacではHoRNDISのkextが動かず、そのままではAndroidのUSBテザリングが利用出来ません。これは、M1 Macからさらにkextのセキュリティ(レガシーシステム機能拡張)の動作に制限が入ってしまい、この仕組を利用していたシステムが動かなくなってしまった為です。
しかし、このセキュリティを以前のmacOSのレベルまで戻す事ができれば動作するようになります。以下の手順で検証してみた所、M1 MacでもHoRNDISが動作しました。こちらのサイトに掲載されてる内容です。
- まずは普通にHoRNDISをインストールする
- 一旦シャットダウンして、電源長押で再起動する
- オプションを選択して続行します
- アカウントにログインする
- メニューからユーティリティ⇒起動セキュリティユーティリティを開く
- セキュリティポリシーを開く
- オプションより「セキュリティの低下」をチェックし、他の2つのオプションにもチェックを入れます
- 起動セキュリティユーティリティを終了します
- メニューからユーティリティ⇒ターミナルを開きます。
- 以下のコマンドを入力して実行。途中の問に対しては「Y」と入力してEnter
1csrutil enable --without kext - System Integrity Prtection is onとメッセージが出たら、macOSを再起動します
- こちらのサイトに添付されてるHoRNDIS.kext.zipをダウンロードします。
- 解凍すると1個ファイルが入っているのでDesktopに配置します
- ターミナルを起動して13のファイルを移動させます
1sudo cp -R /Users/ユーザ名/Desktop/HoRNDIS.kext /Library/Extensions - パスワードを入力してコピーが完了するとセキュリティプライバシーのダイアログが出る
- システム環境設定⇒セキュリティとプライバシー⇒一般を開く
- 鍵を解除して、ダウンロードしたアプリケーションの実行許可の下にメッセージが出ているので許可をクリックしてあげる
- 再起動する
- 再起動完了後、WiFiをオフにしてUSBケーブルAndroidと接続する
- Android側でUSBテザリングをオンにする(USBデバッグもMTP⇒USBテザリングにしておくのを忘れずに)
- ネットワークを開くと自身のスマフォが項目で出てきて、USBテザリングでネットに接続出来た
かなり手順が多く複雑ですが、やってることは単純なのでもしM1 MacでもUSBテザリングが必要な人は準備しておくと良いでしょう。
図:無事にUSBテザリングが有効になった
ポイント
- USBケーブル忘れたらアウトです
- AndroidをmacOSが認識できないケースがあります。その場合、Android File Transferをインストールしておくと認識できるケースがあります。
- USB接続時に充電ではNGです。MTP接続の状態(つまり、ファイル転送も可能な状態)で接続が必要です。
- USBケーブルと接続していないと、USBテザリングはONに出来ません。
- 古いmacOSの場合、古いバージョンのHoRNDISをインストールしてから、新しいバージョンを上書きすると良い(例えば、8を入れたいならば、7を入れてから)
- 逆に古いバージョンのHoRNDISが入っていたがために、新バージョンのmacOSにしたら、繋がらない事がある。その時は、以下の手順で削除を実行して、新しいバージョンのHoRNDISをインストールすると良い(El Capitan時代にあった話)。
1 2 3 |
//HoRNDISを削除 sudo rm -rf /System/Library/Extensions/HoRNDIS.kext sudo rm -rf /Library/Extensions/HoRNDIS.kext |
※ちなみに、Sierraを使ってますが、いきなり最新版をインストールして普通に使えました。