/
カテゴリー

概要

GREでtunnelを作ったのだが、pingに応答しない…

前提条件

再展開する場合、すべてのVMが立ち上がるまで5分以上かかります。

  • 参加者が触れられる機器はVyOSのみ
  • VyOS以外の機器はどれもicmp replyを返す設定になっている。

初期状態

VyOSから $ ping 192.168.15.130 をしても応答がない。

$ show interfacesを実行すると tun0でtunnel interfaceがあるのがわかる。

tun0の設定は以下の通りである。
対向機器のアドレス等は設定を確認してほしい。

 tunnel tun0 {
     address 192.168.60.1/31
     description >_<
     encapsulation ip6gre
     local-ip fe80::2
     remote-ip fe80::1
     source-interface eth0
 }

終了状態

・何が原因なのかを調査して報告してほしい。
・192.168.15.130にpingが疎通できるようにしてほしい。

参考

5FHayuVB7BwMByLesYXCTRH5.png

解説

1. 問題を特定する

今回はeth0のパケットをキャプチャをすることにより、問題を発見することができます。
例として、以下のコマンドを実行した場合の実行結果です。

※画像内では、使われているアドレスが出題時と異なります。

tcpdump -i eth0 ip6 -vv
image.png

気を付けてよく見ると、受信しているパケットと送信しているパケットに違いがあります。

VyOSから送信しているパケットには、DSTOPT(Destination Options Header)というものがGREパケットの直前についているようです。

VyOSから送信したicmpパケットに応答がないということを踏まえると、
Juniperのルータ(vSRX)は DSTOPT がついたGREパケットを解釈してくれていない可能性があります。

具体的に、DSTOPTの中身はTunnel Encapsulation Limitというものであるようです。

2. Pingを疎通させる

VyOSでは、以下のコマンドでパラメータを変更することができます。
set interfaces tunnel tun0 parameters ipv6 encaplimit 0-255

しかし、残念なことに問題を解決するためには encaplimit 255 でもなく encaplimit 0でもなく encaplimit none です。

VyOSでは 0-255の値のみ受け付けるため、何らかの方法で変更する必要があります。

ひとつのpingを疎通させる方法として、起動時に自動実行してくれるスクリプトを置く場所があるので、そこにipコマンドを使って設定するスクリプトを書くことにより疎通ができるようになります。

#/config/scripts/vyos-postconfig-bootup.script
ip -6 tunnel del tun0
ip -6 tunnel add tun0 mode ip6gre remote fe80::1 local fe80::2 dev eth0 encaplimit none
ip address add 192.168.60.1/31 dev tun0
ip link set tun0 up

その他の解法として、systemd serviceに登録する方法が考えられます。

しかし、VyOSのイメージをアップデートすると serviceファイルが消されてしまうことには注意してください。

採点基準

  1. 原因の特定,明確に原因が書かれているか. (60%)
  2. pingが疎通するか(40%)

講評

1. 解答

Encapsulation Limit, DSTOPTが回答に含まれていたチームは2チームでした。

難易度的には難しかったようです。

2. 質問

fe80::1にpingを送っても、応答しない という質問が複数チームから質問によせられました。

これは、パケットを出すinterfaceがloopback interfaceだったためだと思われます。
pingコマンドを打つ際に、interfaceを指定する必要があります。
何も指定しない場合,loopbackからパケットを出します.

From fe80::200:ff:fe00:0%lo: icmp_seq=1 Destination unreachable: No route

3. 関連情報

根本的な問題が、rfc7872に記述されているのを最近知ったため共有したいと思います。

IPv6 Extension Headersを含むパケットをdropするルータが存在しているよというものです。

                Observations on the Dropping of Packets
             with IPv6 Extension Headers in the Real World

今回解説で書かれているDestination Options HeaderIPv6 Extension Headersに含まれており、rfc2460に書かれています。

rfc2460

https://tools.ietf.org/html/rfc7872

https://tools.ietf.org/html/rfc2460

参考書籍

プロフェッショナルIPv6

https://www.geekpage.jp/blog/?id=2018-7-4-1

本屋でパラパラしていたところ、rfc7872のことを偶然見つけ感動しました。

本当に「すごいIPv6本」です!

無料版pdfでは、114ページ目に書かれています。

以上、ありがとうございました!