Mac で SORACOM Air で接続している時に特定のルートだけ SORACOM 経由にしてそれ以外は Wi-Fi 経由にする方法

タイトルが若干長いですが、やりたいことは以下のとおりです。

1. 通常は Wi-Fi などでインターネットに接続している
2. SORACOM Air 入りの USB 3G/LTE モデムを Mac に挿した時、SORACOM が提供するサービスには SORACOM Air 経由でアクセスしたいが、それ以外のネットワーク通信は通常通り Wi-Fi 側で行いたい

私の場合は soracom-sdk-go のテストの中で metadata.soracom.io へのアクセスがあり、そこだけ SORACOM Air 経由にしたいという個人的な事情がありました。

他にも SORACOM Beam や SORACOM Endorse、SORACOM Funnel などのサービスへのアクセスも同様にルーティングしたい場合があるかもしれませんし、SORACOM Canal や SORACOM Direct で接続したプライベート環境へのルーティングも同様に行いたい場合があるかもしれません。

設定手順はおおまかに以下の2ステップです。

1. システム環境設定 > ネットワーク で Wi-Fi と USB モデムの優先順位を設定
2. ダイアルアップ時に実行されるスクリプトを書いてルーティング設定を追加


ではスクリーンショットなどを交えながら具体的に説明していきます。

1. ネットワークインターフェースの優先順位を設定

システム環境設定からネットワークの設定を開きます。
左側のインターフェースのリストの下部に歯車アイコンがあり、それを押すとメニューが現れます。
その中から「サービスの順序」を選択します。
f:id:bearmini:20160328161022j:plain
(画像はメニューなどが英語になっていますが日本語でも同様の項目があるはずです)

サービスの順序のリストが出てきますので、Wi-Fi などの通常使いたいものの方が上になるように設定します。(ドラッグアンドドロップで項目を移動させます)
f:id:bearmini:20160328161434j:plain

並び替えたら OK を押して閉じます。

ちなみに上図の私の環境では FOMA L05A xxx というのが 3G モデムです。

以下のサイトの説明にしたがってセットアップしたものになります。

oshiire.to

余談になるかもしれませんが、以下のサイトで説明されている手順が L-05A にも適用できて、CD を毎回 Eject する手間が省けます。

trtr.hatenablog.jp

2. ダイアルアップ時のルーティング設定を追加

/etc/ppp/ip-up という名前のファイルを以下の内容で作成し、所有者: root 、ファイルのパーミッション:755 とします。
(ファイル名が if-up ではなく ip-up であることに注意してください)

#!/bin/sh

/sbin/route add -net 100.64.0.0/10 10.64.64.64

この route コマンドにより、100.64.0.0/10 宛てのパケットを全て SORACOM Airゲートウェイ(10.64.64.64)に向ける設定が行われます。
(ネットワークのアドレスは 100、ゲートウェイのアドレスは 10 で始まることに注意してください)

SORACOM の各サービスは 100.x.x.x というアドレス(ISP Shared Address)にて提供されています。
例えば SORACOM Beam(beam.soracom.io)は 100.127.127.100 というアドレスを持っていますし、SORACOM Airメタデータサービスは 100.127.100.127 というアドレスでアクセスできます。

なお、ここで追加したルーティング設定は、disconnect 時に自動的に消えるようなので明示的に消さなくても良いようです。

これで beam.soracom.io などに ping が通れば成功です。

$ ping beam.soracom.io
PING beam.soracom.io (100.127.127.100): 56 data bytes
64 bytes from 100.127.127.100: icmp_seq=0 ttl=64 time=399.464 ms
64 bytes from 100.127.127.100: icmp_seq=1 ttl=64 time=435.335 ms
64 bytes from 100.127.127.100: icmp_seq=2 ttl=64 time=394.338 ms
  :

万が一設定を失敗していると、SORACOM 宛てのパケットだけでなく全てのトラフィックが SORACOM 経由になってしまって課金が大変なことになってしまう恐れがありますので、ユーザーコンソールを開いて想定外のトラフィックが流れていないか目視で確認したり、イベントハンドラーを設定するなどして通信量を監視するとよいでしょう。

高度な設定としては、SORACOM Endorse へのトラフィックも SORACOM Air 経由にするために、上記スクリプト(/etc/ppp/ip-up)に以下のような設定を入れておくと良いでしょう。

endorse_ip=$( dig +noall +answer endorse.soracom.io | \grep -oE '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' )
/sbin/route add -host $endorse_ip 10.64.64.64

これは、endorse.soracom.io は 100.64.0.0/10 に属するアドレスを持っていないためです。dig コマンドで endorse.soracom.io のアドレスを解決して、そのアドレス宛てのルートを 10.64.64.64 へ向けています。