IPv6でPlug and Playを使おう!

前提条件はIPv6ノードがネットワークに接続されていることです。このサイトの情報は以下の環境で動作確認を行いました。

ルータ
RTA52i WS-ONE 2001/05/15版
クライアント
FreeBSD 4.3-RELEASE
NetBSD 1.5.2

  1. RTA52i WS-ONE 2001/05/15版

    最初に、ルータの設定を行います、まず、現在のIPv6アドレスの状態を確認します。

    # show ipv6 address
    LAN1 scope-id 1 [up]
     Received:    11 packets 1112 octets
     Transmitted: 11 packets 1104 octets
    
     link-local   fe80::2a0:deff:fe09:352a/64
     link-local   ff02::1/64
     link-local   ff02::2/64
     link-local   ff02::1:ff09:352a/64
    
    PP[01] scope-id 2 [down]
     Received:    0 packet 0 octet
     Transmitted: 0 packet 0 octet
    
     link-local   ff02::1/64
     link-local   ff02::2/64
    
    # 
    

    次に、LAN1インターフェースにIPv6アドレスを設定します。この例では、LAN1インターフェースにグローバルアドレスの3ffe:5ff:100:aa01::1を設定します。

    # ipv6 lan address 3ffe:5ff:100:aa01::1
    # show ipv6 address
    LAN1 scope-id 1 [up]
     Received:    63 packets 4856 octets
     Transmitted: 48 packets 3960 octets
    
     global       3ffe:5ff:100:aa01::1/64
     link-local   fe80::2a0:deff:fe09:352a/64
     link-local   ff02::1/64
     link-local   ff02::2/64
     link-local   ff02::1:ff00:1/64
     link-local   ff02::1:ff09:352a/64
    
    PP[01] scope-id 2 [down]
     Received:    0 packet 0 octet
     Transmitted: 0 packet 0 octet
    
     link-local   ff02::1/64
     link-local   ff02::2/64
    
    # 
    

    次に、Plug and Playのために必要となる、RA(Router Advertisement)の送信の設定をします。

    # ipv6 prefix 1 3ffe:5ff:100:aa01::1
    # ipv6 lan rtadv send 1
    # 
    

    ルータの設定は以上です。

  2. FreeBSD 4.3-RELEASE

    ff02::1はリンクローカル・オールノードマルチキャストアドレスです。インターフェースとして指定されているed1と同一リンクにあるノードにICMPv6を送信します。

    % ping6 ff02::1%ed1
    PING6(56=40+8+8 bytes) fe80::2a0:b0ff:fe21:9fed%ed1 --> ff02::1%ed1
    16 bytes from fe80::2a0:b0ff:fe21:9fed%ed1, icmp_seq=0 hlim=64 time=0.378 ms
    16 bytes from fe80::210:b5ff:fe02:dac7%ed1, icmp_seq=0 hlim=64 time=1.713 ms(DUP!)
    16 bytes from fe80::2a0:deff:fe09:352a%ed1, icmp_seq=0 hlim=64 time=2.842 ms(DUP!)
    16 bytes from fe80::2a0:b0ff:fe21:9fed%ed1, icmp_seq=1 hlim=64 time=0.368 ms
    16 bytes from fe80::210:b5ff:fe02:dac7%ed1, icmp_seq=1 hlim=64 time=1.702 ms(DUP!)
    16 bytes from fe80::2a0:deff:fe09:352a%ed1, icmp_seq=1 hlim=64 time=2.665 ms(DUP!)
    ^C
    --- ff02::1%ed1 ping6 statistics ---
    2 packets transmitted, 2 packets received, +4 duplicates, 0% packet loss
    round-trip min/avg/max = 0.368/1.611/2.842 ms
    % 
    

    そこで、応答のあったそれぞれのIPv6アドレスにICMPv6を送信してみます。

    %  ping6 fe80::2a0:b0ff:fe21:9fed%ed1
    PING6(56=40+8+8 bytes) fe80::2a0:b0ff:fe21:9fed%ed1 --> fe80::2a0:b0ff:fe21:9fed%ed1
    16 bytes from fe80::2a0:b0ff:fe21:9fed%ed1, icmp_seq=0 hlim=64 time=0.267 ms
    16 bytes from fe80::2a0:b0ff:fe21:9fed%ed1, icmp_seq=1 hlim=64 time=0.282 ms
    ^C
    --- fe80::2a0:b0ff:fe21:9fed%ed1 ping6 statistics ---
    2 packets transmitted, 2 packets received, 0% packet loss
    round-trip min/avg/max = 0.267/0.274/0.282 ms
    % 
    
    % ping6 fe80::210:b5ff:fe02:dac7%ed1
    PING6(56=40+8+8 bytes) fe80::2a0:b0ff:fe21:9fed%ed1 --> fe80::210:b5ff:fe02:dac7%ed1
    16 bytes from fe80::210:b5ff:fe02:dac7%ed1, icmp_seq=0 hlim=64 time=0.706 ms
    16 bytes from fe80::210:b5ff:fe02:dac7%ed1, icmp_seq=1 hlim=64 time=0.732 ms
    ^C
    --- fe80::210:b5ff:fe02:dac7%ed1 ping6 statistics ---
    2 packets transmitted, 2 packets received, 0% packet loss
    round-trip min/avg/max = 0.706/0.719/0.732 ms
    % 
    
    % ping6 fe80::2a0:deff:fe09:352a%ed1
    PING6(56=40+8+8 bytes) fe80::2a0:b0ff:fe21:9fed%ed1 --> fe80::2a0:deff:fe09:352a%ed1
    16 bytes from fe80::2a0:deff:fe09:352a%ed1, icmp_seq=0 hlim=64 time=1.237 ms
    16 bytes from fe80::2a0:deff:fe09:352a%ed1, icmp_seq=1 hlim=64 time=1.227 ms
    ^C
    --- fe80::2a0:deff:fe09:352a%ed1 ping6 statistics ---
    2 packets transmitted, 2 packets received, 0% packet loss
    round-trip min/avg/max = 1.227/1.232/1.237 ms
    % 
    

    次に、ルータにRS(Router Solicitation Message)を送出し、Plug and PlayによりIPv6アドレスを設定します。

    # rtsol -d ed1
    checking if ed1 is ready...
    ed1 is ready
    send RS on ed1, whose state is 2
    received RA from fe80::2a0:deff:fe09:352a on ed1, state is 2
    stop timer for ed1
    there is no timer
    # 
    

    これでIPv6アドレスが割り当てられたはずなので、確認します。

    % ifconfig -a
    ppp0: flags=8010 mtu 1500
    sl0: flags=c010 mtu 552
    faith0: flags=8000 mtu 1500
    gif0: flags=8010 mtu 1280
    gif1: flags=8010 mtu 1280
    gif2: flags=8010 mtu 1280
    gif3: flags=8010 mtu 1280
    lo0: flags=8049 mtu 16384
            inet6 fe80::1%lo0 prefixlen 64 scopeid 0x8 
            inet6 ::1 prefixlen 128 
            inet 127.0.0.1 netmask 0xff000000 
    ed1: flags=8843 mtu 1500
            inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
            inet6 fe80::2a0:b0ff:fe21:9fed%ed1 prefixlen 64 scopeid 0x9 
            inet6 3ffe:5ff:100:aa01:2a0:b0ff:fe21:9fed prefixlen 64 
            ether 00:a0:b0:21:9f:ed 
    % netstat -nr -f inet6
    Routing tables
    
    Internet6:
    Destination                       Gateway                       Flags      Netif Expire
    ::/96                             ::1                           UGRSc       lo0 =>
    default                           fe80::2a0:deff:fe09:352a%ed1  UGc         ed1
    ::1                               ::1                           UH          lo0
    ::ffff:0.0.0.0/96                 ::1                           UGRSc       lo0
    3ffe:5ff:100:aa01::/64            link#9                        UC          ed1
    fe80::/10                         ::1                           UGRSc       lo0
    fe80::%lo0/64                     fe80::1%lo0                   Uc          lo0
    fe80::%ed1/64                     link#9                        UC          ed1
    ff01::/32                         ::1                           U           lo0
    ff02::/16                         fe80::1%lo0                   UCS         lo0
    ff02::%lo0/32                     fe80::1%lo0                   UC          lo0
    ff02::%ed1/32                     link#9                        UC          ed1
    % ndp -r
    fe80::2a0:deff:fe09:352a if=ed1, flags=, expire=23m19s
    % 
    

    よさげなので、グローバルIPv6アドレスにICMPv6を送信してみます。

    % ping6 3ffe:5ff:100:aa01::1
    PING6(56=40+8+8 bytes) 3ffe:5ff:100:aa01:2a0:b0ff:fe21:9fed --> 3ffe:5ff:100:aa01::1
    16 bytes from 3ffe:5ff:100:aa01::1, icmp_seq=0 hlim=64 time=1.793 ms
    16 bytes from 3ffe:5ff:100:aa01::1, icmp_seq=1 hlim=64 time=1.629 ms
    ^C
    --- 3ffe:5ff:100:aa01::1 ping6 statistics ---
    2 packets transmitted, 2 packets received, 0% packet loss
    round-trip min/avg/max = 1.629/1.71/1.793 ms
    % 
    
  3. NetBSD 1.5.2

    ff02::1はリンクローカル・オールノードマルチキャストアドレスです。インターフェースとして指定されているne2と同一リンクにあるノードにICMPv6を送信します。

    % ping6 ff02::1%ne2
    PING6(56=40+8+8 bytes) fe80::210:b5ff:fe02:dac7%ne2 --> ff02::1%ne2
    16 bytes from fe80::210:b5ff:fe02:dac7%lo0, icmp_seq=0 hlim=64 time=0.231 ms
    16 bytes from fe80::2a0:b0ff:fe21:9fed%ne2, icmp_seq=0 hlim=64 time=1.373 ms(DUP!)
    16 bytes from fe80::2a0:deff:fe09:352a%ne2, icmp_seq=0 hlim=64 time=1.601 ms(DUP!)
    16 bytes from fe80::210:b5ff:fe02:dac7%lo0, icmp_seq=1 hlim=64 time=0.19 ms
    16 bytes from fe80::2a0:b0ff:fe21:9fed%ne2, icmp_seq=1 hlim=64 time=1.065 ms(DUP!)
    16 bytes from fe80::2a0:deff:fe09:352a%ne2, icmp_seq=1 hlim=64 time=1.41 ms(DUP!)
    ^C
    --- ff02::1%ne2 ping6 statistics ---
    2 packets transmitted, 2 packets received, +4 duplicates, 0% packet loss
    round-trip min/avg/max/std-dev = 0.190/0.978/1.601/0.565 ms
    % 
    

    そこで、応答のあったそれぞれのIPv6アドレスにICMPv6を送信してみます。

    % ping6 fe80::210:b5ff:fe02:dac7%lo0
    PING6(56=40+8+8 bytes) fe80::1%lo0 --> fe80::210:b5ff:fe02:dac7%lo0
    16 bytes from fe80::210:b5ff:fe02:dac7%lo0, icmp_seq=0 hlim=64 time=0.107 ms
    16 bytes from fe80::210:b5ff:fe02:dac7%lo0, icmp_seq=1 hlim=64 time=0.112 ms
    ^C
    --- fe80::210:b5ff:fe02:dac7%lo0 ping6 statistics ---
    2 packets transmitted, 2 packets received, 0% packet loss
    round-trip min/avg/max/std-dev = 0.107/0.110/0.112/0.003 ms
    % 
    
    % ping6 fe80::2a0:b0ff:fe21:9fed%ne2
    PING6(56=40+8+8 bytes) fe80::210:b5ff:fe02:dac7%ne2 --> fe80::2a0:b0ff:fe21:9fed%ne2
    16 bytes from fe80::2a0:b0ff:fe21:9fed%ne2, icmp_seq=0 hlim=64 time=0.682 ms
    16 bytes from fe80::2a0:b0ff:fe21:9fed%ne2, icmp_seq=1 hlim=64 time=0.647 ms
    ^C
    --- fe80::2a0:b0ff:fe21:9fed%ne2 ping6 statistics ---
    2 packets transmitted, 2 packets received, 0% packet loss
    round-trip min/avg/max/std-dev = 0.647/0.665/0.682/0.017 ms
    % 
    
    % ping6 fe80::2a0:deff:fe09:352a%ne2
    PING6(56=40+8+8 bytes) fe80::210:b5ff:fe02:dac7%ne2 --> fe80::2a0:deff:fe09:352a%ne2
    16 bytes from fe80::2a0:deff:fe09:352a%ne2, icmp_seq=0 hlim=64 time=1.286 ms
    16 bytes from fe80::2a0:deff:fe09:352a%ne2, icmp_seq=1 hlim=64 time=1.267 ms
    ^C
    --- fe80::2a0:deff:fe09:352a%ne2 ping6 statistics ---
    2 packets transmitted, 2 packets received, 0% packet loss
    round-trip min/avg/max/std-dev = 1.267/1.276/1.286/0.009 ms
    % 
    

    次に、ルータにRS(Router Solicitation Message)を送出し、Plug and PlayによりIPv6アドレスを設定します。まず、/etc/rc.confの内容を確認します。ipv6modeがautohost、rtsolがYES、rtsol_flagsにインターフェース名が指定されていることを確認します。

    *** rc.conf     2002/05/04 08:35:48     1.1
    --- rc.conf     2002/05/04 08:42:38     1.2
    ***************
    *** 101,108 ****
      dhclient_flags=""                             # blank: config all interfaces
      ntpdate=NO            ntpdate_flags="-b -s"   # May need '-u' thru firewall
      ppp_peers=""                                  # /etc/ppp/peers to call
    ! ip6mode=host                                  # host, autohost or router
    ! rtsol=NO              rtsol_flags=""          # for ip6mode=autohost only
      
      # Daemons required by servers.  These are not needed for strictly client use.
      #
    --- 101,108 ----
      dhclient_flags=""                             # blank: config all interfaces
      ntpdate=NO            ntpdate_flags="-b -s"   # May need '-u' thru firewall
      ppp_peers=""                                  # /etc/ppp/peers to call
    ! ip6mode=autohost                              # host, autohost or router
    ! rtsol=YES             rtsol_flags="ne2"       # for ip6mode=autohost only
      
      # Daemons required by servers.  These are not needed for strictly client use.
      #
    

    RSを送出します。

    # rtsol -d ne2
    rtsol: kernel is configured not to accept RAs
    checking if ne2 is ready...
    ne2 is ready
    send RS on ne2, whose state is 2
    received RA from fe80::2a0:deff:fe09:352a on ne2, state is 2
    stop timer for ne2
    there is no timer
    # 
    

    これでIPv6アドレスが割り当てられたはずなので、確認します。

    % ifconfig -a
    lo0: flags=8009 mtu 33228
            inet 127.0.0.1 netmask 0xff000000
            inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
            inet6 ::1 prefixlen 128
    tun0: flags=10 mtu 1500
    tun1: flags=10 mtu 1500
    ipip0: flags=8010
    ipip1: flags=8010
    gif0: flags=8010 mtu 1280
    gif1: flags=8010 mtu 1280
    gif2: flags=8010 mtu 1280
    gif3: flags=8010 mtu 1280
    faith0: flags=8002 mtu 1500
    ne2: flags=8863 mtu 1500
            address: 00:10:b5:02:da:c7
            media: Ethernet manual
            inet 192.168.0.3 netmask 0xffffff00 broadcast 192.168.0.255
            inet6 fe80::210:b5ff:fe02:dac7%ne2 prefixlen 64 scopeid 0xb
            inet6 3ffe:5ff:100:aa01:210:b5ff:fe02:dac7 prefixlen 64
    % netstat -nr -f inet6
    Routing tables
    
    Internet6:
    Destination                   Gateway                   Flags     Refs     Use    Mtu  Interface
    ::/104                        ::1                       UGRS        0        0  33228  lo0 =>
    ::/96                         ::1                       UGRS        0        0  33228  lo0 =>
    default                       fe80::2a0:deff:fe09:352a%ne2 UG          0        0   1500  ne2
    ::1                           ::1                       UH         12        0  33228  lo0
    ::127.0.0.0/104               ::1                       UGRS        0        0  33228  lo0
    ::224.0.0.0/100               ::1                       UGRS        0        0  33228  lo0
    ::255.0.0.0/104               ::1                       UGRS        0        0  33228  lo0
    ::ffff:0.0.0.0/96             ::1                       UGRS        0        0  33228  lo0
    2002::/24                     ::1                       UGRS        0        0  33228  lo0
    2002:7f00::/24                ::1                       UGRS        0        0  33228  lo0
    2002:e000::/20                ::1                       UGRS        0        0  33228  lo0
    2002:ff00::/24                ::1                       UGRS        0        0  33228  lo0
    3ffe:5ff:100:aa01::/64        link#11                   UC          0        0   1500  ne2
    fe80::/10                     ::1                       UGRS        0        0  33228  lo0
    fe80::%lo0/64                 fe80::1%lo0               U           0        0  33228  lo0
    fe80::%ne2/64                 link#11                   UC          1        0   1500  ne2
    fe80::2a0:deff:fe09:352a%ne2  00:a0:de:09:35:2a         UHL         1        0   1500  ne2
    fec0::/10                     ::1                       UGRS        0        0  33228  lo0
    ff01::/32                     ::1                       U           0        0  33228  lo0
    ff02::%lo0/32                 fe80::1%lo0               UC          0        0  33228  lo0
    ff02::%ne2/32                 link#11                   UC          0        0   1500  ne2
    % ndp -r
    fe80::2a0:deff:fe09:352a if=ne2, flags=, expire=25m24s
    % 
    

    よさげなので、グローバルIPv6アドレスにICMPv6を送信してみます。

    % ping6 3ffe:5ff:100:aa01::1
    PING6(56=40+8+8 bytes) 3ffe:5ff:100:aa01:210:b5ff:fe02:dac7 --> 3ffe:5ff:100:aa01::1
    16 bytes from 3ffe:5ff:100:aa01::1, icmp_seq=0 hlim=64 time=1.615 ms
    16 bytes from 3ffe:5ff:100:aa01::1, icmp_seq=1 hlim=64 time=1.485 ms
    ^C
    --- 3ffe:5ff:100:aa01::1 ping6 statistics ---
    2 packets transmitted, 2 packets received, 0% packet loss
    round-trip min/avg/max/std-dev = 1.485/1.550/1.615/0.065 ms
    % 
    

Copyright(C) 2001-2008 ykondou.org
webmaster@ykondou.org
Key fingerprint = 7721 FB0E 42CC 2BD3 DB09 5868 3EC7 B5D2 B75C 5DAA

Valid CSS! Valid HTML 4.01!