転載・引用について

ユーザ用ツール

サイト用ツール


tweet:2021:0530_01

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

tweet:2021:0530_01 [2021/06/24 10:25] (現在)
行 1: 行 1:
 +====== FreeBSD EtherIP でトラブル(未解決) ======
  
 +FreeBSD 12-RELEASE を利用して以下の環境を構築したところうまくいかなかった。
 +
 +以下は、症状を再現するための必要設定のみ記載している。
 +
 +試験環境: ''FreeBSD rt12 12.2-RELEASE-p6 FreeBSD 12.2-RELEASE-p6 GENERIC  amd64''
 +基盤:VMware 5.5 及び、XCP-ng 8.2.0
 +
 +<code>
 +Bridge0 -- gif0 -- em0 -- (network) -- em0 -- gif0 -- Bridge0
 +Node A   FreeBSD 12 ->              |<- FreeBSD 12   Node B
 +</code>
 +
 +なお、試験環境は、VMware上で構築している。また、自明だと思うが、kernel側でv4 forwarding/v6 forwardingを1にして、Routerモードにしてある
 +
 +  * NodeAで設定したのは以下の通り
 +    * <code>
 +ifconfig em0 10.0.0.1/24
 +ifconfig gif0 create
 +ifconfig gif0 mtu 1500 # 記述ミス。追記
 +ifconfig gif0 tunnel inet 10.0.0.1 10.0.0.2
 +ifconfig gif0 inet 172.16.0.1/24 alias
 +route add -net 172.16.1.0/24 -iface gif0
 +ifconfig bridge0 create
 +ifconfig bridge0 mtu 1500 # 記述ミス。追記
 +ifconfig bridge0 addm gif0 -stp gif0
 +</code>
 +
 +  * NodeBで設定したのは以下の通り
 +    * <code>
 +ifconfig em0 10.0.0.2/24
 +ifconfig gif0 create
 +ifconfig gif0 mtu 1500 # 記述ミス。追記
 +ifconfig gif0 tunnel inet 10.0.0.2 10.0.0.1
 +ifconfig gif0 inet 172.16.1.1/24 alias
 +route add -net 172.16.0.0/24 -iface gif0
 +ifconfig bridge0 create
 +ifconfig bridge0 mtu 1500 # 記述ミス。追記
 +ifconfig bridge0 addm gif0 -stp gif0
 +</code>
 +
 +以上のように設定したところ、通信ができなかった。(NodeAでping 172.16.1.1を実行した)
 +
 +tcpdumpでgif0の通信内容を見る(''tcpdump -ni gif0'') と、''AF Unknown (18), length 46:''が表示される。また、この時に''tcpdump -ni em0''を見ると、''IP 10.0.0.1 > 10.0.0.2:  ip-proto-97 86'' のように、Packetは出て行っており、IPのProtocol番号97で通信しているようだが、pingは届かない。(parameter errorが出る)
 +
 +この問題は、IP AddressをIPv4からIPv6に置き換えても変わらなかった
 +
 +<WRAP box>
 +**追記(記載忘れ。20210530)**
 +  * いくつかのWeb Pageに、sysctlでkernelパラメータをいじるという記事があるので、実行したが変化なし
 +    * <code>
 +sysctl net.link.bridge.ipfw=0
 +sysctl net.link.bridge.pfil_bridge=0
 +sysctl net.link.bridge.pfil_member=0
 +</code>
 +  * bridge0 に物理I/Fを追加してみたが、これも効果なし
 +    * <code>
 +ifconfig bridge0 addm em1 -stf em1
 +</code>
 +</WRAP>
 +
 +問題を切り分けようと、bridge I/Fを削除すると、問題なくICMPが届くところを見ると、gifでの通信は正常にできていると考えられる。
 +
 +とすると、FreeBSDのbridge deviceがEtherIP関連でものすごく変なことをしているとしか考えられない...
 +と思って、''ifconfig bridge0 deletem gif0'' をNodeA/NodeBの両方で実行すると、問題なく通信できるようになる。
 +
 +よく見る(症状1)と、
 +  - bridge0にgif0が所属していない時は、gif経由でいわゆるIPv4/IPv6パケットが流れた
 +  - bridge0にgif0が所属している時(addmした時)は、protocol number 97(EtherIP/on __em0__)/(parameter error/on __gif0__)の通信のように見える (tcpdumpのBinaryを解析する根性はなかった)。
 +
 +<WRAP box>
 +** 追記(20210530) **
 +
 +以前、佐藤先生から、中を解析するには、Protocol number=97を追いかけるしかない、というお話をいただいている。
 +
 +問題は、同一のFreeBSD同士でのgif+bridgeを用いたEtherIP通信が、IPv4でもIPv6でも失敗するところ。なお、NECのIX2000シリーズのEtherIPと繋ごうとしてもつなげないので、流石にFreeBSD側のBUGと考えるしかないが、問題はそのBUGが bridge(if_bridge.c) にあるのか gif(if_gif.c)にあるのかわからない...
 +</WRAP>
 +
 +なお、いくつか試験するにあたって、
 +  - gifのみにIP Address(172.16.0.1/172.16.1.1)を割り当てた場合
 +  - bridgeのみにIP Address(172.16.0.1/172.16.0.2)を割り当てた場合 (BridgeはBridgeをDirectに繋いでいるので、同一Segmentである必要がある)
 +  - lo9を作成してそこのみにIP Address(172.16.0.1/172.16.1.1)を割り当てた場合
 +の3パターンを試験したが、全て、上記の症状1が観測された。
 +
 +FreeBSD 9系列では動いているという報告はあるのだが、それもどこまで信用すれば...(いまさらFreeBSD 9-RELEASEを作る気にならなかった)
 +そして、FreeBSD 13で動くかわからないしなぁ。
 +
 +なんで俺はこんなに罠にハマるんだろう... しかも、なんで6時間もDebugにはまったんだろう... さて、どうすれば解決できることやら...
tweet/2021/0530_01.txt · 最終更新: 2021/06/24 10:25 (外部編集)