IPv6

更新日 2011-08-12 (金) 20:45:49

Vine5.2でnetwork(NetworkManagerを停止)してIPv6を構築

IPv6アドレス

IPv6はn bitのサブネットプレフィックスと128-n bitのインタフェースIDで構成

--------------------------------------------------------
| サブネットプレフィックス    |   インターフェイスID   |
--------------------------------------------------------
           n bit                    128-n bit

2001:db8:cafe:babe::bad  n=64
サブネットプレフィックス = 2001:db8:cafe:babe
インターフェイスID = 0:0:0:bad

ネットワークアドレス = 2001:db8:cafe:babe::/64

IPv6のゼロの省略

2001:db8:cafe:babe::bad
          ↓ ::は0で補完(::の場所は1か所,2か所以上あると補完バイト数が判らなくなる)
2001:db8:cafe:babe:0:0:0:0bad
          ↓ 0は省略されている。
2001:db8:cafe:babe:0000:0000:0000:0bad (2byteごと区切る)

IPv6一覧

::1/128ループバック(IPv4の127.0.0.1)
2000::/3グローバルアドレス
fd00::/7ユニークローカルアドレス 独自割り当て(ローカル管理)
fc00::/7ユニークローカルアドレス 現在定義(集中管理)
fe80::/10リンクローカルアドレス
ff00::/8マルチキャストアドレス

/n はn bit

リンクローカルアドレス。

MACアドレスから生成されるのが、リンクローカルアドレス。

                      24Bit     24Bit
                    -------------------
MACアドレス         | 001122 | 334455 |
                    -------------------
                 24Bit    16Bit   24Bit
               --------------------------
EUI-64アドレス | 001122 | fffe | 334455 |
               --------------------------
                 ↓universal/local Bit の反転 
               0000 0010 …
                02 11 22 上位1Byteの7Bit目を反転すると0 → 2(Hex)
              ^^^^
リンクローカルアドレスは
-------------------------------------------
|fe80000000000000| 021122 | fffe | 334455 |
-------------------------------------------
  64Bit

EUI-64では左から,7ビット目と8ビット目には意味が定められている。7ビット目はuniversal/localビットと呼ばれ,0がセットされていると識別子が世界で一意であること示す。一方,1の場合はローカル利用を示しており,必ずしも一意である保証はない.

           

ユニークローカルアドレス

IPv4のプライベートアドレスに相当するのがユニークローカルアドレス。

ユニークローカルアドレスはサブネットプレフィックスの上位7bitが1111 110。
8bit目が1が独自割り当て 0が現在定義 よって

--------------------------------------------------------------
| 1111 1101 | Global ID | Subnet ID | インターフェイスID     |
--------------------------------------------------------------
  8bit (fd)     40bit       16bit         64bit

Global ID: ランダムに生成し、重複しない値

サブネット ID: ネットワークの管理サブネットを定義。管理者が自由に決める

ユニークローカルアドレスはローカル内部重複しなければOK。
重複を避けるためにGlobal ID (40bit)を以下のように生成(RFC 4193)

$ ntpdate -dq ntp.jst.mfeed.ad.jp
22 Jul 11:47:15 ntpdate[27765]: ntpdate 4.2.4p8@1.1612-o Sun Dec 13 12:36:41 UTC 2009 (1)
Looking for host ntp.jst.mfeed.ad.jp and service ntp
host found : ntp2.jst.mfeed.ad.jp
transmit(210.173.160.57)
(略)
originate timestamp: d1d362b6.2e39448c  Fri, Jul 22 2011 11:45:10.180
transmit timestamp:  d1d36334.ad2007dd  Fri, Jul 22 2011 11:47:16.676  <===ここを利用
filter delay:  0.05257  0.04285  0.04520  0.04866
(略)
$ /sbin/ifconfig
(略)
          inet6アドレス: fe80::21d:72ff:feb5:a9e/64 範囲:リンク
                              ^^^^^^^^^^^^^^^^^^ ここを利用する(8Byte)
(略)
$ echo d1d36334ad2007dd021d72fffeb50a9e | sha1sum
4820d6a830f1b90187e091bfc64d155e059e47ea  -
                              ^^^^^^^^^^
                               40bitを使用する
Subnet IDを 00にし、インターフェイスIDを::1にすると
アドレスは1d:45:80:ee:8a::1/64になる

ユニークローカルアドレスの設定

IPアドレスはfd41:28b7:be11::47/64を設定

/etc/sysconfig/network

NETWORKING_IPV6=yes

/etc/sysconfig/network-scripts/ifcfg-eth0

# IPV6INIT=no

IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6ADDR=fd41:28b7:be11::47/64
IPV6_DEFAULTGW=fd41:28b7:be11::54

Linuxでの /etc/hosts

fd41:28b7:be11::54                      d5270-54

構成

         IPv6          
---------- fd41:28b7:be11::47        fd41:28b7:be11::54 ----------
|d5270-47|----------------------------------------------|d5270-54|
----------                                              ----------
         MAC 00:1D:72:B5:0A:9E      
# ping6 -I eth0 fd41:28b7:be11::54
PING fd41:28b7:be11::54(fd41:28b7:be11::54) from fd41:28b7:be11::47 eth0: 56 data bytes
64 bytes from fd41:28b7:be11::54: icmp_seq=1 ttl=64 time=4.62 ms
64 bytes from fd41:28b7:be11::54: icmp_seq=2 ttl=64 time=0.378 ms
# ping6 fd41:28b7:be11::54
PING fd41:28b7:be11::54(fd41:28b7:be11::54) 56 data bytes
64 bytes from fd41:28b7:be11::54: icmp_seq=1 ttl=64 time=0.492 ms
64 bytes from fd41:28b7:be11::54: icmp_seq=2 ttl=64 time=0.376 ms
# ping6 d5270-54
PING d5270-54(d5270-54) 56 data bytes
64 bytes from d5270-54: icmp_seq=1 ttl=64 time=3.97 ms
64 bytes from d5270-54: icmp_seq=2 ttl=64 time=0.375 ms

リンク層のアドレスの解決

以下のようにダンプをとりながらpingを打つ

# tcpdump -i eth0 -nxx ip6
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
14:37:35.482271 IP6 fd41:28b7:be11::47 > ff02::1:ff00:54: ICMP6, neighbor solicitation, who has fd41:28b7:be11::54, length 32
        0x0000:  3333 ff00 0054 001d 72b5 0a9e 86dd 6000
        0x0010:  0000 0020 3aff fd41 28b7 be11 0000 0000
        0x0020:  0000 0000 0047 ff02 0000 0000 0000 0000
        0x0030:  0001 ff00 0054 8700 332a 0000 0000 fd41
        0x0040:  28b7 be11 0000 0000 0000 0000 0054 0101
        0x0050:  001d 72b5 0a9e

相手のMACアドレスを検索するためにNS(近隣要請)をMACのマルチキャストを投げる。 MACマルチキャストは送信元MACアドレス上位16bit 33:33 にIPアドレスの下位32bitを組み合わせ、6Byetにして送る。(この場合IPアドレスの下位32bitは00:00:00:54) ところが、ノードマルチキャストアドレスの下位32BitはFF+ユニキャストアドレス 24Bitなため33:33:ff:00:00:54になる。

14:37:35.482802 IP6 fd41:28b7:be11::54 > fd41:28b7:be11::47: ICMP6, neighbor advertisement, tgt is fd41:28b7:be11::54, length 32
        0x0000:  001d 72b5 0a9e 001d 72b5 0b18 86dd 6000
        0x0010:  0000 0020 3aff fd41 28b7 be11 0000 0000
        0x0020:  0000 0000 0054 fd41 28b7 be11 0000 0000
        0x0030:  0000 0000 0047 8800 eaa9 6000 0000 fd41
        0x0040:  28b7 be11 0000 0000 0000 0000 0054 0201
        0x0050:  001d 72b5 0b18

SLAAC(radvd)の自動IP振り分け。

Server側

# apt-get install radvd

/etc/sysctl.confに以下を追加

net.ipv6.conf.all.forwarding = 1

再起動

確認

# sysctl net.ipv6.conf.all.forwarding
net.ipv6.conf.all.forwarding = 1

で確認

直接設定(再起動時は消える)

# sysctl -w net.ipv6.conf.all.forwarding=1

/etc/radvd.conf

interface eth0{
        AdvSendAdvert on;
        AdvManagedFlag off;
        AdvOtherConfigFlag off;
        prefix fd41:28b7:be11::/64{
                 AdvValidLifetime 7200;
                 AdvPreferredLifetime 3600;
                 };
        RDNSS fd41:28b7:be11::47{
        };
};
# /etc/rc.d/init.d/radvd start

Client側

/etc/sysconfig/network-scripts/ifcfg-eth0

# IPV6INIT=no

IPV6INIT=yes
IPV6_AUTOCONF=yes
# IPV6ADDR=fd41:28b7:be11::33/64
# /etc/rc.d/init.d/network restart
$ /sbin/ifconfig
eth0      リンク方法:イーサネット  ハードウェアアドレス 00:1D:72:B5:0B:13
          inetアドレス:10.3.4.33 ブロードキャスト:10.255.255.255  マスク:255.0.0.0
          inet6アドレス: fd41:28b7:be11:0:21d:72ff:feb5:b13/64 範囲:グローバル  <==自動に割り振られたIP
          inet6アドレス: fe80::21d:72ff:feb5:b13/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
$ netstat -rnA inet6
カーネルIPv6 経路テーブル
送信先サイト                                次回ホップ                             フラグ Metric Ref 使用数 インターフェース
fd41:28b7:be11::/64                         ::                                      UA    256    5        0 eth0
fe80::/64                                   ::                                      U     256    0        0 eth0
::/0                                        fe80::21d:72ff:feb5:a9e                 UGDA  1024   1        0 eth0  <==デフォルトGW
::1/128                                     ::                                      U     0      7        1 lo
fd41:28b7:be11:0:21d:72ff:feb5:b13/128      ::                                      U     0      4        1 lo
fe80::21d:72ff:feb5:b13/128                 ::                                      U     0      13       1 lo
ff02::1:ffed:e5db/128                       ff02::1:ffed:e5db                       UC    0      1        0 eth0
ff00::/8                                    ::                                      U     256    0        0 eth0

デフォルトGWはサーバが指定される。

以下のコマンドで確認

# radvdump eth0
#
# radvd configuration generated by radvdump 1.1
# based on Router Advertisement from fe80::21d:72ff:feb5:a9e
# received by interface eth0
#

interface eth0
{
        AdvSendAdvert on;
        # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
        AdvManagedFlag off;
        AdvOtherConfigFlag off;
        AdvReachableTime 0;
        AdvRetransTimer 0;
        AdvCurHopLimit 64;
        AdvDefaultLifetime 300;
        AdvHomeAgentFlag off;
        AdvDefaultPreference medium;
        AdvSourceLLAddress on;

        prefix fd41:28b7:be11::/64
        {
                AdvValidLifetime 7200;
                AdvPreferredLifetime 3600;
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr off;
        }; # End of prefix definition
 

        RDNSS fd41:28b7:be11::47
        {
                AdvRDNSSPreference 8;
                AdvRDNSSOpen off;
                AdvRDNSSLifetime 100;
        }; # End of RDNSS definition

}; # End of interface definition

DHCPの設定

Server側は動作している(Windowsで取得はできる)がLinuxクライアントでうまく割り振れないようだ原因調査中

Server側

# apt-cache search dhcpv6

dhcpv6 - DHCPv6 - DHCP server and client for IPv6
dhcpv6-client - DHCPv6 client
# apt-get install dhcpv6

/etc/dhcp6s.conf

interface eth0 {
    server-preference 255;
    renew-time 60;
    rebind-time 90;
    prefer-life-time 130;
    valid-life-time 200;
    allow rapid-commit;
#    option dns_servers 2000::2 ibm.com;

    link AAA {
        pool{
            range fd41:28b7:be11::0001 to fd41:28b7:be11::00ff/64;
            prefix fd41:28b7:be11::/48;
        };

        #range 3ffe:501:ffff:1::1 to 3ffe:501:ffff:1::10/64;
    };

};

リソースリリースファイル

/var/lib/dhcpv6/server6.leases

lease fd41:28b7:be12::1/64 {
         DUID: 00:01:00:01:13:ed:49:78:00:0c:29:0f:32:f5;
         IAID: 234884137         type: 0;
         RenewTime: 0;
         RebindTime: 0;
         state: 1;
         hostname: ;
         (start_date: 4 2011/8/11 21:41:40 UTC);
         start date: 1313098900;
         PreferredLifeTime: 130;
         ValidLifeTime: 200;
}
lease fd41:28b7:be12::1/64 {
         DUID: 00:01:00:01:13:ed:49:78:00:0c:29:0f:32:f5;
         IAID: 234884137         type: 0;
         RenewTime: 0;
         RebindTime: 0;
         state: 5;
         hostname: ;
         (start_date: 4 2011/8/11 21:41:40 UTC);
         start date: 1313098900;
         PreferredLifeTime: 130;
         ValidLifeTime: 200;
}
lease fd41:28b7:be12::2/64 {
         DUID: 00:01:00:01:13:ed:49:78:00:0c:29:0f:32:f5;
         IAID: 234884137         type: 0;
(略)

Client側

# apt-get install dhcpv6-client 

/etc/dhcp6c.conf

interface eth0 {
#    #information-only;
#    send rapid-commit;
#    request prefix-delegation;
#    #request temp-address;
};

/etc/sysconfig/network-scripts/ifcfg-eth0

IPV6INIT=yes
IPV6_AUTOCONF=yes
# IPV6ADDR=fd41:28b7:be11::33/64
DHCPV6C=yes

SLAAC(radvd)が動作さいていないときはIPV6_AUTOCONF=noを指定

# /sbin/ifconfig
eth0      リンク方法:イーサネット  ハードウェアアドレス 00:1D:72:B5:0B:13
          inetアドレス:10.3.4.33 ブロードキャスト:10.255.255.255  マスク:255.0.0.0
          inet6アドレス: fd41:28b7:be11::1d/64 範囲:グローバル  <==割り振られたIP
          inet6アドレス: fd41:28b7:be11:0:21d:72ff:feb5:b13/64 範囲:グローバル
          inet6アドレス: fe80::21d:72ff:feb5:b13/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Bind9でIPv6

サブネットプレフィックス fd41:28b7:be11:0000

これがゾーンになる。たとえば

インターフェイスID  0000:0000:0000:0054

の場合逆引きは

fd41:28b7:be11::54

fd41:28b7:be11:0000:0000:0000:0000:0054

4 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 e b 7 b 8 2 1 4 d f
<------------------------------><----------------------------->
   インターフェイスID             サブネットプレフィックス

のように考える

/etc/named.conf

acl "localnet" {
        10.0.0.0/8;
        127.0.0.1;
        fd41:28b7:be11::/64;  //(同一サブネットプレフィックスを指定)
};

options {
        directory "/var/named";
        auth-nxdomain no;
        listen-on-v6{    //IPv6からの問い合わせに答えるため必要
                any;
        };
};
(略)
        zone "0.0.0.0.1.1.e.b.7.b.8.2.1.4.d.f.ip6.arpa"{
                type master;
                file "named.rev6";
        };

/var/named/named.hosts

;
; IPV6 Test  /var/named/named.hosts
;
$TTL 1D
@ IN SOA d5270-47.mie-chukyo-u.ac.jp. root.d5270-47.mie-chukyo-u.ac.jp. (
                3       ; Serial
                10800   ; Refresh
                1800    ; Retry
                3600000 ; Expire
                86400 ) ; Minimum
  IN NS         d5270-47.mie-chukyo-u.ac.jp.
;  IN MX        10 atom.ism21.net.
d5270-33        IN A     10.3.4.33
d5270-47        IN A     10.3.4.47
d5270-54        IN A     10.3.4.54
d5270-47        IN AAAA     fd41:28b7:be11::47
d5270-54        IN AAAA     fd41:28b7:be11::54

/var/named/named.rev6

;
; IPv6 TEST  /var/named/named.rev6
;
$TTL 1D
@ IN    SOA     d5270-47.mie-chukyo-u.ac.jp. root.d5270-47.mie-chukyo-u.ac.jp. (
                11              ; Serial
                10800           ; Refresh
                1800            ; Retry
                3600000         ; Expire
                86400 )         ; Minimum
@            NS      d5270-47.mie-chukyo-u.ac.jp.
3.3.0.0.0.0.0.0.0.0.0.0.0.0.0.0       PTR     d5270-33.mie-chukyo-u.ac.jp.
7.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0       PTR     d5270-47.mie-chukyo-u.ac.jp.
4.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0       PTR     d5270-54.mie-chukyo-u.ac.jp.

確認

/etc/resolv.conf

search mie-chukyo-u.ac.jp
nameserver fd41:28b7:be11::47
# host d5270-54
d5270-54.mie-chukyo-u.ac.jp has address 10.3.4.54
d5270-54.mie-chukyo-u.ac.jp has IPv6 address fd41:28b7:be11::54
# host fd41:28b7:be11::54
4.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.1.e.b.7.b.8.2.1.4.d.f.ip6.arpa domain name pointer d5270-54.mie-chukyo-u.ac.jp.
# dig d5270-54.mie-chukyo-u.ac.jp. AAAA

; <<>> DiG 9.6-ESV-R2 <<>> d5270-54.mie-chukyo-u.ac.jp. AAAA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8893
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; QUESTION SECTION:
;d5270-54.mie-chukyo-u.ac.jp.   IN      AAAA

;; ANSWER SECTION:
d5270-54.mie-chukyo-u.ac.jp. 86400 IN   AAAA    fd41:28b7:be11::54
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ここ
;; AUTHORITY SECTION:
mie-chukyo-u.ac.jp.     86400   IN      NS      d5270-47.mie-chukyo-u.ac.jp.

;; ADDITIONAL SECTION:
d5270-47.mie-chukyo-u.ac.jp. 86400 IN   A       10.3.4.47
d5270-47.mie-chukyo-u.ac.jp. 86400 IN   AAAA    fd41:28b7:be11::47

;; Query time: 0 msec
;; SERVER: fd41:28b7:be11::47#53(fd41:28b7:be11::47)
;; WHEN: Tue Aug  9 15:03:28 2011
;; MSG SIZE  rcvd: 140

参考


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS