Happy andWeave入門

1.はじめに

ハッピーは、シミュレートされたネットワークトポロジの軽量オーケストレーションのための巣のラボで作成されたツールです。 Happyは、IoTホームエリアネットワークの開発とテストに役立ちます。

Happyを使用すると、次のことができます。

  • IoTデバイスハードウェアを使用せずに、単一のLinux開発マシンでネットワークプロトコルやその他の分散実行プログラムをテストします
  • ネットワーク全体で自動機能テストを実行する
  • 同じシステムで複数の同時並列ネットワークを実行して、テストスループットを向上させます

このコードラボでは、あなたは幸せ、などの基本から始めるために方法を学びます織りのIoTデバイス用。あなたが使用します織り実装ですOpenWeave 、巣が発表したオープンソース版。

f6996428fb06dede.png

あなたが学ぶこと

  • 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ノードトポロジを作成しましょう。

a3295ee87fbd9764.png

このトポロジは、単純なホームエリアネットワーク(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両方に追加されたThreadNetworkWiFiNetwork 。これは、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

トポロジは次のようになります。

2d054e6c4e54089c.png

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

更新されたトポロジは次のとおりです。

84eecd23871618ca.png

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 02BorderRouterwpan0アドレスのみであるインターフェース、 01ThreadNode直接到達することができます:

5447bcbdf7d539df.png

転送の間有効になっていないため、他のIPv6アドレスが失敗したwpan0wlan002BorderRouter 。したがって、 01ThreadNodeないアイデアがありません03WiFiNode存在するのか、それに到達する方法。 Happyはシミュレートされたネットワークを立ち上げましたが、ノード間のすべてのルーティングと転送を有効にしているわけではありません。

ルートを追加する

HANを介してIPv6トラフィックをルーティングするには、各ネットワークの各ノードに両方向で適切なルートを追加します(したがって、pingは送信元ノードに戻る方法を認識します)。

ノードごとに、次のことを知っておく必要があります。

  • 最寄りのネットワークゲートウェイで、この場合、 02BorderRouter両方について
  • ターゲットネットワーク—ゲートウェイの後に行く場所

3ノードネットワークの場合、次のようになります。

ソースネットワークから

ターゲットネットワークへ

ゲートウェイ経由

ThreadNetwork

WiFiNetwork

02BorderRouter wlan0 2001:db8:1:2::/64 prefix

WiFiNetwork

ThreadNetwork

02BorderRouter wpan0 2001:db8:a:b::/64 prefix

これは、各ノードごとに個別に行うことができる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ができました。

5bb53be0280b3320.png

すべてを接続するためのより安全で信頼性の高い方法を有効にするために、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値は青色です。

ce3fa9082408355b.png

織り生地

ウィーブ状態とハッピー状態には多くの新しい情報があります。以下からの生地でレッツ・スタート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文字の文字列に気付くでしょう。これが織りペアリングコードです。

e7c6fa3e24d61d1b.png

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-stateweave-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の各ノードとネットワークはネットワーク名前空間であり、それらの間のリンクはネットワークインターフェイスです。

たとえば、トポロジを使用すると、次のようになります。

7d6654c2e4907f2a.png

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",

49cfdce6ff9dd745.png

実行時ログ

ノードに発行されるコマンドは、各ノードの名前空間内から実行される基本的な端末コマンドです。これを確認する簡単な方法は、ハッピーランタイムログを有効にすることです。

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-stateweave-stateのコマンド。

アクセスポイント(AP)とサービスノードを使用して、事前定義されたトポロジをロードします。

$ weave-state-load ~/happy/topologies/thread_wifi_ap_service.json

6d04cbfcc84038e2.png

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

c5ffca09d7cd3208.png

これで、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-stateweave-stateのコマンド。

アクセスポイント(AP)ノードを使用して事前定義されたトポロジをロードします。

$ weave-state-load ~/happy/topologies/thread_wifi_ap_internet.json

c75127417ef3833a.png

このトポロジでは、 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

成功!

c4d411ab1734131.png

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

3ed2c3c0df67f4d2.png

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-loadweave-state-load
  • 以下のような他の幸せなコマンド、探検happy-traceroutehappy-process-*

参考文献

チェックopenweave.ioの参照を含め、さまざまな:

f6996428fb06dede.png