ほっしーの技術ネタ備忘録

技術ネタの備忘録です。基本的に私が忘れないためのものです。他の人の役にも立つといいなぁ。

さくらVPSのIPv6がなんか変

ネイティブでIPv6対応してから結構経ちますが、
なんかパケットが届いたり届かなかかったり変な感じ。


やっとまとまった時間が取れたので調べてみました。
たぶん本質的な問題はこれ。

ソースアドレスがリンクローカルアドレスだと、ルータへの NS に対して NA が帰ってこない

リンクローカルアドレスの場合


11:18:14.984159 IP6 fe80::xxxx:xxxx:xxxx:xxxx > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32
11:18:16.934355 IP6 fe80::xxxx:xxxx:xxxx:xxxx > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32
11:18:17.958019 IP6 fe80::xxxx:xxxx:xxxx:xxxx > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32

グローバルアドレスの場合


11:32:46.224159 IP6 xxx.xxx.xxx.xxx.v6.sakura.ne.jp > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32
11:32:46.231016 IP6 2001:e42:102:1109::1 > xxx.xxx.xxx.xxx.v6.sakura.ne.jp: ICMP6, neighbor advertisement, tgt is fe80::1, length 32

えー。そんなぁ……

回避策1

とりあえずソースアドレスをグローバルに固定してしまう方向で逃げる。


リンクローカルアドレスを削除してみる。


$ sudo ifconfig vtnet0 inet6 fe80::xxxx delete

これだと起動時に毎回コマンドをたたく必要があるので、ちょっとおいしくない。

回避策2

リンクローカルアドレスを deprecated に指定して、ソースアドレス選択から除外する。


/etc/sysctl.conf に以下の行を追加。


net.inet6.ip6.use_deprecated=0

/etc/rc.conf に以下の行を追加。


ifconfig_vtnet0_alias0="inet6 fe80::xxxx:xxxx:xxxx:xxxx deprecated"

とりあえずこれで様子を見てみることに。

そもそも論

なんでリンクローカルアドレスだと NA 帰ってこないの?