2019年7月12日金曜日

macOS のリカバリーモードで USB Ethernet アダプタ(LANアダプタ)を認識させる方法

macOS のOS再インストールは、リカバリーモード(Command + r を押しながら起動)から行います。途中で認証のためにネット接続が必要です。どうやら標準搭載されているデバイスでしか GUI によるネット接続をサポートしていないのか、手持ちの MacBookAir では Wi-Fi しか認識しません。WPA の Enterprise 認証の場合、どうやら接続ができないようなのです(接続エラーになる)。手持ちのUSB Ethernet LAN アダプタを接続してもネット接続できません。そうした場合に networksetup コマンドで手動認識させる方法を見つけたので紹介します。

試した環境


  • macOS 10.14.5
  • MacBookAir 13inch 

参考情報



1. リカバリーモードで networksetup コマンドを利用するには


networksetup コマンドは /usr/sbin/networksetup に入っています。しかしながら、

リカバリーモードにはこのコマンドが入っていません。そのため、

  1. リカバリーモードでディスクユーティリティを開き、内蔵HDD(SSD)をマウントする(内蔵HDDの名前が「Macintosh HD」と仮定します)
  2. ディスクユーティリティを終了し、ターミナルを開きます
  3. /Volumes/Macintosh\ HD/usr/sbin/networksetup  -listallhardware とタイプして Enterキーを押します。MacBookAirの場合には
     Hardware Port:  Wi-fi
     Device: en0
     Ethernet Address: *****

     Hardware Port:  Thunderbolt 1
     Device: en1
     Ethernet Address: *****

     Hardware Port:  Thunderbolt Bridge
     Device: bridge0
     Ethernet Address: *****

    の3つが出てきました。
  4. /Volumes/Macintosh\ HD/usr/sbin/networksetup  -listnetworkserviceorder とタイプしてEnterキーを押します。
     (1) Wi-Fi
     (2) Thunderbolt Bridge

    の2つが出てきます。つまりはこれが認識されているハードウェアのうち、有効なデバイスということです。

ということで、内蔵HDDの networksetup コマンドを間借りするということになります。


2. Apple USB Ethernet Adapter を Mac に接続し、LAN接続する


  1. 物理的に USB Ethernet Adapter をMacに接続して、さらにLANケーブル経由でLAN ネットワークに接続します。
  2. /Volumes/Macintosh\ HD/usr/sbin/networksetup  -listallhardware とタイプして Enterキーを押します。MacBookAirの場合には
     Hardware Port:  Apple USB Ethernet Adapter
     Device: en2
     Ethernet Address: *****


     Hardware Port:  Wi-fi
     Device: en0
     Ethernet Address: *****

     Hardware Port:  Thunderbolt 1
     Device: en1
     Ethernet Address: *****

     Hardware Port:  Thunderbolt Bridge
     Device: bridge0
     Ethernet Address: *****

    *以後、Apple USB Ethernet Adapter がMacが認識した devicename(デバイス名)になり、コマンドで使うことになります。これはアダプタによって名称が違います。沢山あってわからない場合には、そのアダプタを抜いた場合と接続した場合の両方で、このハードウェア一覧表示コマンドを使って違いをチェックして確認してください。
  3. /Volumes/Macintosh\ HD/usr/sbin/networksetup  -listnetworkserviceorder とタイプしてEnterキーを押します。
     (1) Wi-Fi
     (2) Thunderbolt Bridge

    のようにハードウェアとしては認識していますが、それが使える状態にありません。

3. Apple USB Ethernet Adapter を認識させる


  1.  /Volumes/Macintosh\ HD/usr/sbin/networksetup  -detectnewhardware とタイプしてEnterキーを押します。  
  2. /Volumes/Macintosh\ HD/usr/sbin/networksetup  -listnetworkserviceorder とタイプしてEnterキーを押します。
     (1) USB Ethernet Adapter
     (2) Wi-Fi
     (3) Thunderbolt Bridge
のように自動認識でうまく認識してくれたらOKです。

4. ネット接続できるか確認する


  1. ifconfig en2 up とタイプして Enterキーを押します。
     *念の為、ifconfig(リカバリーモードで利用できる)で、Apple USB Ethernet Adapter( Device: en2で認識されている )をアクティブにしておきます(アクティブになっていると思いますが)
  2. ifconfig en2 とタイプして Enterキーを押します。
    flags=数字 <UP, BROADCAST, ....> のところに UPが入っていること
    inet6  IPアドレス(IPv6)
    inet IPアドレス(IPv4)
    のいずれか利用しているネットワークで意図したIPアドレスが入っていることを確認する
    <うまくいかない場合>
    • *もしDHCPでのIP自動取得が出来る状況にもかかわらず、出来ないなら /Volumes/Macintosh\ HD/usr/sbin/networksetup -setdhcp "USB Ethernet Adapter"
      としてDHCPによる取得設定を試してみてください。
    • *もし固定IPアドレスの場合には
       /Volumes/Macintosh\ HD/usr/sbin/networksetup -setmanual "USB Ethernet Adapter"  IPアドレス  サブネットマスク IPアドレスで設定します。
  3. ping   www.yahoo.co.jp
    などインターネット越しのサーバーと通信できるか確認する
    nslookup や dig を使いたいなら、
    /Volumes/Macintosh\ HD/usr/bin/nslookup  等にあるので、使って確認してみる

ということで利用できるかどうか分かります。

5. プロキシ設定を確認する、設定する(必要なら)


透過プロキシやプロキシなしで接続できるならプロキシ設定は不要ですが、プロキシ設定をしないと接続できない場合もあるでしょう。
  •  /Volumes/Macintosh\ HD/usr/sbin/networksetup -getwebproxy "USB Ethernet Adapter"
    Enabled: Yes
    Server: *******
    Port: 8080
    Authenticated Proxy Enabled: 0
上記コマンドでもし、プロキシが有効なら上記のように設定が出てくるでしょう。リカバリーモードだと全部OFFがデフォルトじゃないかなと思います。
  •  /Volumes/Macintosh\ HD/usr/sbin/networksetup -setwebproxy "USB Ethernet Adapter"  <domain> <port number> <authenticated> <username> <password>
がマニュアルになりますので、
  • Server: proxy.example.com
  • Port: 8080
  • ユーザー認証なし
だと仮定するから
  •  /Volumes/Macintosh\ HD/usr/sbin/networksetup -setwebproxy "USB Ethernet Adapter"  proxy.example.com  8080
になりますね。
  • /Volumes/Macintosh\ HD/usr/sbin/networksetup -setwebproxystate "USB Ethernet Adapter" on
として設定したプロキシを有効にしておく必要があります。もしセキュアプロキシだと、setsecurewebproxy オプションの方を使うみたいですね。
現時点で下記のようなコマンドの種類があるので、いろいろ見てみると良いと思います。
  • Usage: networksetup -getftpproxy <networkservice>
  • Usage: networksetup -setftpproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
  • Usage: networksetup -setftpproxystate <networkservice> <on off>
  • Usage: networksetup -getwebproxy <networkservice>
  • Usage: networksetup -setwebproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
  • Usage: networksetup -setwebproxystate <networkservice> <on off>
  • Usage: networksetup -getsecurewebproxy <networkservice>
  • Usage: networksetup -setsecurewebproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
  • Usage: networksetup -setsecurewebproxystate <networkservice> <on off>
  • Usage: networksetup -getstreamingproxy <networkservice>
  • Usage: networksetup -setstreamingproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
  • Usage: networksetup -setstreamingproxystate <networkservice> <on off>
  • Usage: networksetup -getgopherproxy <networkservice>
  • Usage: networksetup -setgopherproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
  • Usage: networksetup -setgopherproxystate <networkservice> <on off>
  • Usage: networksetup -getsocksfirewallproxy <networkservice>
  • Usage: networksetup -setsocksfirewallproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
  • Usage: networksetup -setsocksfirewallproxystate <networkservice> <on off>
  • Usage: networksetup -getproxybypassdomains <networkservice>
  • Usage: networksetup -setproxybypassdomains <networkservice> <domain1> [domain2] [...]
  • Usage: networksetup -getproxyautodiscovery <networkservice>
  • Usage: networksetup -setproxyautodiscovery <networkservice> <on off>
  • Usage: networksetup -setautoproxyurl <networkservice> <url>
  • Usage: networksetup -getautoproxyurl <networkservice>
  • Usage: networksetup -setautoproxystate <networkservice> <on off>

2019年7月12日 @kimipooh

0 件のコメント: