#概要
Mechatrax社のslee-Pi2に続いて、4GPiを入手。以前開発したslee-Pi2向けのansible playbookを拡張してみた。
#手順
先ずは、4GPi向けのansible playbookをREADMEに従って実行します。
このplaybookにより、Mackerel.ioに、通常のシステム・メトリックスに加えて、CPU温度とslee-Pi2のVOLTAGE(電源電圧)WiFi/4GPiの電波強度をカスタム・メトリックスとして投稿するようになります。
これで問題となったのは、Mackerelではマイナス値を描画できないことでした。そこで、マイナス値になるであろうWiFi_SignalLevel 4GPi(RSQR RSRP SSNI)に関しては、+150した値をプロットするグラフをcustom.mechtrax.tweakに表示するようにしました。
これは/opt/mechtrax/sbin/customMechatrax.shのADJUST変数で処理しているので、必要に応じて手入れしてください。
また、4GPiのモデム・インデックスはINDEX変数で処理しています。
~# ansible-playbook -i hosts 4gpi.yml
これで4GPiのインストール・セットアップそしてSORACOMのSIMの設定まで行います。他社SIMを使う場合は、playbookの’nmcli'コマンドの編集もしくは、手動でnmcliを投入します。
ansible playbookで設定できたという事は、該当Raspberry piはip reachableであることが前提になります。
4GPiがつながり、IPアドレスが付与されたか確認するには、以下のコマンドをraspberry piのshellで投入します。
##コネクション確認
# ~# ip a show dev wwan0
4: wwan0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
link/none
inet 10.134.47.129/30 brd 10.134.47.131 scope global noprefixroute wwan0
valid_lft forever preferred_lft forever
これが確認できたら、ルーティングの確認をします。
##ルーティング
~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.3.1 0.0.0.0 UG 303 0 0 wlan0
default 10.134.47.130 0.0.0.0 UG 700 0 0 wwan0
10.134.47.128 0.0.0.0 255.255.255.252 U 700 0 0 wwan0
192.168.3.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
これから分かる事は、wlan0(Wi-Fi)とwwan0(SORACOM 4G)の経路があり、
metricが小さいwlan0(Wi-Fi)が優先的なdefault routeになることです。
つまり、このままではSORACOMからパケットは出ていかないことになります。
~# curl ifconfig.io
116.94.139.122
このIPアドレスをnslookup・whoisしてみると、LANのWi-Fiルーターに付与されたIPアドレスであり、SORACOMのIPアドレスではないことが分かります。
そこでwwan0のmetricを小さくして、SORACOM 4Gを優先的なdefault routeにします。
一旦、delしてaddします。
~# route del default gw 10.134.47.130
~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.3.1 0.0.0.0 UG 303 0 0 wlan0
10.134.47.128 0.0.0.0 255.255.255.252 U 700 0 0 wwan0
192.168.3.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
~# route add default gw 10.134.47.130 metric 100 netmask 0.0.0.0 wwan0
~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.134.47.130 0.0.0.0 UG 100 0 0 wwan0
default 192.168.3.1 0.0.0.0 UG 303 0 0 wlan0
10.134.47.128 0.0.0.0 255.255.255.252 U 700 0 0 wwan0
192.168.3.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
~# curl ifconfig.io
103.67.223.47
~#
これで、SORACOM 4Gへの経路がmetric 100でdefault routeになり、ifconfig.ioへのアクセスは別のIPアドレスになっているのが分かります。このIPアドレスをnslookup・whoisするとSORACOMのIPアドレスになっています。
##ルーティング設定固定
以上の設定をpermanentにするには、nmcliコマンドでも行うことができます。
~# nmcli device
DEVICE TYPE STATE CONNECTION
cdc-wdm0 gsm connected gsm-4gpi-soracom
eth0 ethernet unmanaged --
lo loopback unmanaged --
wlan0 wifi unmanaged --
~# nmcli connection show
NAME UUID TYPE DEVICE
gsm-4gpi-soracom 8ab4fd5c-42e9-41f5-b8d5-504a0a3c9b45 gsm cdc-wdm0
~# nmcli c modify gsm-4gpi-soracom ipv4.route-metric 100
~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.134.47.130 0.0.0.0 UG 100 0 0 wwan0
default 192.168.3.1 0.0.0.0 UG 303 0 0 wlan0
10.134.47.128 0.0.0.0 255.255.255.252 U 100 0 0 wwan0
192.168.3.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
#備考
wlan0
ここまでは、SORACOM経路のmetricを小さくして対応したが、逆にWiFiの経路のmetricを700より大きくする方法もありますが、その際にはdhcpcd.confにWiFiのmetricを指定することでparmanentします。
interface wlan0
metric 800
を追加します。
ansible-playbook
ansible playbookのインベントリで、nmoptに"ipv4.route-metric 100"などのように指定すると、playbook実行時にmetricを指定することができます。