FreeBSD mpd5でIPv6接続 (PPPoE) その2

前の記事の続き

接続状態の確認

% ifconfig -a
em0: flags=8843<up ,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=8209b<rxcsum ,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
    ether 00:1b:21:xx:xx:00
    inet6 fe80::xxxx:xxxx:xxxx:aaaa%em0 prefixlen 64 scopeid 0x1
    nd6 options=21<performnud ,AUTO_LINKLOCAL>
    media: Ethernet autoselect (1000baseT <full -duplex>)
    status: active
em1: flags=8843<up ,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1454
    options=8209b<rxcsum ,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
    ether 00:1b:21:??:??:01
    inet xxx.xxx.xxx.xxx netmask 0xfffffff8 broadcast xxx.xxx.xxx.xxx
    inet6 fe80::xxxx:xxxx:xxxx:bbbb%em1 prefixlen 64 scopeid 0x2
    inet6 240d:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:bbbb prefixlen 56
    nd6 options=23<performnud ,ACCEPT_RTADV,AUTO_LINKLOCAL>
    media: Ethernet autoselect (1000baseT <full -duplex>)
    status: active
lo0: flags=8049<up ,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=600003<rxcsum ,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
    inet6 ::1 prefixlen 128 
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
    inet 127.0.0.1 netmask 0xff000000
    nd6 options=21<performnud ,AUTO_LINKLOCAL>
ng0: flags=88d1<up ,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1454
    inet xxx.xxx.xxx.xxx --> yyy.yyy.yyy.yyy netmask 0xffffffff
    inet6 fe80::xxxx:xxxx:xxxx:bbbb%ng0 prefixlen 64 scopeid 0x5
    nd6 options=21<performnud ,AUTO_LINKLOCAL>
ng1: flags=88d1<up ,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1454
    inet6 fe80::xxxx:xxxx:xxxx:bbbb%ng1 prefixlen 64 scopeid 0x6
    nd6 options=21<performnud ,AUTO_LINKLOCAL>

ifconfig -aで見るとこんな感じ。
IPv6の見え方がちょっと変なんだよなぁ。LAN側のインターフェース(em1)にIPv6のアドレスが生えてそれがゲートウェイのIPv6アドレスみたいに見えるんだよね。でPPPoEのng1の方には対向ルーターのIPv6アドレスが表示されないから意味がわからんし接続できてるいのか出来ていないのかも解らない。LAN(em1)の方に240dで始まるipv6アドレスが生えてるからようやく接続できているのが解る。っていうか何でここに勝手に生えるの?RA?

サーバ用のISPでは割り当てられたIPv6アドレスはプレフィックス長64ビットだったけどSo-netは56ビットなのね。

と、いうことで、確認するときに大切なのはLAN用のNICの側にinet6 2***で始まるIPアドレスが生えてて最後にprefixlen 56とかprefixlen 64とかプレフィックス長が表示されていること。ここでプレフィクス長が正しく通知されていないということだとdhcp6cのpd周りの設定がおかしくてプレフィックスが移譲されてないと思われる。

So-netは上のようにプレフィックス長が56ビットになっているが、LANでは56ビットではなく64ビットにした方が何かと都合が良い(と思うよねたぶん)。そこで、dhcp6c.confで sla-len 0; に仮設定していたのを sla-len 8; でプレフィックス長に8ビット足して64ビットにする。
次回からのdhcp6cを実行でifconfigで見るとプレフィックス長の表示がprefixlen 64になる筈。(変わらないとおかしい)。
と、いうことで変更できるんだけど、ISPから割り当てられるプレフィックス長が変わることがあるかもなので注意。

mpd5のウェブ画面で確認

mpd5ではログ以外にウェブで接続状態の詳細を見ることができる。前の記事のmpd.confの設定ファイルのstartupにあるコメント付きの行から行頭の#を取ってmpd5を再起動すればウェブブラウザで接続状態を確認できる。上の例だとhttp://IPアドレス:8888/を開き、IDはadmin、パスワードはpasswordで表示できる。
ウェブでの表示はいろいろ試す時だけ有効にして運用フェーズに入ったら無効に戻す方が安全。

接続状態1
この例ではIPv4とIPv6の同時接続。左端のバンドル列がB1の行がIPv4、B2の行がIPv6。うちの環境では何故かIPv6アドレスはIP列に表示されない。青文字のリンクを開くと詳細。

接続状態2
各リンクそれぞれサマリでは表示されない詳細を表示できる。正直あまり役に立たないけど。

arpみたいなの(arpじゃないけど)を見たいならIPv6 neighbor discovery protocolで。

# ndp -a
Neighbor                       Linklayer Address  Netif Expire    S Flags
fe80::xxxx:xxxx:xxxx:xxxx%ng0  (incomplete)         ng0 permanent R 
fe80::yyyy:yyyy:yyyy:yyyy%ng1  (incomplete)         ng1 permanent R 
240d:xxxx:xxxx:xxxx::bbbb      uu:uu:uu:uu:uu:uu    em1 23h59m59s S 
240d:xxxx:xxxx:xxxx::aaaa      vv:vv:vv:vv:vv:vv    em1 permanent R 
fe80::yyyy:yyyy:yyyy:yyyy%em1  vv:vv:vv:vv:vv:vv    em1 permanent R 
fe80::xxxx:xxxx:xxxx:xxxx%em0  ww:ww:ww:ww:ww:ww    em0 permanent R

この例ではExpireに時間が入っている240d:xxxx:xxxx:xxxx::bbbbはLAN内の他のIPv6ホスト。
もちろん、ネットワーク参加済みのIPv6ホストしか表示されない筈なのでネットワークが出来ていないこの時点で他のホストがもう表示されているということは本来はない筈。

PINGを打ってみる。IPv6版のpingはping6。

# ping6 -c2 google.com
PING6(56=40+8+8 bytes) 240d:xxxx:xxxx:xxxx::aaaa --> 2404:6800:400a:806::200e
16 bytes from 2404:6800:400a:807::200e, icmp_seq=0 hlim=54 time=6.859 ms
16 bytes from 2404:6800:400a:807::200e, icmp_seq=1 hlim=54 time=6.770 ms

--- google.com ping6 statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 6.770/6.815/6.859/0.044 ms

もし、名前解決できないなら/etc/resolv.confにネームサーバを追加する。
というか、まだネームサーバを取得する部分は設定してないのでできない筈。
So-netは何故かIPv6用のネームサーバを公開してないので取り敢えず公開リゾルバを追加。So-netのネームサーバは後で取る。

1
2
3
4
nameserver 2001:4860:4860::8888  #google-public-dns-a.google.com
nameserver 2001:4860:4860::8844  #google-public-dns-b.google.com
nameserver 2620:0:ccc::2         #resolver1.ipv6-sandbox.opendns.com
nameserver 2620:0:ccd::2         #resolver2.ipv6-sandbox.opendns.com

/etc/resolv.confはファイルを上書き保存したらすぐに適用される。

続く