macOSで特定ドメインのDNS問い合わせサーバーを固定する

先日、自宅のネットワークにWiMAX2+ルーターを追加して、時間帯や端末毎にゲートウェイを振り分けて使い分ける体制を構築したのですが、ひとつ困ったことが置きました。LAN内からLAN内のサーバーへのアクセスです。YAMAHAルーター(以下RTX)はいわゆるヘアピンNATには対応してないのですが、特定のホスト名に対して固定のIPアドレスを返す簡易DNSサーバー機能があるので、LAN内からRTXにDNS問い合わせした時はプライベートIPアドレスが返るようにすることでLAN内からも同じホスト名でサーバーにアクセスできていました。

ところが先の記事の体制にしたことで、IPv6でのDNSサーバーがDHCPv6かRA経由で振ってくるようになってしまい、macOSの仕様上そちらが優先されてしまうぽいのです。つまり、Macから自宅サーバーのホスト名を調べるとIPv4についてもプライベートIPではなくグローバルIPがWiMAX2+経由で返ってきてしまい、結果としてRTX(光回線)経由だとLAN内サーバーが見えなくなってしまいます。

回避手段として簡単なのはDNSサーバーを固定しまうことですが、外に持ち出すノートPCだとそれはそれでトラブルになってしまいます(あるいは逐一ネットワークプロファイルを切り替えなければならなくなる)。

そこで見つけた方法は、/etc/resolver/フォルダにドメイン毎のDNS設定を追加する方法です。自ドメインに関する問い合わせだけは、強制的にRTXのIPアドレスをDNSサーバーに使うようにします。またそれだけだと外出先で問題になるので、短めのタイムアウトを指定しておき、外出先でローカルIPアドレスによるDNSサーバーから返事がもらえなければあきらめてDHCP由来のDNSサーバーを使う、という感じにするわけです。

方法は、/etc/resolver/フォルダに、振り分けたいドメイン名(例えばhoge.com)をファイル名としたテキストファイルを作り、以下のような内容を書いておきます。

nameserver 192.168.0.1
options timeout:1

1行目は文字通り指定したいDNSサーバー。2行目はタイムアウトまでの秒数。これだけです。再起動なども必要なく反映されるぽいです。

scutil –dns

とすると、現在のDNS設定が出てくるので、

resolver #9
domain   : hoge.com
nameserver[0] : 192.168.0.1
options  : timeout:1
flags    : Request A records, Request AAAA records
reach    : Reachable, Directly Reachable Address

などという表示が見つかればOKです。*.hoge.comに関するDNS問い合わせは192.168.0.1を使う、ただし1秒で応答がなければ諦めてシステムデフォルトのDNSサーバーを利用、という形になります。

据置型WiMax2+ルーター L01で自宅のネットワーク速度低下を補う話

我が家や大和ハウスの賃貸物件で、D.U-Netというプロバイダのインターネット接続が無料で使えます。物件ごとに1Gbpsや200Mbpsがあるので、おそらくフレッツ光ベースではないかと思います。存在自体はまぁありがたく、昼間は数十〜100Mbps程度、午前中うなどは200Mbps超出るもの、夜20時過ぎから深夜1時過ぎくらいまでが2,3Mbpsまで落ち込むことがあり、NetflixやAmazonプライムビデオなどを観ていてもブツブツ切れたり画質が落ちたりします。ダウンロードなどもちっとも進まなくなります。もはや自腹でいいので戸建て向けのフレッツ光ネクストを引き込みたいところですが、引き込み済み物件だけに交渉がめんどくさそうでまだ着手していません(入居前には原則対応してないが個別相談、みたいな返答だった。まぁ二ヶ月半額とかやってたくらい入居者決めたかったぽいので、回答はボカしたという感じ)。

そんな折り、ふと「契約した翌日に引っ越し話が持ち上がり、ノマド用に買ったもののめっきり使わなくなったWiMAX2+ルーターを使ったらよくね?」と思い立ちました。W03にEthernetポートを増設できるクレードルを買って、RTX1210にぶらさげ静的ルーティング書いてやれば、自宅LANからそちらにパケットを振り向けられるなと。WiMAX2+は先日制限緩和されて3日で10GBまでは速度制限がかからなくなりました。これくらいあればほとんどの需要に耐えられるし、RTXのフィルター型ルーティングを使えば、特定のサーバー向け通信、特定の端末からの通信、特定のプロトコルの通信だけをWiMAX2+に振り向けたり、光に振り向けたりもできるはず。

ということで早速クレードルを取り寄せて実験したところ、混雑時間帯のWiMAX2+の速度はspeedtest.netで15Mbps程度とD.U-NetよりはマシだけどフルHDや4K動画とかには微妙かなー、というレベルでした。そこで220MbpsのW03にかわり、最新の440Mbps CA対応機であり据置型故に感度も良いと評判のHUAWEIのL01に乗り換えてみたらどうだろう?と思い本記事の試みが始まりました。

■L01概要とレビュー

au Speed Wi-Fi HOME WHITE L01 HWS31SWA

au Speed Wi-Fi HOME WHITE L01 HWS31SWA

Amazonの情報を掲載しています

W03と同じHUAWEI製端末で、バッテリーを搭載せず据置専用モデルです。440Mbpsはモバイルルーターでもありますが、本機の方が内蔵アンテナが大きいのかWiMAXもWi-Fiも感度が良いと評判でした。また通常10台程度の推奨同時接続クライアント数が、2.4GHzで20台、5GHzで20台、有線ポートが2ポートで2台で合計42台と業務用ルーター級となっており、それに見合ったCPU(SoC)故か、実効速度もまずまずということでした。

機種変更手続きや、(端末0円契約のための)解約->新規契約するのが面倒だったので、白ロムで端末を手に入れてSIMを刺し替えて使うことにしました。固定代替契約のL01専用プランに変更するとプラスエリアモード(LTE)が7GBからさらに増えるという話もありましたが、基本LTEでは使わない予定なので、特にプラン変更もせず。しちゃうとモバイルルーターで使えなくなるらしいので、なにか用事でモバイルルーターに刺し替えて使いたいことがあるかもな意味でも現行プラン維持でいいかなと。

大きくて電源も必要ですが、同時接続台数が多いので、たまにセミナー業務などで会場にネットワーク接続を提供したい時に、持ち込んでコンセント挿すだけでそれなりの速度と接続台数を提供できるのは業務機材としてももっておいていいかなと思わせます。モバイルルーターの8台とか10台とかだとちょっと不足/不安でしたし。その意味でも結果オーライ感。

仕様としては同じHUAWEIのW03と良くも悪くも近い感じ。例えばWi-Fiの電波強度などが調節できません。今回の用途なら普段はWi-FiをOFFにしておきたくらいですが、残念ながらそれもできない。モバイルルーターと違い2.4GHzと5GHzが排他ではない点も一般的には良いことですが、今回の用途でいうと無駄なSSIDが2つも飛んでしまう点は気になります。MACアドレス制限や同時接続台数制限(最低1)は設定できるので、そちらで不正利用を防ぐ感じです。また据置なのにVPNサーバー機能などもない点は固定代替としては弱い部分かなと思いました。

ハード面ではLED消灯モードが良いカンジですが、まぁわざわざ消すほど目に刺さるような強い光を発する感じでもないです。NFCでAndroid端末などの利用設定がかざすだけで完了するのもセミナー会場利用なんかではいいかも。当分試す機会はないですが。

■自宅LAN(RTX1210)との接続

最初W03でテストした時に、同機のブリッジモードを試しました。RTXの2つあるWAN用ポート(LAN2と3)は使用済みだったので、SWX2200-8GにポートベースVLANを切って、そちに接続を試みたんですが、DHCPでIPアドレスが取得できたものの通信はできず。設定を煮詰めればできたはずなんですが、そこでふと同一ネットワークの方がメリットがあることに気づき方針転換。それはIPv6対応です。auのWiMAX2+回線なら無料でIPv6が使えます。フレッツのIPoEみたいにIPv4 over IPv6(DS-LiteやV6プラス)でIPv4通信を高速化できるわけではないですが、IPv6対応済みのクラウドVPSな自鯖や実家LANとの接続が便利になります。これをLAN2/3やVLANで別ネットワークにしてしまうとややこしいことになります。そこでW03/L01のLAN側のIPアドレスを自宅と同じ192.168.0.xのもの(仮に192.168.0.100とします)とし、RTXとかぶらないようにDHCPサーバーをオフにし、有線LANで接続。これだけでWiMAX2+側から自宅の各端末にIPv6アドレスが振ってきてなにも設定しなくてもIPv6が使える様になりました。

次にIPv4ですが、単純には各端末のネットワーク設定でデフォルトゲートウエイを192.168.100にすれば、L01経由でインターネットに出て行ってくれますが、ひとつひとつ設定をかえるのは面倒だし、先に書いたような柔軟な振り分けもできません。ここは一旦RTX1210に来た通信をフィルター型ルーティングで振り分けることにします。

・端末毎に振り返る

例えば、自宅内でももともと通信が遅くて構わないものは従来通り光で、よく使うPCやスマホなどをL01にするなど、端末のIPアドレスで振り分けたい場合。前提として、DHCPサーバー設定で各端末のMACアドレスに対する固定IPアドレスを適切に振ってあり、192.168.0.1〜192.168.0.99の端末はL01、それ以外は光にしたい場合、

ip filter 500001 pass 192.168.0.1-192.168.0.99 * * * *
ip route default gateway 192.168.0.100 filter 500001 gateway dhcp lan2

などとします。gateway 192.168.0.100がL01、gateway dhcp lan2がLAN2のプロバイダということです。PPPoEでプロバイダにつないでいる場合は、後者はgateway pp 1とかになるかも知れません。うちはさらに固定IPアドレスの別プロバイダもあるので、gatewayが三段構えになります…

・時間帯で設定を変える

混雑時間帯に激重になる光も、朝と昼間はさすがにWiMAX2+より遙かに速いです。ということで、夜間のみ上記の設定をして、昼間は普通に全て光を使うようにします。この場合、RTXにはscheduleコマンドがあるので、それを使います。いちいちLUAスクリプトなどを用意する必要すらありません。

schedule at 1 */* 02:00 * ip route default gateway dhcp lan3
schedule at 2 */* 20:00 * ip route default gateway 192.168.0.100 filter 500001 gateway dhcp lan2

とすれば、午前2時と午後8時にip routeコマンドが実行され、設定が切り替わります。atの後の数字はスケジュール番号なので、重複しなければなんでもOKです。その気になれば曜日毎に動作を換えることも簡単です。また時刻の後の*はppやtunnelなど個別のインターフェイスをselectしてない最上位階層でもコマンド実行を意味しています。最初これに気付かず不親切な「パラメータは整数で指定してください」というエラーメッセージに悩まされました。

・L01がダウンしたら光に振り向ける

先に書いた通り、L01は仕事で持ち出す可能性もありますし、WiMAX2+自体そもそも光よりは不安定なので、つながらなくなる可能性があります。そんなときに自動的に光(この場合LAN2)に振り返ることもできます。

ip keepalive 10 icmp-echo 10 5 192.168.0.100

ip route default gateway 192.168.0.100 filter 500001 keepalive 10 gateway dhcp lan2

一行目で監視設定を作ります。10は監視設定の通し番号です。既にプロバイダ毎に1や2を使ってる場合があるので、上書きしてしまわないよう確認するか大きめの数字を割り振ります。次の10と5は監視pingを打つ間隔と、何度普通になったらダウンと見なすかの基準。最後はL01のIPアドレスです。

これを最初のip routeコマンドのgateway 192.168.0.100に対して割り当てます。filter設定があるのでその後に続けて書けばOKです。scheduleの方への反映も忘れずに。

これでいきなりL01をぶちっとネットワークから外しても自動的に光に振り向けられます(さすがにsshやSkypeなどは切れるでしょうけど…)。

ただしあくまで192.168.0.100へのping到達性で判断しているので、L01は生きてるけどWiMAX2+接続がダウンしている、というケースには対応できないかも知れません。ちゃんとやるなら外部のどこかのサイト(IPアドレス)を指定して、そこへの接続はWiMAX+を経由する設定にするなどが必要かも知れませんね。

 

ともあれ、そんなこんなで「夜の光が遅い時間帯は主要端末はWiMAX2+を利用。ただしWiMAX2+ルーターがダウンしたら光を使う」設定が実現しました。RTXは便利すね。

 

Netatomo + IFTTT + FHCでエアコン自動制御

SONY MESHを使ったDIYに続き、連休IoT第二弾。暑さに弱いフェレットのケージ温度見守りにチャレンジ。

前記事に書いたように、MESHは長期安定運用には厳しいという結論が出たので、今回は既設のNetatmo Weather Stationに追加の室内モジュールを購入しました。

すでにIoTまみれの我が家ではスマホで室温が確認できるガジェットはありました。iRemocon Wi-FiやFutrue Home Controllerなど。また富士通ゼネラルのエアコンにもスマホコントローラーを追加してあり、アプリから室温をチェックできます(運転中のみ)。ただこれらはその時々の温度はわかるものの、継続的にログをとってくれないので、例えばエアコン切って出かけている間にどれくらい温度上昇しているか、というのを振り返ることができません。

そこでログがとれるNetatomoです。もちろん本体単体でも可能なのですが、それはそれで別の部屋で使いたかったので、オプションの屋内用追加モジュールとあいなったわけです。また屋内用追加モジュールは乾電池式なので配線をかじられたりといった心配も不要だったのもあります。

本体との通信はWi-Fiではない(Bluetooth?)ので、通信距離的に不安がありましたが、とりあえずきちんとログがとれてるぽいので一安心。

さて、Netatmoは専用アプリでログを確認できるのはもちろんですが、IFTTTやYahooのmyThingsといった連携サービスとつながることも特徴です。これらのサービスで数値を監視し、閾値を超えたらメールするとか他の機器(例えばエアコン)を操作するといったことが可能です。これらはオンラインサービスなのでMESHと違い、その場にスマホなどがないと動作しないといったことはなく、一度設定してしまえば単体で動作し続けます。

以前からmyThingsでiRemocon Wi-Fiと連携させて、温度が上がったらエアコンを入れる、下がりすぎたら切るといったレシピを設定していたのですが、やたら不安定でエラーが返るのと、iRemocon Wi-Fiの外からの制御に月額有料プランの登録が必要などがあり、今回IFTTT(イフト)に乗り換えることにしました。

設定してみると、myThingsでは室温と騒音しかトリガにできなかったのが、IFTTTではさらに湿度、CO2濃度、気圧、雨(要屋外雨量モジュール)、風量(要屋外風量モジュール)と、Netatmo Weather Stationが計測できるあらゆる数値をトリガにできることが判明。Netatmo使うならIFTTTが断然オススメです。ただしiRemocon Wi-Fiを操作できるのはmyThingsのみなので、こちらを(外出先からの利用が無料なレンタルプランで)ご利用の方はmyThingsを検討してもいいかも知れません。myThingsならiRemocon Wi-Fiの温度情報も利用できるのでNetatmo自体不要という話も。IFTTTからGmailかなにかのWebサービスを経由してmyThingsを叩いてもいいかも知れません。

今回は本体買い切りしてしまい、WANからの利用は有料プランが必要になる我が家ではiRemoconの利用を諦め、Maker Webhooksという指定URLを叩いてくれるモジュールを使って、iRkitやFuture Home Controllerを制御することにしました。Future Home ControllerのWeb APIを叩く設定はこんな感じ。Future Home Controllerの設定画面から目的のデバイスで目的の信号を発するためのURLを取得することができるので、これをコピーしてきます(IFTTTが外から呼び出すので、remote webapi経由のURLアドレスを使用します)。例えばこんな感じ。

https://fhc.rti-giken.jp/api/elec/action?webapi_apikey=(APIキー)&user=(メールアドレス)&elec=リビングエアコン&action=冷房普通

で、下がMaker Webhooksの設定画面ですが、「Surround any text with “<<<” and “>>>” to escape the content」と注意書きがあるので、とりあえず日本語部分を<<< >>>で囲ってこんな感じにしてからペースト。

https://fhc.rti-giken.jp/api/elec/action?webapi_apikey=(APIキー)&user=(メールアドレス)&elec=<<<リビングエアコン>>>&action=<<<冷房普通>>>

あとは写真の通りに、MethodとContent Typeを指定。Bodyは空でOKです。

■エアコン自動運転でよくね?という方へ

ここまで読んで、「エアコンで希望の温度設定にして付けっぱなしにしとけばよくね?」と思われた方もいらっしゃるかも知れません。まぁ確かにその通りなんですが、居室、寝室など人が住む部屋だとやはり主観で寒いなと思えば弱めたり切ったりしてしまいますし、そのまま出かけてしまうこともあります。むしろ付けっぱなしの覚悟ができる真夏より、「今日は涼しいからエアコンいれとかなくて大丈夫かな」と思って出かけると急激に暑くなるような今時分の季節が危ない。そんな時に保険として、人がどんな設定をしたり切ったりしていったも、一定温度を超えたら強制的に冷やしてくれる存在が欲しいのです。実は富士通ゼネラルのエアコンには「みまもり機能」というのがあり、高齢者の熱中症防止に室温が30度を超えたら自動的に冷房が入る設定があります。リモコンで電源を切っていても発動します。ので今回は自分で取り付けた部屋は全部富士通ゼネラルにしました。惜しいのは30℃固定なので人間にはよくてもより暑さに弱いフェレットにはまだ不安です。是非ユーザが温度を選べるようにしてほしかったですね。

 

SONY MESHで試す便利IoT(?)システム

連休中、諸般の事情であまり出かけられなかったので、IoT DIYにチャレンジ。

第一弾はSONYのMESHを使ったもの。MESHは、タグと呼ばれる小さなブロック状の製品群で、それぞれ光センサ、加速度センサ、温度湿度センサをもつ入力系や、LED点灯、GPIO(モーターなどの外部制御)などの出力系など機能をもっていて、それをスマホアプリでプログラミングして所定の動作を行わせるというものです。例えば、温度センサタグが所定の室温上昇を検知したら、LEDタグを光らせる、みたいな感じ。

今回は、加速度センサのついたMoveタグ、照度センサのBrightnessタグ、人の動きを検知するMotionタグを購入しました。

ソニー Sony MESH 動きタグ(Move) MESH-100AC

ソニー Sony MESH 動きタグ(Move) MESH-100AC

6,380円(06/28 15:54時点)
Amazonの情報を掲載しています
ソニー Sony(ソニー) MESH 明るさタグ(Brightness) MESH-100PA

ソニー Sony(ソニー) MESH 明るさタグ(Brightness) MESH-100PA

6,182円(06/28 21:12時点)
Amazonの情報を掲載しています
ソニー Sony(ソニー) MESH 人感タグ(Motion) MESH-100MD

ソニー Sony(ソニー) MESH 人感タグ(Motion) MESH-100MD

6,182円(06/28 15:54時点)
Amazonの情報を掲載しています

■Moveタグで猫のトイレログ

我が家の猫用トイレはシステムトイレで、つり下げ式のドアがついています。ここにMoveタグをとりつけ、猫が出入りしてドアが揺れたことを検知し、IFTTTを経由してGoogle Drive上のファイルにタイムスタンプを書き込むようにしました。それだけでは意味はないんですが、追々は入った時刻と出た時刻の差分をとって、滞留時間を算出することで、大きいのか小さいのかを判別できたらなと思っています。大きいのならすぐに回収した方が部屋が匂わないんですが、さぁ寝るぞと部屋を暗くした途端にトイレにいく習性があるので、いつももういちど電気つけてメガネしてトイレまでチェックしに行くべきか悩ましいんですよね…だからこれで大小が判別できる仕組みが作れればなと。現在は分析用のログを収集中。ただ砂かけの代わりか、このドアをガリガリ叩く癖があるので、そういう細かい振動は排除するとか、飼い主が掃除のために開け閉めしたのも除外しなきゃとか、そもそもどのタイミングが大だったのか小だったのかというデータをあわせてとらないと分析しようがないので、色々めんどくさくなってきたw。

現状のMESHラインナップでは無理ですが、ラズパイとかでカメラ映像をとって差分で茶色い物体を検出するとかした方がいいのかも。

■Brightnessタグで来客検知

我が家のドアホンは録画機能などがあるのはいいんですが、肝心のベル音量がリビング以外の部屋で聞こえづらく、宅急便などに気付けないで持ち帰られてあいまうことが多々あります。

しょうがないのでこの音センサでワイヤレスチャイムを鳴らす製品を買ったんですが、やはり音をトリガにすると誤反応が多い…

サウンドモニター セット X870

サウンドモニター セット X870

Amazonの情報を掲載しています

そこで、Brightnessタグを写真のように貼り付けて(黒い側にセンサがあります)、ドアホンが鳴らされて液晶が点灯した明るさを検知するようにしてみました。

人感センサータグは色々応用が利きそうだと思って買ったんですが、まだ具体的になにかの用途には使っていません。一応廊下などに置いておくと人や猫が通った時に反応するところまでは確認しました。精度はまずまずです。

■MESHまとめ

MESHはBluetoothでスマホと通信し、スマホアプリを介して連携をするので、厳密にはIoTとは言えないかも知れません。実用上は以下のような弱点があります。

  1. プログラムをしたMESHアプリが入っているスマホ/タブレットがその場にないと動作しない
  2. バックグラウンド動作は一応できるが、1台のスマホで1度に1つのプログラムしか動かせない
  3. Bluetoothでペアリングして使用するので、1台のスマホ/タブレットからしか使えない
  4. バッテリーが2,3日〜数日程度しかもたない(タグの種類によってまちまち)

など。来客モニタは自分も在宅なことが前提なので別にいいんですが、猫トイレログなんかは留守中も動作して欲しいわけなので、持ち歩くスマホではなく家に置きっ放しのiPadで設定する必要がありました。ので、ちょっと設定をかえたいな、と思ってもスマホからはできずiPadを探しに行かねばならなかったり。MESHのプログラムはあくまでアプリ上で動くもので、その結果の動作をクラウドに連携させることはできますが、あらゆる端末からクラウドを介してプログラム自体を管理するようなものではないのです。

これらを鑑みると、MESHはあくまでプログラム学習ツールであって、その場で動かして「わーい」って言うにはとて簡単で良いのですが、実用的、継続的な機能をもたせるIoTデバイスとしてはちょっと厳しいかなという感想です。どうせならAPIを公開して、Raspberry Piなどからでも利用できるとかなれば、あとは電源だけ常時給電してやればなんとかなるんでしょうけど(ちなみに充電端子はmicroUSBなので、モバイルバッテリーなどでも充電可能です)。