簡単にRaspberry PiでSORACOM AirのPPP接続とLAN接続のデフォルトゲートウェイを切り替えPPP接続を優先させる。

# 概要
Raspberry Piで富士ソフトのUSBモデム FS01BUなどを使いSORACOM Airの3G通信（PPP接続）ができます。その際、 **Raspberry PiにLANケーブルまたはWi-fiドングルを接続して、LAN上のイーサーネット（有線）かWi-fi（無線）に接続しつつ作業している場合が多いのではないでしょうか** （少なくともRaspbianインストール後の仕込みの時点ではPPPでサーバ接続＋LANでラズパイにSSH接続というというシチュエーションがよくある）。
![IMG_3603.jpg](https://qiita-image-store.s3.amazonaws.com/0/4092/67b92513-d132-79e1-c6b4-25003e58bda9.jpeg)
**デフォルトゲートウェイの設定によってはサーバやクラウドへの接続がLAN経由になって肝心のSORACOM AirによるPPP接続が使われていない**ことがあります。
この記事では、デフォルトゲートウェイを確認しデフォルトゲートウェイを切り替えPPP接続を優先させる手順を示します。

#手順 【前提・確認】
FS01BUなどをRaspberry Piに差します。Wi-fiドングルやイーサーネットケーブルが接続された状態でRaspberry Piを立ち上げてターミナルで操作を行います。ターミナルはRaspberry Pi直接でも、LAN接続されたPCのターミナル画面でも構いません。
`ifconfig`でネットワーク接続のデバイスを確認します。

```bash
$ ifconfig
eth0      Link encap:Ethernet  HWaddr b8:27:eb:XX:XX:XX  
          inet addr:192.168.1.96  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::ba27:ebff:fe1f:7d6c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9934 errors:0 dropped:0 overruns:0 frame:0
          TX packets:775 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:929803 (908.0 KiB)  TX bytes:72810 (71.1 KiB)

lo        …（中略）…

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:10.205.163.61  P-t-P:10.64.64.64  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:46 errors:0 dropped:0 overruns:0 frame:0
          TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:3172 (3.0 KiB)  TX bytes:3161 (3.0 KiB)
```
イーサーネット（有線）接続のインターフェース・デバイス名（以下「デバイス名」と呼びます）が`eth0`、SORACOM Airの3G通信（PPP接続）のデバイス名は`ppp0`になっています。
Wi-fiドングルでWi-fi（無線）接続をしている場合、デバイス名は`wlan0`などになっているでしょう。

次に、`netstat -r`コマンドで現在のルーティングテーブルを確認します。

```bash
$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
10.64.64.64     *               255.255.255.255 UH        0 0          0 ppp0
192.168.1.0     *               255.255.255.0   U         0 0          0 eth0
```

`Destination（受信先サイト）`列が`default`になっている行に着目します。

```
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
```
`Iface（インタフェース）`列が`eth0`になっており、インターネットにアクセスする場合`eth0`のゲートウェイ（=ルータのこと）経由で接続されます。これをPPP接続経由に変更したいと思います。

#手順 【デフォルトゲートウェイの切り替え】
`route del`コマンドで`eth0`デバイスのデフォルトゲートウェイの削除を行い、`route add`コマンドで`ppp0`デバイスのデフォルトゲートウェイの追加を行います。

```bash
$ sudo route del default dev eth0
$ sudo route add default dev ppp0
```
`route del`コマンドで既存のデフォルトゲートウェイの削除を行った後、`route add`コマンドで新たなデフォルトゲートウェイの追加を行う手順を行う必要があります。
その後、`netstat -r`コマンドで変更後のルーティングテーブルを確認します。

```bash
$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         *               0.0.0.0         U         0 0          0 ppp0
10.64.64.64     *               255.255.255.255 UH        0 0          0 ppp0
192.168.1.0     *               255.255.255.0   U         0 0          0 eth0
```
また`Destination（受信先サイト）`列で`default`になっている行に着目します。

```
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         *               0.0.0.0         U         0 0          0 ppp0
```

`Iface（インタフェース）`列が`ppp0`になっていればデフォルトゲートウェイが変更され、PPP接続経由に変更されています。


#手順 【Wi-fi（無線）接続での切り替え】

Wi-fiドングルでWi-fi（無線）接続をしている場合、デバイス名は`wlan0`などになっているので、以下のコマンドを打つことになります。

```bash
$ sudo route del default dev wlan0
$ sudo route add default dev ppp0
```

#接続確認

デフォルトゲートウェイの表示で確認は取れていますが、実際に接続して確認を取ってみたいと思う方は、`traceroute`コマンドで適当なサイトを指定してみればいいでしょう。

```bash
$ traceroute www.yahoo.co.jp
traceroute to www.yahoo.co.jp (xxx.xx.xx.xxx), 30 hops max, 60 byte packets
 1  ec2-yyy-yy-yyy-yyy.ap-northeast-1.compute.amazonaws.com (yyy.yy.yyy.yyy)  366.993 ms （以下略）
```
現時点（2015年11月時点）では最初のホップが、EC2の東京リージョンのIPアドレスになっていればOKです。インターネットへはSORACOM Airの3G通信（PPP接続）を経由して接続されています。


#参考サイトURL
+ [Linuxルーティング追加](http://www.server-memo.net/centos-settings/network/linux-routeing.html#i-3)  
Linuxでのルーティングテーブルの設定方法を様々なシチュエーションから取り上げられています。
+ [SORACOM Airで色々と検証してみる。](http://blog.tottokug.com/entry/2015/10/01/004721)  
株式会社マイニングブラウニーの得上さんが、SORACOM AirのアクセスするIPアドレス周りをイロイロ調べられています。

では、SORACOM AirでIoTをお楽しみください:smile: