tweet:2021:0530_01
文書の過去の版を表示しています。
FreeBSD EtherIP v6
FreeBSD 12-RELEASE を利用して以下の環境を構築したところうまくいかなかった。
Bridge0 -- gif0 -- em0 -- (network) -- em0 -- gif0 -- Bridge0 Node A FreeBSD 12 ->| |<- FreeBSD 12 Node B
なお、試験環境は、VMware上で構築している。
- NodeAで設定したのは以下の通り
ifconfig em0 10.0.0.1/24 route add default 10.0.0.2 ifconfig gif0 create ifconfig gif0 tunnel inet 10.0.0.1 10.0.0.2 ifconfig gif0 inet 172.16.0.1/24 route add -net 172.16.1.0/24 -iface gif0 ifconfig bridge0 create ifconfig bridge0 addm gif0 -stf gif0
- NodeBで設定したのは以下の通り
ifconfig em0 10.0.0.2/24 route add default 10.0.0.1 ifconfig gif0 create ifconfig gif0 tunnel inet 10.0.0.2 10.0.0.1 ifconfig gif0 inet 172.16.1.1/24 route add -net 172.16.0.0/24 -iface gif0 ifconfig bridge0 create ifconfig bridge0 addm gif0 -stf gif0
以上のように設定したところ、通信ができなかった。(NodeAでping 172.16.1.1を実行した)
tcpdumpでgif0の通信内容を見る(tcpdump -ni gif0
) と、AF Unknown (18), length 46:
が表示される。また、この時にem0のtcpdumpを見ると、IP 10.0.0.1 > 10.0.0.2: ip-proto-97 86
のように、Packetは出て行っていますが、IPのProtocol番号97で通信しているようですが、pingは届かない。(parameter errorが出る)
この問題は、IP AddressをIPv4からIPv6に置き換えても変わらなかった。
問題を切り分けようと、bridge I/Fを削除すると、問題なくICMPが届くところを見ると、gifでの通信は正常にできていると考えられる。
とすると、FreeBSDのbridge deviceがEtherIP関連でものすごく変なことをしているとしか考えられない…
と思って、ifconfig bridge0 deletem gif0
をNodeA/NodeBの両方で実行すると、問題なく通信できるようになる。
よく見ると、
- bridge0にgif0が所属していない時は、いわゆるIPv4/IPv6パケットが流れた
- bridge0にgif0が所属している時(addmした時)は、protocol number 97(EtherIP)の通信のように見える (tcpdumpのBinaryを解析する根性はなかった)。
FreeBSD 9系列では動いているという報告はあるのだが、それもどこまで信用すれば…
さて、どうすれば解決できることやら…
tweet/2021/0530_01.1622314735.txt.gz · 最終更新: 2021/05/30 03:58 by seirios