OpenR (Open Routing) ことはじめ


lxcで、擬似ノードを作成し、それらをopen/rでつないでみます。

**想定する構成**
A<=>FをAct/Stbyで接続することを想定しています。
書いてみたら、リング構成になってしまいました。

```
    +-<lk1>-(2)[B](1)-<lk2>-(2)[C](1)-<lk3>-+
   (1)                                     (2)
   [A]                                     [F]
   (2)                                     (1)
    +-<lk4>-(1)[D](2)-<lk5>-(1)[E](2)-<lk6>-+

[A]から[F]まで、ルートを通します。
lxc0 : メンテ用 (各lxcのeth0をつなぐ)
lk1-6: D-Plane

[x]...ノード (openr01..openr06)
(y)...ポート (port1, port2)
<z>...リンク (ブリッジで代用)


(90度右回転で書いています)

           [A]
           eth0: 10.0.3.0/24
           eth1: 192.168.111.1
           port1:192.168.221.1
           port2:192.168.224.2

[D]                     [B]
eth0: 10.0.3.0/24       eth0: 10.0.3.0/24 
eth1: 192.168.114.1     eth1: 192.168.112.1
port1:192.168.224.1     port1:192.168.222.1
port2:192.168.225.2     port2:192.168.221.2

[E]                     [C]
eth0: 10.0.3.0/24       eth0: 10.0.3.0/24 
eth1: 192.168.115.1     eth1: 192.168.113.1
port1:192.168.225.1     port1:192.168.223.1
port2:192.168.226.2     port2:192.168.222.2

           [F]
           eth0: 10.0.3.0/24
           eth1: 192.168.116.1
           port1:192.168.226.1
           port2:192.168.223.2

各eth1の下に、clientがぶら下がりますが、この図からは省略
```


#目次
- lxcのインストール
- マスターイメージの作成
    - open/rインストール
    - インターフェースの追加
- 展開
    - コンテナの複製
    - 相互接続
- openrをいじる
    - 起動
    - 設定
    - 確認
- ネットワークとしていじる
    - 確認 

#lxcのインストール
ますは、ノードを作っていきます。
lxcに詳しい方は、読み飛ばしても、構いません。

https://linuxcontainers.org/ja/lxc/getting-started/ に従って、lxcをインストールします。

```
$ sudo apt-get install lxc
$ sudo lxc-create -t download -n openr00 (ubuntu xenial amd64 を選択)
$ sudo lxc-start -n openr00
```

これで、コンテナが走り出します。

```
$ sudo lxc-ls -f
NAME    STATE   AUTOSTART GROUPS IPV4       IPV6 
openr00 RUNNING 0         -      10.0.3.243 -
```

#マスターイメージの作成
コンテナに入ります

```
$ sudo lxc-attach -n openr00
```

##open/rインストール
gitがいるので、ダウンロードします。

```
# apt-get install -y git
```

そして、open/rをgit cloneします。

```
# git clone https://github.com/facebook/openr
Cloning into 'openr'...
fatal: unable to access 'https://github.com/facebook/openr/': Problem with the SSL CA cert (path? access rights?)
```

と、思ったら、証明書エラーが出たので、しかたナシに、証明書の無効化。

```
# git config --global http.sslVerify false
```

無事に、cloneできたら、ビルドの開始。

```
(本家より抜粋)
// Step into `build` directory
cd build

// Install dependencies and openr
sudo bash ./build_openr.sh

// Run tests (some tests requires sudo privileges)
sudo make test
```

[本家](https://github.com/facebook/openr#build-steps)に書かれているとおり、たくさん、apt-getされます。しばし、待ちです。(40分かかりました)

```
# time bash ./build_openr.sh

          (略)

+ echo 'OpenR built and installed successfully'
OpenR built and installed successfully
+ exit 0

real	39m26.508s
user	24m22.076s
sys	2m25.412s
```

テストをしろ、というので、テストします。

```
# time make test
Running tests...
Total Test time (real) = 281.36 sec

real	4m41.376s
user	2m27.004s
sys	0m51.888s
```
そして、インストール

```
make install
# cd
# cd openr/openr/py
# python setup.py build
# python setup.py install
```

[本家](https://github.com/facebook/openr#installing-python-libraries)によると、これで、インストールは完了。breezeがインストールされた、とのことです。

```
# which breeze
/usr/local/bin/breeze
```

##インターフェースの追加
再び、lxcの操作に戻ります。知っている人は、読み飛ばしてください。

###bridgeの追加
母艦にリンクとなるブリッジを追加します。

```
$ sudo brctl addbr link1
$ sudo brctl addbr link2
$ sudo brctl addbr link3
$ sudo brctl addbr link4
$ sudo brctl addbr link5
$ sudo brctl addbr link6
$ brctl show
bridge name	bridge id		STP enabled	interfaces
link1		8000.000000000000	no		
link2		8000.000000000000	no		
link3		8000.000000000000	no		
link4		8000.000000000000	no		
link5		8000.000000000000	no		
link6		8000.000000000000	no		
lxcbr0		8000.00163e000000	no		vethOIK6AP
```

###インターフェースを追加
インターフェースの追加は、次をいじります。

```
$ sudo vi /var/lib/lxc/openr00/config
```

Network Configurationの下に、interfaceを追加していきます。
のちのち、prefixで広告するifnameを決めるので、ethやensはやめて、ここではportにしました。(上の図でもport)

```
lxc.network.type = veth
lxc.network.link = link1
lxc.network.ipv4 = 192.168.221.1/24
lxc.network.name = port1
lxc.network.flags = up

lxc.network.type = veth
lxc.network.link = link4
lxc.network.ipv4 = 192.168.224.2/24
lxc.network.name = port2
lxc.network.flags = up
```

乗り込んで、確認してみます。ノードAを想定した設定にしています。

```
root@openr00:~# ifconfig port1
port1     Link encap:Ethernet  HWaddr 00:16:3e:6c:07:90  
          inet addr:192.168.221.1  Bcast:192.168.221.255  Mask:255.255.255.0
          inet6 addr: fe80::216:3eff:fe6c:790/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2685 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2575 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:418649 (418.6 KB)  TX bytes:419565 (419.5 KB)
root@openr00:~# ifconfig port2
port2     Link encap:Ethernet  HWaddr 00:16:3e:d3:a4:9b  
          inet addr:192.168.224.2  Bcast:192.168.224.255  Mask:255.255.255.0
          inet6 addr: fe80::216:3eff:fed3:a49b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2602 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5433 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:370841 (370.8 KB)  TX bytes:845069 (845.0 KB)
```

想定どおりに進んだので、これをマスターに、ノードを作成していきます。

#展開
試験環境の展開、ということで、**展開**を進めます。

##コンテナの複製
ノードA, B, C, D, E, Fを作っていきます。

```
$ sudo lxc-clone -o openr00 -n openr-a
lxc-clone is deprecated in favor of lxc-copy.
Created container openr-a as copy of openr00

$ sudo lxc-clone -o openr00 -n openr-b
lxc-clone is deprecated in favor of lxc-copy.
Created container openr-b as copy of openr00

$ sudo lxc-clone -o openr00 -n openr-c
lxc-clone is deprecated in favor of lxc-copy.
Created container openr-c as copy of openr00

$ sudo lxc-clone -o openr00 -n openr-d
lxc-clone is deprecated in favor of lxc-copy.
Created container openr-d as copy of openr00

$ sudo lxc-clone -o openr00 -n openr-e
lxc-clone is deprecated in favor of lxc-copy.
Created container openr-e as copy of openr00

$ sudo lxc-clone -o openr00 -n openr-f
lxc-clone is deprecated in favor of lxc-copy.
Created container openr-f as copy of openr00

$ sudo lxc-ls -f
NAME    STATE   AUTOSTART GROUPS IPV4       IPV6 
openr-a STOPPED 0         -      -          -    
openr-b STOPPED 0         -      -          -    
openr-c STOPPED 0         -      -          -    
openr-d STOPPED 0         -      -          -    
openr-e STOPPED 0         -      -          -    
openr-f STOPPED 0         -      -          -    
openr00 STOPPED 0         -      -          -
```

先ほど作ったinterfaceの情報を更新します。

```
$ sudo vi /var/lib/lxc/openr-a/config
$ sudo vi /var/lib/lxc/openr-b/config
$ sudo vi /var/lib/lxc/openr-c/config
$ sudo vi /var/lib/lxc/openr-d/config
$ sudo vi /var/lib/lxc/openr-e/config
$ sudo vi /var/lib/lxc/openr-f/config
```

続いて、コンテナを起動

```
$ sudo lxc-start -n openr-a
$ sudo lxc-start -n openr-b
$ sudo lxc-start -n openr-c
$ sudo lxc-start -n openr-d
$ sudo lxc-start -n openr-e
$ sudo lxc-start -n openr-f
$ sudo lxc-ls -f
NAME    STATE   AUTOSTART GROUPS IPV4                                     IPV6 
openr-a RUNNING 0         -      10.0.3.243, 192.168.111.1, 192.168.221.1, 192.168.224.2 -                        
openr-b RUNNING 0         -      10.0.3.19, 192.168.112.1, 192.168.221.2, 192.168.222.1  -                        
openr-c RUNNING 0         -      10.0.3.98, 192.168.113.1, 192.168.222.2, 192.168.223.1  -                        
openr-d RUNNING 0         -      10.0.3.252, 192.168.114.1, 192.168.224.1, 192.168.225.2 -                        
openr-e RUNNING 0         -      10.0.3.109, 192.168.115.1, 192.168.225.1, 192.168.226.2 -                        
openr-f RUNNING 0         -      10.0.3.57, 192.168.116.1, 192.168.223.2, 192.168.226.1  -                        
openr00 STOPPED 0         -      -                                                       -                        
```

これで、ノードの設定は完了です。

##相互接続
続いて、ブリッジを起動して、それぞれのコンテナが期待通り接続されているか、確認します。

```
$ sudo ifconfig link1 up
$ sudo ifconfig link2 up
$ sudo ifconfig link3 up
$ sudo ifconfig link4 up
$ sudo ifconfig link5 up
$ sudo ifconfig link6 up
```

```
$ sudo lxc-attach -n openr-a
# ping 192.168.221.2
PING 192.168.221.2 (192.168.221.2) 56(84) bytes of data.
64 bytes from 192.168.221.2: icmp_seq=1 ttl=64 time=0.087 ms
64 bytes from 192.168.221.2: icmp_seq=2 ttl=64 time=0.071 ms
# ping 192.168.224.1
PING 192.168.224.1 (192.168.224.1) 56(84) bytes of data.
64 bytes from 192.168.224.1: icmp_seq=1 ttl=64 time=0.073 ms
64 bytes from 192.168.224.1: icmp_seq=2 ttl=64 time=0.054 ms
```

```
$ sudo lxc-attach -n openr-b
# ping 192.168.222.2
PING 192.168.222.2 (192.168.222.2) 56(84) bytes of data.
64 bytes from 192.168.222.2: icmp_seq=1 ttl=64 time=0.083 ms
64 bytes from 192.168.222.2: icmp_seq=2 ttl=64 time=0.070 ms
# ping 192.168.221.1
PING 192.168.221.1 (192.168.221.1) 56(84) bytes of data.
64 bytes from 192.168.221.1: icmp_seq=1 ttl=64 time=0.086 ms
64 bytes from 192.168.221.1: icmp_seq=2 ttl=64 time=0.070 ms
```

```
$ sudo lxc-attach -n openr-c
# ping 192.168.222.1
PING 192.168.222.1 (192.168.222.1) 56(84) bytes of data.
64 bytes from 192.168.222.1: icmp_seq=1 ttl=64 time=0.075 ms
64 bytes from 192.168.222.1: icmp_seq=2 ttl=64 time=0.063 ms
# ping 192.168.223.2
PING 192.168.223.2 (192.168.223.2) 56(84) bytes of data.
64 bytes from 192.168.223.2: icmp_seq=1 ttl=64 time=0.084 ms
64 bytes from 192.168.223.2: icmp_seq=2 ttl=64 time=0.071 ms
```

```
$ sudo lxc-attach -n openr-d
# ping 192.168.224.2
PING 192.168.224.2 (192.168.224.2) 56(84) bytes of data.
64 bytes from 192.168.224.2: icmp_seq=1 ttl=64 time=0.089 ms
64 bytes from 192.168.224.2: icmp_seq=2 ttl=64 time=0.068 ms
# ping 192.168.225.1
PING 192.168.225.1 (192.168.225.1) 56(84) bytes of data.
64 bytes from 192.168.225.1: icmp_seq=1 ttl=64 time=0.080 ms
64 bytes from 192.168.225.1: icmp_seq=2 ttl=64 time=0.066 ms
```

```
$ sudo lxc-attach -n openr-e
# ping 192.168.225.2
PING 192.168.225.2 (192.168.225.2) 56(84) bytes of data.
64 bytes from 192.168.225.2: icmp_seq=1 ttl=64 time=0.094 ms
64 bytes from 192.168.225.2: icmp_seq=2 ttl=64 time=0.066 ms
# ping 192.168.226.1
PING 192.168.226.1 (192.168.226.1) 56(84) bytes of data.
64 bytes from 192.168.226.1: icmp_seq=1 ttl=64 time=0.083 ms
64 bytes from 192.168.226.1: icmp_seq=2 ttl=64 time=0.063 ms
```

```
$ sudo lxc-attach -n openr-f
# ping 192.168.226.2
PING 192.168.226.2 (192.168.226.2) 56(84) bytes of data.
64 bytes from 192.168.226.2: icmp_seq=1 ttl=64 time=0.079 ms
64 bytes from 192.168.226.2: icmp_seq=2 ttl=64 time=0.063 ms
# ping 192.168.223.1
PING 192.168.223.1 (192.168.223.1) 56(84) bytes of data.
64 bytes from 192.168.223.1: icmp_seq=1 ttl=64 time=0.094 ms
64 bytes from 192.168.223.1: icmp_seq=2 ttl=64 time=0.071 ms
```

隣接関係の確認ができたので、OKとします。


#openrをいじる
2018/2月時点では、まだ、あまり情報がないみたい。
[githubの情報](https://github.com/facebook/openr)がほぼ全ての様子。
あとは、Facebookよろしく、[Facebookのコミュニティ](https://www.facebook.com/groups/openr/)があります。Facebook好きなひとは、[こちら](https://www.facebook.com/groups/openr/)も、どうぞ。

Qiitaでみると、次の先輩の姿があります。
[Facebook Open/Rの概要＆インストール方法の紹介](https://qiita.com/nishiy/items/b60c5078d46f2266c169)
[VagrantによるOpen/Rの簡易環境構築](https://qiita.com/ktsutsum/items/f7ab8f7613fd8f395ae9)

##起動
動かす手順を[Runbook.md](https://github.com/facebook/openr/blob/master/openr/docs/Runbook.md)を参考に、やってみます。

この手順は、Daemonで動かす方法も出ていますが、ここでは、コマンドラインで、起動します。そのため、1ノードあたり、2画面必要になります。

ノードAのコンソール1

```
root@openr-a:~# openr --ifname_prefix=port --node_name=node-a --enable_netlink_fib_handler=true --enable_v4=true --dryrun=false --domain=openr
openr[393]: Starting OpenR daemon.
```

ノードAのコンソール2

```
root@openr-a:~# breeze lm links --all

== Node Overload: NO  ==

Interface    Status    Overloaded    Metric Override    ifIndex    Addresses
-----------  --------  ------------  -----------------  ---------  ------------------------
port1        Up                                         24         192.168.221.1
                                                                   fe80::216:3eff:fe6c:790
port2        Up                                         26         192.168.224.2
                                                                   fe80::216:3eff:fed3:a49b
```

ノードBのコンソール1

```
root@openr-b:~# openr --ifname_prefix=port --node_name=node-b --enable_netlink_fib_handler=true --enable_v4=true --dryrun=false --domain=openr
openr[341]: Starting OpenR daemon.
```

ノードBのコンソール2

```
root@openr-b:~# breeze lm links --all

== Node Overload: NO  ==

Interface    Status    Overloaded    Metric Override    ifIndex    Addresses
-----------  --------  ------------  -----------------  ---------  ------------------------
port1        Up                                         32         192.168.222.1
                                                                   fe80::216:3eff:feec:5c65
port2        Up                                         34         192.168.221.2
                                                                   fe80::216:3eff:fef0:d60b
```

##設定
確認の前に、各ノードのprefixを広告します。
ここでは、次のネットワークを仮定します。
- node-A(192.168.111.1)の配下に192.168.111.0/24が存在する
- node-B(192.168.112.1)の配下に192.168.112.0/24が存在する
- node-F(192.168.116.6)の配下に192.168.116.0/24が存在する

これを、各ノードのprefixに設定します

```
openr-a# breeze prefixmgr advertise 192.168.111.0/24
```

```
openr-b# breeze prefixmgr advertise 192.168.112.0/24
```

```
openr-f# breeze prefixmgr advertise 192.168.116.0/24
```

この設定を確認します

```
# breeze kvstore prefixes --nodes=openr-a,openr-b,openr-f

> openr-a's prefixes
Prefix            Type
----------------  --------
192.168.111.0/24  LOOPBACK

> openr-b's prefixes
Prefix            Type
----------------  --------
192.168.112.0/24  LOOPBACK

> openr-f's prefixes
Prefix            Type
----------------  --------
192.168.116.0/24  LOOPBACK

```

##確認
この設定のもと、どのようにルートが割当たっているのか、routesコマンドで、確認できます。

```
# breeze decision routes --nodes=all

== Routes for openr-f  ==

> 192.168.111.0/24
via 192.168.223.1@port2 metric 9
via 192.168.226.2@port1 metric 6

> 192.168.112.0/24
via 192.168.223.1@port2 metric 6
via 192.168.226.2@port1 metric 9



== Routes for openr-d  ==

> 192.168.111.0/24
via 192.168.224.2@port1 metric 2

> 192.168.112.0/24
via 192.168.224.2@port1 metric 5

> 192.168.116.0/24
via 192.168.225.1@port2 metric 4



== Routes for openr-e  ==

> 192.168.111.0/24
via 192.168.225.2@port1 metric 4

> 192.168.112.0/24
via 192.168.225.2@port1 metric 7
via 192.168.226.1@port2 metric 8

> 192.168.116.0/24
via 192.168.226.1@port2 metric 2



== Routes for openr-b  ==

> 192.168.111.0/24
via 192.168.221.1@port2 metric 3

> 192.168.116.0/24
via 192.168.221.1@port2 metric 9
via 192.168.222.2@port1 metric 6



== Routes for openr-c  ==

> 192.168.111.0/24
via 192.168.222.1@port2 metric 6
via 192.168.223.2@port1 metric 9

> 192.168.112.0/24
via 192.168.222.1@port2 metric 3

> 192.168.116.0/24
via 192.168.223.2@port1 metric 3



== Routes for openr-a  ==

> 192.168.112.0/24
via 192.168.221.2@port1 metric 3

> 192.168.116.0/24
via 192.168.221.2@port1 metric 9
via 192.168.224.1@port2 metric 6

```

これは、すべてのリンクが上がっている状態です。
試しに、link3を切ってみます。すると、metricが変わって、ルートが変更されたことが分かります。切り替え時間(正しくは障害検出確定期間)は、デフォルトでは30秒のようです。

```
$ sudo ifconfig link3 down
```

```
# breeze decision routes --nodes=all

== Routes for openr-f  ==

> 192.168.111.0/24
via 192.168.226.2@port1 metric 6

> 192.168.112.0/24
via 192.168.226.2@port1 metric 9



== Routes for openr-d  ==

> 192.168.111.0/24
via 192.168.224.2@port1 metric 2

> 192.168.112.0/24
via 192.168.224.2@port1 metric 5

> 192.168.116.0/24
via 192.168.225.1@port2 metric 5



== Routes for openr-e  ==

> 192.168.111.0/24
via 192.168.225.2@port1 metric 4

> 192.168.112.0/24
via 192.168.225.2@port1 metric 7

> 192.168.116.0/24
via 192.168.226.1@port2 metric 3



== Routes for openr-b  ==

> 192.168.111.0/24
via 192.168.221.1@port2 metric 3

> 192.168.116.0/24
via 192.168.221.1@port2 metric 10



== Routes for openr-c  ==

> 192.168.111.0/24
via 192.168.222.1@port2 metric 6

> 192.168.112.0/24
via 192.168.222.1@port2 metric 3

> 192.168.116.0/24
via 192.168.222.1@port2 metric 13



== Routes for openr-a  ==

> 192.168.112.0/24
via 192.168.221.2@port1 metric 3

> 192.168.116.0/24
via 192.168.224.1@port2 metric 7

```

障害を復旧 (ifconfig link3 up) すると、もとに戻ります。
切り戻りは、即動のようです。


#ネットワークとしていじる
せっかくですので、node-A, node-B, node-Fにクライアントをぶら下げてみます。
先の手順同様、lxc-cloneで、母体を作って、展開します。

```
client1 (Under node-A)
  eth1: 192.168.111.11 (connect to node-A eth1, 192.168.111.1)

client2 (Under node-B)
  eth1: 192.168.112.22 (connect to node-B eth1, 192.168.112.1)

client6 (Under node-F)
  eth1: 192.168.116.66 (connect to node-F eth1, 192.168.116.1)
```

各eth1間は、先と同様、bridge接続しています。

##確認 
手始めに、pingしてみます。

```
root@client1:~# ping -c 3 192.168.112.22
PING 192.168.112.22 (192.168.112.22) 56(84) bytes of data.
64 bytes from 192.168.112.22: icmp_seq=1 ttl=62 time=0.153 ms
64 bytes from 192.168.112.22: icmp_seq=2 ttl=62 time=0.115 ms
64 bytes from 192.168.112.22: icmp_seq=3 ttl=62 time=0.117 ms

--- 192.168.112.22 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.115/0.128/0.153/0.019 ms
```

```
root@client1:~# ping -c 3 192.168.116.66
PING 192.168.116.66 (192.168.116.66) 56(84) bytes of data.
64 bytes from 192.168.116.66: icmp_seq=1 ttl=60 time=0.189 ms
64 bytes from 192.168.116.66: icmp_seq=2 ttl=60 time=0.143 ms
64 bytes from 192.168.116.66: icmp_seq=3 ttl=60 time=0.147 ms

--- 192.168.116.66 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.143/0.159/0.189/0.025 ms
```

client1から、client2とclient6にpingが届いている状態です。
先のroute情報 (breeze decision routes) から、次の事が分かっています。
- client1->client2は、port1を使う (metric 3)
- client1->client6は、port2を使う (metric 6)

試しに、client2にpingを打っている途中で、link1をdownさせてみます。
期待は、port2経由になるので、rttが遅くなることです。


```
root@client1:~# ping -c 10 192.168.112.22
PING 192.168.112.22 (192.168.112.22) 56(84) bytes of data.
64 bytes from 192.168.112.22: icmp_seq=1 ttl=62 time=0.164 ms
64 bytes from 192.168.112.22: icmp_seq=2 ttl=62 time=0.115 ms
64 bytes from 192.168.112.22: icmp_seq=3 ttl=62 time=0.112 ms
64 bytes from 192.168.112.22: icmp_seq=4 ttl=62 time=0.113 ms
64 bytes from 192.168.112.22: icmp_seq=5 ttl=62 time=0.118 ms
64 bytes from 192.168.112.22: icmp_seq=6 ttl=62 time=0.122 ms
64 bytes from 192.168.112.22: icmp_seq=7 ttl=62 time=0.114 ms
64 bytes from 192.168.112.22: icmp_seq=8 ttl=62 time=0.118 ms
64 bytes from 192.168.112.22: icmp_seq=9 ttl=62 time=0.115 ms
64 bytes from 192.168.112.22: icmp_seq=10 ttl=62 time=0.117 ms

--- 192.168.112.22 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 8997ms
rtt min/avg/max/mdev = 0.112/0.120/0.164/0.020 ms
```

切れる前は、大体0.120msで、応答しておりました。

```
$ sudo ifconfig link1 down
```

30秒は切れています

```
--- 192.168.112.22 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 8997ms
rtt min/avg/max/mdev = 0.112/0.120/0.164/0.020 ms
root@client1:~# ping -c 10 192.168.112.22
PING 192.168.112.22 (192.168.112.22) 56(84) bytes of data.
From 192.168.111.1 icmp_seq=9 Destination Host Unreachable
From 192.168.111.1 icmp_seq=10 Destination Host Unreachable

--- 192.168.112.22 ping statistics ---
10 packets transmitted, 0 received, +2 errors, 100% packet loss, time 9071ms
```

切り替わったところで、再度ping

```
root@client1:~# ping -c 10 192.168.112.22
PING 192.168.112.22 (192.168.112.22) 56(84) bytes of data.
64 bytes from 192.168.112.22: icmp_seq=1 ttl=58 time=0.249 ms
64 bytes from 192.168.112.22: icmp_seq=2 ttl=58 time=0.186 ms
64 bytes from 192.168.112.22: icmp_seq=3 ttl=58 time=0.190 ms
64 bytes from 192.168.112.22: icmp_seq=4 ttl=58 time=0.192 ms
64 bytes from 192.168.112.22: icmp_seq=5 ttl=58 time=0.205 ms
64 bytes from 192.168.112.22: icmp_seq=6 ttl=58 time=0.206 ms
64 bytes from 192.168.112.22: icmp_seq=7 ttl=58 time=0.206 ms
64 bytes from 192.168.112.22: icmp_seq=8 ttl=58 time=0.186 ms
64 bytes from 192.168.112.22: icmp_seq=9 ttl=58 time=0.198 ms
64 bytes from 192.168.112.22: icmp_seq=10 ttl=58 time=0.199 ms

--- 192.168.112.22 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 8997ms
rtt min/avg/max/mdev = 0.186/0.201/0.249/0.024 ms
```

こちらの箱庭環境では、0.201msになりましたので、先の0.120msに比べて、大回りしていると、推測できます。

```
$ sudo ifconfig link1 up
```

元に戻すと、前の値(0.120ms)と似た値(0.123ms)に戻ります

```
root@client1:~# ping -c 10 192.168.112.22
PING 192.168.112.22 (192.168.112.22) 56(84) bytes of data.
64 bytes from 192.168.112.22: icmp_seq=1 ttl=62 time=0.200 ms
64 bytes from 192.168.112.22: icmp_seq=2 ttl=62 time=0.111 ms
64 bytes from 192.168.112.22: icmp_seq=3 ttl=62 time=0.121 ms
64 bytes from 192.168.112.22: icmp_seq=4 ttl=62 time=0.111 ms
64 bytes from 192.168.112.22: icmp_seq=5 ttl=62 time=0.116 ms
64 bytes from 192.168.112.22: icmp_seq=6 ttl=62 time=0.118 ms
64 bytes from 192.168.112.22: icmp_seq=7 ttl=62 time=0.112 ms
64 bytes from 192.168.112.22: icmp_seq=8 ttl=62 time=0.120 ms
64 bytes from 192.168.112.22: icmp_seq=9 ttl=62 time=0.118 ms
64 bytes from 192.168.112.22: icmp_seq=10 ttl=62 time=0.111 ms

--- 192.168.112.22 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 8999ms
rtt min/avg/max/mdev = 0.111/0.123/0.200/0.029 ms
```

ということで、障害があれば、切り替わることもわかりました。
今回のトライは、ここまでです。

おしまい