1.はじめに
ハッピーは、シミュレートされたネットワークトポロジの軽量オーケストレーションのための巣のラボで作成されたツールです。 Happyは、IoTホームエリアネットワークの開発とテストに役立ちます。
Happyを使用すると、次のことができます。
- IoTデバイスハードウェアを使用せずに、単一のLinux開発マシンでネットワークプロトコルやその他の分散実行プログラムをテストします
- ネットワーク全体で自動機能テストを実行する
- 同じシステムで複数の同時並列ネットワークを実行して、テストスループットを向上させます
このコードラボでは、あなたは幸せ、などの基本から始めるために方法を学びます織りのIoTデバイス用。あなたが使用します織り実装ですOpenWeave 、巣が発表したオープンソース版。
あなたが学ぶこと
- HappyとOpenWeaveを構築する方法
- シミュレートされたIoTネットワークを手動で作成する方法
- カスタムトポロジを管理する方法
- シミュレートされたハッピーネットワークをインターネットに接続する方法
- 織りの基本
必要なもの
- 物理または仮想のLinuxマシン
- GitクライアントまたはCLI
- Python 2.7
- ネットワークとルーティングの概念の基本的な理解
2.始めましょう
ツールチェーンと依存関係をインストールする
Happy and Weaveをビルドするには、サポートされているツールチェーンとすべての依存関係がインストールされていることを確認してください。
$ sudo apt-get update $ sudo apt-get install -y autotools-dev build-essential git lcov \ libdbus-1-dev libglib2.0-dev libssl-dev \ libudev-dev make python2.7 software-properties-common \ python-setuptools bridge-utils python-lockfile \ python-psutil $ sudo apt-get install -y --force-yes gcc-arm-none-eabi $ sudo apt-get update -qq
ソースコードを入手する
コマンドラインからHappyおよびOpenWeaveGitリポジトリのクローンを作成します。
$ cd ~ $ git clone https://github.com/openweave/happy.git $ git clone https://github.com/openweave/openweave-core.git
Happyをインストールする
Happyルートディレクトリから、Happyをインストールします。
$ cd ~/happy $ make
ハッピーインストールを確認する
これで、コマンドラインからハッピーコマンドにアクセスできるようになります。
$ happy-state State Name: happy NETWORKS Name Type State Prefixes NODES Name Interface Type IPs
OpenWeaveをインストールします
OpenWeaveルートディレクトリから、OpenWeaveをインストールします。
$ cd ~/openweave-core $ make -f Makefile-Standalone
OpenWeaveでHappyを構成する
HappyでOpenWeaveを使用するには、Weaveのインストール場所をHappyに通知する必要があります。パスでハッピー構成を更新/src/test-apps
ごOpenWeaveビルド中:
$ happy-configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
構成を確認します。
$ happy-configuration User Happy Configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
OpenWeaveのインストールを確認する
このCodelabで必要なWeaveコマンドには、コマンドラインからアクセスできます。
$ weave-fabric-add -h weave-fabric-add creates a weave fabric. weave-fabric-add [-h --help] [-q --quiet] [-i --id <FABRIC_ID>] Example: $ weave-fabric-add 123456 Creates a Weave Fabric with id 123456 return: 0 success 1 fail
あなたがエラーを取得した場合weave-fabric-add: command not found
、あなたの更新PATH
環境変数には、ハッピーバイナリのために使用されるパスと:
$ export PATH=$PATH:~/openweave-core/src/test-apps/happy/bin
3.最初のトポロジー
Happyを使用して次の3ノードトポロジを作成しましょう。
このトポロジは、単純なホームエリアネットワーク(HAN)の例です。このHANでは、2つのノードがスレッドネットワークで相互に接続され、それらのノードの1つがWi-Fi経由で3番目のノードに接続されます。このノードは、家庭内のワイヤレスルーターに接続して、HAN全体にインターネット接続を提供することもできます。これについては後で詳しく説明します。
まず、次の3つのノードを作成します。
$ happy-node-add 01ThreadNode $ happy-node-add 02BorderRouter $ happy-node-add 03WiFiNode
それらが存在することを確認しましょう:
$ happy-node-list 01ThreadNode 02BorderRouter 03WiFiNode
それでは、いくつかのネットワークを作成しましょう。
$ happy-network-add ThreadNetwork thread $ happy-network-add WiFiNetwork wifi
ネットワークが存在することを確認します。
$ happy-network-list ThreadNetwork WiFiNetwork
ハッピー状態を確認します。
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP WiFiNetwork wifi UP NODES Name Interface Type IPs 01ThreadNode 02BorderRouter 03WiFiNode
ネットワークを立ち上げるだけでは不十分です。ネットワークにノードを追加する必要があります。トポロジ図に従って、各ノードを適切なネットワークに追加します。
$ happy-node-join 01ThreadNode ThreadNetwork $ happy-node-join 02BorderRouter ThreadNetwork $ happy-node-join 02BorderRouter WiFiNetwork $ happy-node-join 03WiFiNode WiFiNetwork
注意02BorderRouter
両方に追加されたThreadNetwork
とWiFiNetwork
。これは、HAN内のボーダールーターとして、このノードが2つの個別のネットワークを相互に接続しているためです。
ハッピー状態を確認してください。各ノードのインターフェースは稼働しています。
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP WiFiNetwork wifi UP NODES Name Interface Type IPs 01ThreadNode wpan0 thread 02BorderRouter wpan0 thread wlan0 wifi 03WiFiNode wlan0 wifi
トポロジは次のようになります。
Happyネットワークを立ち上げる最後のステップは、各ノードの各インターフェースにIPアドレスを割り当てることです。ネットワークのIPプレフィックスを指定すると、Happyが自動的にIPアドレスを割り当てます。
スレッドプロトコルはIPv6を使用するため、スレッドネットワークにIPv6プレフィックスを追加します。
$ happy-network-address ThreadNetwork 2001:db8:1:2::
ハッピー状態を確認してください。各スレッドノードのスレッドインターフェイスには、次のIPアドレスがあります。
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP 2001:0db8:0001:0002/64 WiFiNetwork wifi UP NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64 02BorderRouter wpan0 thread 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64 wlan0 wifi 03WiFiNode wlan0 wifi
WiFiネットワークの場合、IPv4とIPv6の両方のプレフィックスを追加します。
$ happy-network-address WiFiNetwork 2001:db8:a:b:: $ happy-network-address WiFiNetwork 10.0.1.0
もう一度ハッピー状態を確認してください。すべてのインターフェースにはIPアドレスが割り当てられており、Wi-Fiインターフェースごとに2つあります。
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP 2001:0db8:0001:0002/64 WiFiNetwork wifi UP 2001:0db8:000a:000b/64 10.0.1/24 NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64 02BorderRouter wpan0 thread 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64 wlan0 wifi 10.0.1.2/24 2001:0db8:000a:000b:426c:38ff:fe90:01e6/64 03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64 10.0.1.3/24
更新されたトポロジは次のとおりです。
4.接続をテストします
今、私たちの幸せなネットワークが稼働していること、のテストその接続から他のノードに対してpingを実行してみましょう01ThreadNode
:
$ happy-ping 01ThreadNode 02BorderRouter [Ping] ping from 01ThreadNode to 02BorderRouter on address 10.0.1.2 -> 100% packet loss [Ping] ping from 01ThreadNode to 02BorderRouter on address 2001:0db8:0001:0002:a651:3eff:fe92:6dbc -> 0% packet loss [Ping] ping from 01ThreadNode to 02BorderRouter on address 2001:0db8:000a:000b:426c:38ff:fe90:01e6 -> 100% packet loss $ happy-ping 01ThreadNode 03WiFiNode [Ping] ping from 01ThreadNode to 03WiFiNode on address 2001:0db8:000a:000b:9aae:2bff:fe71:62fa -> 100% packet loss [Ping] ping from 01ThreadNode to 03WiFiNode on address 10.0.1.3 -> 100% packet loss
happy-ping
コマンドは、ターゲット・ノード上のすべてのインターフェイスのためのすべてのIPアドレスに対してpingを実行しようとします。スレッドはIPv6のみを使用するため、IPv4アドレスは無視できます。
唯一の1つのIPv6 pingが成功しました。注:上の1 02BorderRouter
のwpan0
アドレスのみであるインターフェース、 01ThreadNode
直接到達することができます:
転送の間有効になっていないため、他のIPv6アドレスが失敗したwpan0
とwlan0
に02BorderRouter
。したがって、 01ThreadNode
ないアイデアがありません03WiFiNode
存在するのか、それに到達する方法。 Happyはシミュレートされたネットワークを立ち上げましたが、ノード間のすべてのルーティングと転送を有効にしているわけではありません。
ルートを追加する
HANを介してIPv6トラフィックをルーティングするには、各ネットワークの各ノードに両方向で適切なルートを追加します(したがって、pingは送信元ノードに戻る方法を認識します)。
ノードごとに、次のことを知っておく必要があります。
- 最寄りのネットワークゲートウェイで、この場合、
02BorderRouter
両方について - ターゲットネットワーク—ゲートウェイの後に行く場所
3ノードネットワークの場合、次のようになります。
ソースネットワークから | ターゲットネットワークへ | ゲートウェイ経由 |
| | |
| | |
これは、各ノードごとに個別に行うことができるhappy-node-route
が、それは各ネットワーク内のすべてのノードのためにそれを行うには簡単ですhappy-network-route
。
$ happy-network-route -a -i ThreadNetwork -t default -v 02BorderRouter -p 2001:db8:1:2::/64 $ happy-network-route -a -i WiFiNetwork -t default -v 02BorderRouter -p 2001:db8:a:b::/64
コマンドラインフラグの説明については、使用してhappy-network-route -h
。
happy-network-route
必要なコマンドは、各ノードのIPv4およびIPv6の転送をオンにします。これにより、トラフィックをノード内の1つのインターフェイスから別のインターフェイスにルーティングできます。
ここで、pingを再試行します。
$ happy-ping 01ThreadNode 02BorderRouter [Ping] ping from 01ThreadNode to 02BorderRouter on address 10.0.1.2 -> 100% packet loss [Ping] ping from 01ThreadNode to 02BorderRouter on address 2001:0db8:0001:0002:a651:3eff:fe92:6dbc -> 0% packet loss [Ping] ping from 01ThreadNode to 02BorderRouter on address 2001:0db8:000a:000b:426c:38ff:fe90:01e6 -> 0% packet loss
両方のIPv6pingが機能します。上の転送では、それが到達する方法を知っているwlan0
インターフェースを。 IPv6ルートと転送のみを構成したため(また、スレッドがIPv4で実行されないため)、IPv4pingは引き続き失敗します。
両側にネットワークルートを追加したので、ネットワーク間でpingを実行しましょう。
$ happy-ping 01ThreadNode 03WiFiNode [Ping] ping from 01ThreadNode to 03WiFiNode on address 2001:0db8:000a:000b:9aae:2bff:fe71:62fa -> 0% packet loss [Ping] ping from 01ThreadNode to 03WiFiNode on address 10.0.1.3 -> 100% packet loss
IPv6pingは期待どおりに機能します。これで、完全に機能するシミュレートされたIPv6HANができました。
すべてを接続するためのより安全で信頼性の高い方法を有効にするために、HANの上にWeaveを追加しましょう。
5.織りを追加します
Weaveは、Nest製品に安全で信頼性の高い通信バックボーンを提供するネットワークアプリケーション層です。 WeaveのオープンソースバージョンであるOpenWeaveを使用してWeave機能を追加できます。
Weaveの実装は「ファブリック」と呼ばれます。ウィーブファブリックは、すべてのHANノード、Nestサービス、およびHANに参加しているすべてのモバイルデバイスで構成されるネットワークです。 HANの上に配置され、基盤となるさまざまなネットワークリンクテクノロジー(スレッドやWi-Fiなど)間でのルーティングが容易になります。
使用して、あなたのHANの織り生地を作成しfab1
ファブリックIDとして、そして織りのためのすべてのノードを設定します。
$ weave-fabric-add fab1 $ weave-node-configure
Weaveが構成されたので、Happy状態を確認します。
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP 2001:0db8:0001:0002/64 WiFiNetwork wifi UP 2001:0db8:000a:000b/64 10.0.1/24 NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64 fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64 02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64 wlan0 wifi fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64 10.0.1.2/24 2001:0db8:000a:000b:426c:38ff:fe90:01e6/64 03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64 10.0.1.3/24 fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64
各ノードは、織りファブリックに追加された、各インターフェイスが始まる新しいIPv6アドレス有するfd00
。織りファブリックの詳細情報を取得するには、使用weave-state
コマンドを:
$ weave-state State Name: weave NODES Name Weave Node Id Pairing Code 01ThreadNode 69ca9502eb6911e7 8ZJB5Q 02BorderRouter 686af236eb6911e7 B5YV3P 03WiFiNode 69826e60eb6911e7 L3VT3A FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
更新されたトポロジは次のとおりです。Weave値は青色です。
織り生地
ウィーブ状態とハッピー状態には多くの新しい情報があります。以下からの生地でレッツ・スタートweave-state
:
FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
織り用途のIPv6プレフィックスfd00::/48
各ノードについて。このブロック内のアドレスは一意のローカルアドレスと呼ばれ、HANなどのプライベートネットワーク内で使用するように指定されています。これをFabricIDと組み合わせると、上記のWeaveグローバルプレフィックスが生成されます。
織りノード
Weaveファブリックの各ノードには、ペアリングコードとともに一意のノードIDが割り当てられます。
NODES Name Weave Node Id Pairing Code 01ThreadNode 69ca9502eb6911e7 8ZJB5Q 02BorderRouter 686af236eb6911e7 B5YV3P 03WiFiNode 69826e60eb6911e7 L3VT3A
ノードIDは、Weaveファブリック内のノードをグローバルに識別します。ペアリングコードは、ペアリングプロセス中に「ジョイナークレデンシャル」として使用され、通常、製品のQRコードと一緒に印刷されます。
たとえば、NestProtectまたはNestCamのQRコードを見ると、エントリキーと呼ばれることが多い6文字の文字列に気付くでしょう。これが織りペアリングコードです。
Weaveは、グローバルプレフィックス、ファブリックID、およびノードIDの組み合わせを使用して、ファブリック内の各ノードおよびインターフェイスにウィーブ固有のIPv6アドレスを作成します。
織りアドレス
ハッピートポロジの4つの新しいIPv6アドレスがあることに注意してください、すべての私たちの織りグローバルプレフィックスで始まるfd00:0000:fab1::/48
。
NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64 fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64 02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64 wlan0 wifi fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64 10.0.1.2/24 2001:0db8:000a:000b:426c:38ff:fe90:01e6/64 03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64 10.0.1.3/24 fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64
ウィーブプロトコルは、各ノードに割り当てられた標準のIPv6アドレスではなく、これらのアドレスを使用してウィーブファブリック全体で通信します。
織りネットワークゲートウェイ
スレッドネットワーク上のウィーブノードは、そのネットワークを終了する場所を知る必要があります。ウィーブネットワークゲートウェイ(通常はスレッドボーダールーター上)がこの機能を提供します。
サンプルトポロジでは、BorderRouterノードをWeaveネットワークゲートウェイとして指定しましょう。
$ weave-network-gateway ThreadNetwork 02BorderRouter
このコマンドは、織りファブリックサブネット(にすべてのスレッドノードからルートを追加fd:0:fab1::/48
を介して) BorderRouter
ノードのスレッド・インターフェース( wpan0
スレッドネットワークを越えて任意の織りノードに到達するために、各スレッドのノードを可能)、。これはと類似してhappy-network-route
織り生地のルートに、我々は以前に使用されるコマンドが、具体的な。
6.トポロジのメンテナンス
Happyを非常に強力なものにしているのは、シミュレートされたトポロジのすべてのセットアップと分解を簡単に管理できることです。
後で使用するためにHappyトポロジを保存します。
$ happy-state -s codelab.json
この場所あなたのルートに完全なトポロジを持つJSONファイル~/
フォルダ。 JSONファイルがで発見され、あなたの現在の幸せな状態のコピーである~/.happy_state.json
。
保存したら、現在のトポロジを削除します。
$ happy-state-delete
これは、すべてのネットワークの名前空間とで見つかった関連の設定を削除~/.happy-state.json
ファイルを。チェックhappy-state
とweave-state
空の構成を確認します:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes NODES Name Interface Type IPs $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code FABRIC Fabric Id Global Prefix
保存した構成を再ロードするには、次の2つのコマンドのいずれかを使用します。
-
happy-state-load
-織りのプラグインをサポートしていません。 -
weave-state-load
-サポート織りプラグイン
トポロジは織りが含まれている場合は、必ず使用weave-state-load
織りファブリックと関連する設定が適用されるようにコマンドを。
保存したHappyトポロジをリロードします。
$ weave-state-load codelab.json
すべての状態をチェックして、ロードが成功したことを確認します。
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP 2001:0db8:0001:0002/64 WiFiNetwork wifi UP 2001:0db8:000a:000b/64 10.0.1/24 NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:eef6:a0ff:feca:6697/64 fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64 02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64 2001:0db8:0001:0002:5e53:bbff:fe05:484b/64 wlan0 wifi 2001:0db8:000a:000b:2e61:fdff:fed9:4fbc/64 fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64 10.0.1.2/24 03WiFiNode wlan0 wifi fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64 10.0.1.3/24 2001:0db8:000a:000b:5e8e:c9ff:fed2:bdd1/64 $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code 01ThreadNode 69ca9502eb6911e7 8ZJB5Q 02BorderRouter 686af236eb6911e7 B5YV3P 03WiFiNode 69826e60eb6911e7 L3VT3A FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
Happyリポジトリには、シェルスクリプト形式とJSON形式の両方で多数の事前定義されたトポロジが提供されています。でそれらを探す~/happy/topologies
。
OpenWeaveには、テスト用に事前定義されたHappyトポロジも付属しています。でそれらを探す~/openweave-core/src/test-apps/happy/topologies/standalone
。
7.仕組み
Happyは、Linuxネットワーク名前空間を使用して複雑なトポロジをシミュレートします。通常、ネットワーク構成はLinuxOS全体に適用されます。ネットワーク名前空間を使用すると、ネットワーク構成を分割して、各名前空間に独自のインターフェイスとルーティングテーブルのセットを持たせることができます。
Happyの各ノードとネットワークはネットワーク名前空間であり、それらの間のリンクはネットワークインターフェイスです。
たとえば、トポロジを使用すると、次のようになります。
Happyがこのために作成した名前空間を見てみましょう。
$ ip netns list happy004 happy003 happy002 happy001 happy000
あなたがチェックした場合netns
ハッピー状態JSONファイルのセクションを、あなたはどのようなノードとネットワークの各名前空間の対応をするを見ることができます:
$ happy-state -j | grep "netns" -A 5 "netns": { "01ThreadNode": "000", "02BorderRouter": "001", "03WiFiNode": "002", "ThreadNetwork": "003", "WiFiNetwork": "004",
実行時ログ
ノードに発行されるコマンドは、各ノードの名前空間内から実行される基本的な端末コマンドです。これを確認する簡単な方法は、ハッピーランタイムログを有効にすることです。
2番目のターミナルウィンドウを開き、ログをオンにすると、ログはこのウィンドウで継続的に実行されます。
$ happy-state -l
最初のウィンドウに戻り、Happypingを実行します。
$ happy-ping 01ThreadNode 02BorderRouter
2番目のターミナルウィンドウで最新のログエントリを確認します。ログに次のような行が表示されます。
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ping6 -c 1 2001:0db8:0001:0002:5e53:bbff:fe05:484b
happy-ping
コマンドは、ハッピーが実行されている以外の何ものでもありませんping6
中にコマンドhappy000
名前空間( 01ThreadNode
)。
ノードを入力してください
使用happy-shell
ノード(ネットワークの名前空間)のいずれかにログインしているかのように非ハッピーコマンドを実行します:
$ happy-shell 01ThreadNode root@01ThreadNode:#
シミュレートされたデバイスは各名前空間内で実行され、Happyで指定されたネットワーク構成にのみアクセスできます。
ノードのインターフェース構成を確認してください。これはOS全体の構成とは異なり、Happy状態でリストされているものを反映している必要があります。
root@01ThreadNode:# ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:1 errors:0 dropped:0 overruns:0 frame:0 TX packets:1 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:152 (152.0 B) TX bytes:152 (152.0 B) wpan0 Link encap:Ethernet HWaddr ec:f6:a0:ca:66:97 inet6 addr: fd00:0:fab1:6:6bca:9502:eb69:11e7/64 Scope:Global inet6 addr: 2001:db8:1:2:eef6:a0ff:feca:6697/64 Scope:Global inet6 addr: fe80::eef6:a0ff:feca:6697/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:32 errors:0 dropped:0 overruns:0 frame:0 TX packets:26 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2832 (2.8 KB) TX bytes:2348 (2.3 KB)
使用exit
ノードの名前空間を残すために:
root@01ThreadNode:# exit
8.サービスに接続します
HappyがLinuxネットワーク名前空間をどのように使用するかを理解すると、シミュレートされたHappyネットワークをインターネットに接続し、シミュレートされたノード内からパブリックアドレスにアクセスできることに気付くかもしれません。これは、シミュレートされたデバイスを実際のサービス(Nest Service over Weaveなど)に接続する場合に役立ちます。
Weaveのサービスは、HANノードをデータモデルに接続し、リモートアクセスを提供し、インテリジェントコントローラーを実装して包括的なエコシステムを作成するクラウドベースのインフラストラクチャです。
このサービスは、Happyで2つの主要な方法で表すことができます。
- 独自のネットワーク名前空間でシミュレートされたサービスとして(ハッピーノード)
- インターネット上の実際のクラウドサービスとして
事前定義されたトポロジが提供されている~/happy/topologies
各サービスシナリオの例として。
Happyノードでシミュレートされたサービス
既存のHappyトポロジを削除します。
$ happy-state-delete
空の状態を確認してhappy-state
とweave-state
のコマンド。
アクセスポイント(AP)とサービスノードを使用して、事前定義されたトポロジをロードします。
$ weave-state-load ~/happy/topologies/thread_wifi_ap_service.json
Happy状態とWeave状態をチェックして、トポロジを確認します。このトポロジでは、 onhub
ながら、APでcloud
シミュレートされたサービスです。両方に接続されることに注意してくださいInternet
タイプのネットワークwan
:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes HomeThread thread UP 2001:0db8:0111:0001/64 HomeWiFi wifi UP 2001:0db8:0222:0002/64 10.0.1/24 Internet wan UP 192.168.100/24 NODES Name Interface Type IPs BorderRouter wpan0 thread 2001:0db8:0111:0001:f624:13ff:fe4a:6def/64 fd00:0000:fab1:0006:1ab4:3000:0000:0005/64 wlan0 wifi 10.0.1.2/24 fd00:0000:fab1:0001:1ab4:3000:0000:0005/64 2001:0db8:0222:0002:9e31:97ff:fe73:29f0/64 ThreadNode wpan0 thread 2001:0db8:0111:0001:c237:fbff:fecc:b082/64 fd00:0000:fab1:0006:1ab4:3000:0000:0009/64 cloud eth0 wan 192.168.100.3/24 onhub wlan0 wifi 10.0.1.3/24 2001:0db8:0222:0002:3266:20ff:fe98:6ee2/64 eth0 wan 192.168.100.2/24 $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code BorderRouter 18B4300000000005 AAA123 ThreadNode 18B4300000000009 AAA123 FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
織りトンネル
Weaveトンネルは、Weaveファブリックをサービスに接続します。これは、HANとサービス間でIPv6UDPメッセージを転送する安全なルートです。このトポロジでは、 BorderRouter
ノードは、織りネットワークゲートウェイ、HAN上のトンネルエンドポイントとして機能します。
織りトンネルを作成します。
$ weave-tunnel-start BorderRouter cloud
Happy状態を再確認してください。あなたは上の織りのIPv6アドレスを持つ新しいトンネルインターフェイス見るべきcloud
ノードを:
NODES Name Interface Type IPs cloud service-tun0 tun fd00:0000:fab1:0005:1ab4:3002:0000:0011/64 eth0 wan 192.168.100.3/24
これで、Weaveファブリック上のノードとサービスのWeaveグローバルプレフィックス間で正常にpingを実行できます。
$ happy-ping ThreadNode cloud [Ping] ping from ThreadNode to cloud on address fd00:0000:fab1:0005:1ab4:3002:0000:0011 -> 0% packet loss
インターネット上のリアルクラウドサービス
既存のHappyトポロジを削除します。
$ happy-state-delete
空の状態を確認してhappy-state
とweave-state
のコマンド。
アクセスポイント(AP)ノードを使用して事前定義されたトポロジをロードします。
$ weave-state-load ~/happy/topologies/thread_wifi_ap_internet.json
このトポロジでは、 onhub
APです。ハッピー状態を確認してください。それはせずに、以前のトポロジに似てInternet
のネットワークとcloud
ノード:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes HomeThread thread UP 2001:0db8:0111:0001/64 HomeWiFi wifi UP 2001:0db8:0222:0002/64 10.0.1/24 NODES Name Interface Type IPs BorderRouter wpan0 thread 2001:0db8:0111:0001:ca3f:71ff:fe53:1559/64 fd00:0000:fab1:0006:1ab4:3000:0000:0006/64 wlan0 wifi 2001:0db8:0222:0002:32e7:dfff:fee2:107a/64 fd00:0000:fab1:0001:1ab4:3000:0000:0006/64 10.0.1.2/24 ThreadNode wpan0 thread 2001:0db8:0111:0001:c2fb:97ff:fe04:64bd/64 fd00:0000:fab1:0006:1ab4:3000:0000:000a/64 onhub wlan0 wifi 10.0.1.3/24 2001:0db8:0222:0002:3a3c:8dff:fe38:999b/64 $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code BorderRouter 18B4300000000006 AAA123 ThreadNode 18B430000000000A AAA123 FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
各Happyノードはネットワーク名前空間であるため、デフォルトでパブリックインターネットから分割されます。 Happyノードに入り、パブリックインターネットアドレスにpingを実行して、これをテストします。私たちは、使用します8.8.8.8
、google.comのIPv4アドレスのいずれかを。
$ happy-shell onhub root@onhub:# ping -c2 8.8.8.8 connect: Network is unreachable
接続するにはonhub
インターネットにノードを、それは、Linux OSレベルの設定にそのインターフェイスにブリッジする必要があります。
ノードを終了します。
root@onhub:# exit
使用してインターネットに接続するためのインタフェースを決定しroute
コマンドを:
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.1.0 0.0.0.0 UG 0 0 0 em1
検索default
ルートを。これは、Linuxマシンのインターネット接続です。 Iface
列は、その接続に使用されているインタフェースを示します。上記の例では、それはだem1
。
使用happy-internet
お使いのデフォルトルートのためのインタフェースを使用して、ブリッジを設定します。ため--isp
フラグ番号を付けずに、インタフェース名を使用。この例では、それはだem
。デフォルトのインタフェースがある場合はeth1
、 --isp
フラグは次のようになりeth
。
$ happy-internet --node onhub --interface em1 --isp em --seed 249
そこには目に見える変化しないであろうhappy-state
出力が、 onhub
ノードはインターネット接続が必要です。ノードに戻って確認してみましょう。
$ happy-shell onhub root@onhub:# ping -c2 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=1.81 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=1.81 ms --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 1.814/1.816/1.819/0.042 ms
成功!
DNS
ハッピーノードにはDNS機能が組み込まれていません。 google.comにpingを実行しようとすると、失敗します。
root@onhub:# ping -c2 google.com ping: unknown host google.com
幸い、HappyはDNSのサポートを提供しています。ノードを終了し、LinuxマシンのDNSサーバーを見つけます。適切なデフォルトのインターフェースを使用してください。
root@onhub:# exit $ nmcli dev list iface em1 | grep domain_name_servers DHCP4.OPTION[13]: domain_name_servers = 172.16.255.1 172.16.255.153 172.16.255.53
でこれらのDNSアドレスを使用して、 happy-dns
:
$ happy-dns 172.16.255.1 172.16.255.153 172.16.255.53
今の中からgoogle.comにpingを実行してみてくださいonhub
ノード:
$ happy-shell onhub root@onhub:# ping -c2 google.com PING google.com (64.233.191.113) 56(84) bytes of data. 64 bytes from ja-in-f113.1e100.net (64.233.191.113): icmp_seq=1 ttl=46 time=36.9 ms 64 bytes from ja-in-f113.1e100.net (64.233.191.113): icmp_seq=2 ttl=46 time=37.0 ms --- google.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 36.978/36.995/37.013/0.193 ms
終了onhub
完了したら、ノードを:
root@onhub:# exit
織りトンネル
シミュレートされたサービスと同様に、HappyのシミュレートされたHANとサービスの間にWeaveトンネルを設定する必要があります。実際のクラウドサービスでは、トンネル設定でサービスのIPアドレスまたはURLを使用します。例えば:
$ weave-tunnel-start BorderRouter mycloud.service.com
9.クリーンアップ
Linuxネットワーク構成の問題を回避するために、Happyトポロジを使い終わったら、常にクリーンアップすることが重要です。
あなたは、トポロジ内のDNSのサポートを有効にした場合、でそのコマンドを再実行して削除-d
最初の(削除)フラグ。これは、ネットワーク構成が適切に更新されるように、Happyノードを削除する前に実行する必要があります。
$ happy-dns -d 172.16.255.1 172.16.255.153 172.16.255.53
次に、ハッピー状態を削除します。
$ happy-state-delete
場合によっては、状態の削除後に一部の状態ファイルが残ることがあります。あなたが問題に実行し、期待通りに幸せが動作しない場合は、との状態を削除happy-state-delete
し、その後、残りのクリーンアップを強制するには、次のコマンドを使用します。
$ ip netns | xargs -I {} sudo ip netns delete {} $ rm -rf ~/.*state.json $ rm -rf ~/.*state.json.lock
マシンは通常のネットワーク構成に戻るはずです。
10.おめでとうございます!
あなたは今知っています:
- Happyを使用して独自のIoTホームエリアネットワークをシミュレートする方法
- Happyトポロジをインターネットに接続する方法
- NestのオープンソースバージョンのWeaveであるOpenWeaveを介したWeaveの基本
次のステップ
このCodelabを基に、次の演習を試してください。
- 各スレッドおよびWi-Fiネットワークに複数のノードを持つより大きなトポロジを作成し、すべてのノード間の接続を確立します
- 経由してトポロジをロードするためにbashスクリプトを作成して
happy-state-load
やweave-state-load
- 以下のような他の幸せなコマンド、探検
happy-traceroute
とhappy-process-*
参考文献
チェックopenweave.ioの参照を含め、さまざまな: