ネットワークの最近のブログ記事

世の中にはCiscoルータのシミュレータがあると聞いたことがあったが、仕事がらCiscoルータは自由に触れるのであまり興味はなかったし、どうせ不完全な動作しかしないのだろうと思っていた。しかしdynamipsというそのオープンソースソフトウェアは、Cisco7200のハードウェアをエミュレートして本物のIOSを走らせるのだという。しかもPCのメモリさえ十分にあれば何台も起動させて、ルーティングプロトコルの動作やパケット転送までできる。さらにPCのLANポートを介して外部の本物のルータと通信もできる。これは検証(おもちゃ)用ML115#2で動かしてみるしかない。

CiscoとJuniperでIPv6のBGP接続

BGP4はIPv4以外のプロトコルも扱えるように機能拡張ができるようになっており、IPv6にもその仕組みで対応をしている。IPv6対応のBGP4をBGP4+とも呼ぶ。

BGPを使うときは経路の優先制御やフィルタなどの様々なポリシーを設定するが、まずは繋ぐだけの簡単な設定を示す。Cisco側はAS番号1111、Juniper側はAS番号2222で、eBGP接続をしている。またそれぞれ1台ずつ、iBGP接続もしている。

Ciscoの設定は以下のとおり。

Cisco#show config
!
version 12.2
!
hostname Cisco
!
ip subnet-zero
!
ipv6 unicast-routing
!
interface GigabitEthernet1/1
 ip address 10.0.0.1 255.255.255.252
 ipv6 address 2000::1/64
 ipv6 enable
!
interface GigabitEthernet1/2
 ip address 172.16.0.254/24
 ipv6 address 2001::1/64
 ipv6 enable
!
interface Loopback0
 ip address 172.16.255.254/32
 ipv6 address 2001:0:0:255::254/128
 ipv6 enable
!
router bgp 1111
 no synchronization
 bgp log-neighbor-changes
 neighbor 172.16.255.253 remote-as 1111
 neighbor 10.0.0.2 remote-as 2222
 neighbor 2001:0:0:255::253 remote-as 1111
 neighbor 2000::2 remote-as 2222
 no auto-summary
 !
 address-family ipv6
  neighbor 2001:0:0:255::253 activate
  neighbor 2001:0:0:255::253 update-source Loopback0
  neighbor 2001:0:0:255::253 soft-reconfiguration inbound 
  neighbor 2000::2 activate
  neighbor 2000::2 soft-reconfiguration inbound
  network 2002::/48
 exit-address-family
 !
 address-family ipv4
  neighbor 172.16.255.253 activate
  neighbor 172.16.255.253 update-source Loopback0
  neighbor 172.16.255.253 soft-reconfiguration inbound
  neighbor 10.0.0.2 activate
  neighbor 10.0.0.2 soft-reconfiguration inbound
  network 172.16.0.0 mask 255.255.240.0
 exit-address-family
!
ip classless
!
ip route 172.16.0.0 255.240.0.0 Null0
!
ipv6 route 2001::/48 Null0
!
line con 0
line vty 0 4
line vty 5 15
!
end

Juniperの設定は以下のとおり。

interfaces {
    fe-0/0/0 {
        unit 0 {
            family inet {
                address 10.0.0.2/30;
            }
            family inet6 {
                address 2000::2/64;
                address fe80::2/64;
            }
        }
    }
    fe-0/0/1 {
        unit 0 {
            family inet {
                address 192.168.0.254/24;
            }
            family inet6 {
                address 2002::1/64;
                address fe80::1/64;
            }
        }
    }
    lo0 {
        unit 0 {
            family inet {
                address 192.168.255.254/32;
            }
            family inet6 {
                address 2002:0:0:255::254/128;
                address fe80::1/128;
            }
        }
    }

}
routing-options {
    rib inet6.0 {
        static {
            route 2002::/48 discard;
        }
    }
    static {
        route 192.168.0.0/16 discard;
    }
    router-id 192.168.255.254;
    autonomous-system 2222;
}
protocols {
    bgp {
        remove-private;
        group IBGP {
            type internal;
            local-address 192.168.255.254;
            export ( LOCAL BGP);
            peer-as 2222;
            neighbor 192.168.255.253;
        }
        group IBGP6 {
            type internal;
            local-address 2002:0:0:255::254;
            export ( LOCAL6 BGP);
            peer-as 2222;
            neighbor 2002:0:0:255::253;
        }
        group EBGP_Cisco {
            type external;
            export ( LOCAL BGP);
            peer-as 1111;
            neighbor 10.0.0.1;
        }
        group EBGP_Cisco6 {
            type external;
            export ( LOCAL6 BGP);
            peer-as 1111;
            neighbor 2000::2;
        }
    }
}
policy-options {
    policy-statement LOCAL {
        term 10 {
            from {
                protocol static;
                route-filter 192.168.0.0/16 exact;
            }
            then accept;
        }
        then reject;
    }
    policy-statement LOCAL6 {
        term 10 {
            from {
                protocol static;
                route-filter 2002::/48 exact;
            }
            then accept;
        }
        then reject;
    }
    policy-statement BGP {
        term 10 {
            from protocol bgp;
            then accept;
        }
        then reject;
    }
}

設定の量が増えるため省略しているが、各AS内ではOSPFなどが適切に動いていて、IBGPのルータID同士が通信できる必要がある。またEBGPのネットワークもOSPF Passiveなどにしておいて、IBGPルータのためにネクストホップが解決されている必要がある。

JuniperでIPv6

Juniperも2001年からIPv6に対応している。こちらはライセンスでOSが違うことなどはない。Juniperの設定はIPv4もIPv6もほとんど設定は変わらないので、IPv4の設定ができる人はほとんど戸惑わずにIPv6も設定できるだろう。

system {
    host-name Juniper-RE0;
}
interfaces {
    fe-0/0/0 {
        unit 0 {
            family inet {
                address 192.168.0.254/24;
            }
            family inet6 {
                address 2001:1:1:0::1/64;
                address fe80::1/64;
            }
        }
    }
    fe-0/0/2 {
        unit 0 {
            family inet {
                address 192.168.1.254/24;
            }
            family inet6 {
                address 2001:1:1:1::1/64;
                address fe80::1/64;
            }
        }
    }
}
routing-options {
    rib inet.0 {
        static {
            route 172.16.1.0/24 next-hop 192.168.1.253;
        }
    }
    rib inet6.0 {
        static {
            route 2001:1:1:3::/64 next-hop 2001:1:1:1::254;
        }
    }
    router-id 192.168.0.254;
}
protocols {
    ospf {
        export REDISTRIBUTE;
        area 0.0.0.0 {
            interface fe-0/0/0.0;
            interface fe-0/0/1.0 {
                passive;
            }
        }
    }
    ospf3 {
        export REDISTRIBUTE6;
        area 0.0.0.0 {
            interface fe-0/0/0.0;
            interface fe-0/0/1.0 {
                passive;
            }
        }
    }
}
policy-options {
    policy-statement REDISTRIBUTE {
        term 10 {
            from {
                protocol static;
            }
            then accept;
        }
    }
    policy-statement REDISTRIBUTE6 {
        term 10 {
            from {
                protocol static;
            }
            then accept;
        }
    }
}

CiscoでIPv6

Ciscoは2001年からIPv6のサポートを開始している。現在ではルータ、スイッチのいずれもローエンドからハイエンドまでほとんどの機種でIPv6に対応しているが、利用するにはAdvancedフィーチャーという別ライセンスを購入する必要がある。

まずは基本的な設定を示す。IPv4とIPv6のアドレスを付与して、OSPFの設定をしている。関係のないところは省略している。

!
version 12.2
!
ip routing
!
ipv6 unicast-routing
!
interface FastEthernet0/0
 ip address 192.168.0.254 255.255.255.0
 ipv6 address 2001:1:1:0::/64 eui-64
 ipv6 enable
 ipv6 ospf 100 area 0.0.0.0
!
interface FastEthernet0/1
 ip address 192.168.1.254 255.255.255.0
 ipv6 address 2001:1:1:1::254/64
 ipv6 enable
 ipv6 ospf 100 area 0.0.0.0
!
router ospf 100
 redistribute static subnets
 network 192.168.0.0 0.0.0.255 area 0
 network 192.168.1.0 0.0.0.255 area 0
!
ipv6 router ospf 100
 router-id 192.168.0.254
 redistribute static
!
ip route 172.16.1.0 255.255.255.0 192.168.2.253
!
ipv6 route 2001:1:1:3::/64 FastEthernet0/1 FE80::1
!
end

FE0/0のIPv6アドレスはEUI-64形式でMACアドレスから自動的に生成される。FE0/1は全て指定している。ネットワーク機器やサーバなど他の機器からアクセスするものは全て指定する方がいい。

OSPFを有効にするインターフェースの指定は、IPv4ではrouterサブモードでnetworkコマンドを使うが、IPv6では各インターフェースで設定する。IPv4のルータIDは自動的に選択させることも可能だが、IPv6では必ず明示的に設定する。redistribute staticではIPv4ではsubnets引数を付けないとサブネット化したアドレスへのスタティックルートを再配信することができないが、IPv6では不要である。

スタティックルートは、IPv6ではネクストホップにリンクローカルアドレスを使用し、インターフェースを指定する。グローバルアドレスを使用することも可能だが、リダイレクトができなくなる。

CentOS5でIPv6ルータ

近頃のLinuxは標準でIPv6に対応している。OSインストール時に特に指定や設定をしないでもifconfigを見ると以下のようなIPv6のリンクローカルアドレスが設定されている。

[root@ml115 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:1B:78:9E:D6:6B  
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::21b:78ff:fe9e:d66b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:238099 errors:0 dropped:0 overruns:0 frame:0
          TX packets:264177 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:26886732 (25.6 MiB)  TX bytes:381478301 (363.8 MiB)

これだけで同一セグメント上のIPv6ホスト同士は通信ができる。またネットワーク上にIPv6ルータがいればグローバルアドレスとデフォルトゲートウェイも自動的に設定され、他のネットワークやインターネットとの通信もできる。

ここでは単にIPv6ホストとして使うだけでなく、IPv6ルータとしての設定もしてみよう。ルータとして最低限必要な動作は、IPv6アドレスの設定と、IPv6パケットの転送、ルータアドバタイズメントというルータ情報等のネットワークへの送出である。ルータアドバタイズメントはIPv6から追加された機能であり、ホストアドレスの自動設定やルータの冗長化を実現する。

IPv6アドレスの設定は、IPv4と同様に/etc/sysconfig/network-script/ifcfg-eth0等に記述する。IPv6アドレスはローカルIPv6アドレス(FD00::/8)から適当にとろう。うちの場合このネットワークはIPv4で192.168.0.0/24なので、見やすいように以下のようにした。

[root@ml115 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:1b:78:9e:d6:6b
IPADDR=192.168.0.2
NETMASK=255.255.255.0
IPV6INIT=yes
IPV6ADDR=fd00:192:168::2/64
ONBOOT=yes
TYPE=Ethernet

また、/etc/sysconfig/networkにNETWORKING_IPV6=yesの設定を加える。

[root@ml115 ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=ml115.grandarbre.net

そうしたらネットワークを再起動して設定を反映させる。ただし以下のコマンドだとカーネルパラメータ等の設定が飛んでしまうので、できればOSを再起動したほうが確実。

[root@ml115 ~]#service network restart

インターフェースにちゃんとIPv6アドレスが付与されたか見てみよう。

[root@ml115 ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:1B:78:9E:D6:6B  
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fd00:192:168::2/64 Scope:Global
          inet6 addr: fe80::21b:78ff:fe9e:d66b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1199 errors:0 dropped:0 overruns:0 frame:0
          TX packets:668 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:253144 (247.2 KiB)  TX bytes:95419 (93.1 KiB)

また、ルータとして動作するのだから、自分のアドレスをルータアドバタイズメントから自動設定してはいけない。これは以下のようにカーネルパラメータで設定する。

[root@ml115 ~]# echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra

IPv6パケットの転送もカーネルパラメータで設定する。

[root@ml115 ~]# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

恒久的に変更するには/etc/rc.d/rc.localに上記の2つのコマンドを追記する。

次にルータアドバタイズメントを行うデーモンをインストールする。

[root@ml115 ~]# yum install radvd

設定ファイルは/etc/radvd.conf。ほとんど設定サンプルどおりでいいが、自分のネットワークで使うプレフィックス(ネットワークアドレス)だけは決めなければいけない。

interface eth0
{
       AdvSendAdvert on;
       MinRtrAdvInterval 30;
       MaxRtrAdvInterval 100;
       prefix fd00:192:168:0::/64
       {
               AdvOnLink on;
               AdvAutonomous on;
               AdvRouterAddr off;
       };

};

それではデーモンを起動してみよう。

[root@ml115 etc]# service radvd start
Starting radvd:                                            [  OK  ]
[root@ml115 ~]# chkconfig radvd on

ルータアドバタイズが送信されている様子は、 radvdumpコマンドで表示することができる。今回の設定では30秒から100秒おきに以下のようなアドバタイズが送信される。

[root@ml115 ~]# radvdump eth0
#
# radvd configuration generated by radvdump 0.9.1
# based on Router Advertisement from fe80::21b:78ff:fe9e:d66b
# 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;
        AdvHomeAgentFlag off;
        AdvDefaultPreference medium;
        AdvSourceLLAddress on;

        prefix fd00:192:168::/64
        {
                AdvValidLifetime 2592000;
                AdvPreferredLifetime 604800;
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr off;
        }; # End of prefix definition

}; # End of interface definition

ここまで設定すれば、このLinuxサーバはIPv6ルータとして動作している。配下のWindows XPでは以下のようにIPv6アドレスとデフォルトゲートウェイが取得されている。

C:¥>ipconfig

Windows IP Configuration

Ethernet adapter wlan0:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 192.168.0.7
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        IP Address. . . . . . . . . . . . : fd00:192:168:0:2c9c:62b1:1de3:b294
        IP Address. . . . . . . . . . . . : fd00:192:168:0:219:7eff:fe4b:f6b
        IP Address. . . . . . . . . . . . : fe80::219:7eff:fe4b:f6b%8
        Default Gateway . . . . . . . . . : 192.168.0.2
                                            fe80::21b:78ff:fe9e:d66b%8

Tunnel adapter Teredo Tunneling Pseudo-Interface:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : fe80::ffff:ffff:fffd%4
        Default Gateway . . . . . . . . . :

Tunnel adapter Automatic Tunneling Pseudo-Interface:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : fe80::5efe:192.168.0.7%2
        Default Gateway . . . . . . . . . :

また配下のLinuxサーバでは以下のようにIPv6アドレスとデフォルトゲートウェイが取得されている。

[root@r60e ~]# ifconfig ath0
ath0      Link encap:Ethernet  HWaddr 00:19:7D:39:5E:87  
          inet addr:192.168.0.3  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fd00:192:168:0:219:7dff:fe39:5e87/64 Scope:Global
          inet6 addr: fe80::219:7dff:fe39:5e87/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:45319 errors:0 dropped:0 overruns:0 frame:0
          TX packets:43011 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:34823760 (33.2 MiB)  TX bytes:5576371 (5.3 MiB)
[root@r60e ~]# route --inet6
Kernel IPv6 routing table
Destination                                 Next Hop                                Flags Metric Ref    Use Iface
fd00:192:168::/64                           *                                       UA    256    67       0 ath0    
fe80::/64                                   *                                       U     256    0        0 ath0     
*/0                                         fe80::21b:78ff:fe9e:d66b                UGDA  1024   0        0 ath0    
localhost6.localdomain6/128                 *                                       U     0      1        1 lo      
fd00:192:168:0:219:7dff:fe39:5e87/128       *                                       U     0      0        1 lo      
fe80::219:7dff:fe39:5e87/128                *                                       U     0      2        1 lo      
fe80::f498:ddff:fec3:1f54/128               *                                       U     0      0        1 lo      
ff00::/8                                    *                                       U     256    0        0 ath0    

ちなみにfe80::21b:78ff:fe9e:d66bというのはルータのリンクローカルアドレスである。IPv6ルーティングテーブルでは通常グローバルアドレス(fd00:192:168::2)ではなくリンクローカルアドレスが使われる。

Windows XPでIPv6

Windows XPのSP1以降は標準でIPv6に対応しているが、使用するにはコマンドラインでインストールする必要がある。やることは実に簡単で、コマンドプロンプトで以下のコマンドを打つだけ。

C:\ipv6 install
Installing...
Succeeded.

C:\

IPv6ルータが同一サブネット上にいない場合、Windowsはリンクローカルアドレスだけを自分で生成する。よってこのアドレスを使えばPC同士は通信ができる。アドレスを確認するにはIPv4と同様にipconfigコマンドを使う。IPv6アドレスの最後についている%の後の数字はインターフェースを識別する連番。fe80で始まるリンクローカルアドレスはネットワークを識別できないので、インターフェースで識別する。

C:¥>ipconfig

Windows IP Configuration

Ethernet adapter wlan0:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 192.168.0.7
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        IP Address. . . . . . . . . . . . : fe80::219:7eff:fe4b:f6b%5
        Default Gateway . . . . . . . . . : 192.168.0.2

Tunnel adapter Teredo Tunneling Pseudo-Interface:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : fe80::ffff:ffff:fffd%4
        Default Gateway . . . . . . . . . :

Tunnel adapter Automatic Tunneling Pseudo-Interface:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : fe80::5efe:192.168.0.7%2
        Default Gateway . . . . . . . . . :

C:¥>

ちゃんと設定してあるIPv6ルータがネットワーク上にいる場合、そのルータからグローバルアドレスとデフォルトゲートウェイを取得する。つまりIPv4ではDHCPが必要だったIPアドレスとデフォルトゲートウェイの自動設定を、IPv6は標準的に実現している。

C:¥>ipconfig

Windows IP Configuration

Ethernet adapter wlan0:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 192.168.0.7
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        IP Address. . . . . . . . . . . . : fd00:192:168:0:2c9c:62b1:1de3:b294
        IP Address. . . . . . . . . . . . : fd00:192:168:0:219:7eff:fe4b:f6b
        IP Address. . . . . . . . . . . . : fe80::219:7eff:fe4b:f6b%8
        Default Gateway . . . . . . . . . : 192.168.0.2
                                            fe80::21b:78ff:fe9e:d66b%8

Tunnel adapter Teredo Tunneling Pseudo-Interface:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : fe80::ffff:ffff:fffd%4
        Default Gateway . . . . . . . . . :

Tunnel adapter Automatic Tunneling Pseudo-Interface:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : fe80::5efe:192.168.0.7%2
        Default Gateway . . . . . . . . . :

なおpingコマンド、tracertコマンド、telnetコマンドはそのままIPv6アドレスを使うことができる。ただし宛先がリンクローカルアドレスである場合、%数字によるインターフェース指定が必要。

IPv6アドレスの基礎

仕事でIPv6をさわらなければいけなくなった。いつか必要になったら勉強しようと思ってずっと後回しにしてきたのだが、その日が来てしまったようだ。書籍などを見ながら勉強をしていくので、もしかしたら不正確な記述があるかもしれないし、たぶん不十分な記述はたくさんあると思う。

IPv6アドレスは、ご存知のとおりIPv4のアドレスの4倍の128ビットのサイズがある。これを16進数32桁で表し、16ビット(4桁)ごとにコロン(:)で区切る。つまり以下のようになる。

fe80:0000:0000:0000:0216:d3ff:fe3e:2a85

これではあまりにも長いということで、:0000:が連続する場合は1個の::で略記できる。ただし::を使えるのは1回だけである。:0000:は:0:とも略記できる。また:0216:のように16ビット区切りの上位桁が0の場合は:216:などと略記できる。よって上記のアドレスは下記のように略記できる。

fe80::216:d3ff:fe3e:2a85

IPv4の時と同様に、IPv6でも/64などというようにプレフィックス表記によるサブネット表現ができる。ユーザ組織は通常/48のプレフィックスを割り当てられ、続く16ビットをサブネットIDとして設計する。つまり128ビットのアドレスのうち上位64ビットをネットワークアドレスとして使用する。/48を/64に分けるので、ユーザ組織は16ビット分(65536)のサブネットを使うことが出来る。下位64ビットはインターフェースIDと呼ばれ、サブネット内でホストを一意に識別するIDとして使用する。

グローバルアドレスの割り当てに関しては、一定の条件を満たしたプロバイダは/32のプレフィックスを割り当てられる(グローバルルーティングプレフィックス)。そのプロバイダに接続するユーザは、先述のようにその中から/48のプレフィックスを割り当てられる。よってこのプロバイダは16ビット分(65536)のユーザを接続することができる。こうすることによってインターネット全体のルーティング情報が増えることを防いでいるが、ユーザはプロバイダを乗り換える際にはグローバルアドレスが変わってしまう。

ややこしいので、実際のアドレスと見比べてみる。

2000:0001:0001:0001:0216:d3ff:fe3e:2a85

赤字はプロバイダに割り当てられたグローバルルーティングプレフィックス青字はユーザ組織に割り当てられたプレフィックス緑字はユーザ組織が設計するネットワークアドレス、黒字がホストアドレスである。

IPv6アドレスは全部で128ビットあるが、IPv4のクラス分割と同様に使用目的によって以下のように分割して割り当てられている。これをなんとなく頭に入れておかないと、IPv6アドレスを見たときに何が何だかわからなくなる。

名称プレフィックスアドレス範囲
グローバルユニキャストアドレス2000::/32000:...~3fff:...
リンクローカルユニキャストアドレスFE80::/10FE80:...~FEBF:...
ローカルIPv6アドレスFC00::/7FC00:...~FDFF:..
マルチキャストアドレスFF00::/8FF00:...~FFFF:...

このうちローカルIPv6アドレスは、現在は8ビット目が1であるFD00::/8(つまりFD00:...~FDFF:...)のみが定義されている。ローカルIPv6アドレスは、グローバルなインターネットに向けて送信してはいけないアドレスであるが、グローバルで一意であるように定義されるアドレスであり、FDに続く40ビットをランダムに生成して使用する。合計48ビットとなるので、更に16ビットでサブネットを作ることが出来る。

ここまでが128ビットのアドレスの上位64ビットの話。下位64ビットのインターフェースIDは自由に設定することができるが、通常は48ビットのMACアドレスから生成されるEUI-64(Extended Unique Identifier-64)フォーマットを使用する。この生成方法は(人間には)面倒である。6バイト長のMACアドレスの第3バイトと第4バイトの間に0xFF-FEという値を挿入し、次にMACアドレスの最初のバイト0x00を0x02に変える。よってEUI-64フォーマットのアドレスは以下のような形になる。

xxxx:xxxx:xxxx:xxxx:02xx:xxFF:FExx:xxxx

100 Mbps のネットワークを使用した場合のデフォルトのTCPウィンドウサイズ。こちらから転載。

OSバージョンデフォルトのサイズ
Windows 2000 (SP なし)17,520 バイト
Windows 2000 SP117,520 バイト
Windows 2000 SP217,520 バイト
Windows 2000 SP365,535 バイト
Windows 2000 SP465,535 バイト
Windows 2000 SP4 + MS05-019 (893066)17,520 バイト
Windows 2000 SP4 対応の更新プログラム ロールアップ 1 (URP)17,520 バイト
Windows XP (SP なし)65,535 バイト
Windows XP SP165,535 バイト
Windows XP SP1a65,535 バイト
Windows XP SP265,535 バイト
Windows Server 2003 (SP なし)17,520 バイト
Windows Server2003 SP165,535 バイト
Windows Server2003 R265,535 バイト

ちなみにLinuxのTCPウィンドウサイズは/proc/sys/net/core/rmem_defaultで受信ウィンドウのデフォルト値、/proc/sys/net/core/wmem_defaultで送信ウィンドウのデフォルト値が調べられる。このサーバ(CentOS5.0)ではどちらも126,976バイトになっていた。

なぜこんなことを調べたかというと、スイッチの帯域制御(ポリシング)をするとき、どんなに細く絞る場合でもデフォルトウィンドウサイズ程度のバーストは許しておかないと、TCPの通信を開始するときにパケット損失が発生して問題になるという記述を見つけたため。しかしこんなに大きな値を設定してしまうと、一瞬(1/100秒くらい)とはいえ100Mbpsのワイヤレートを出してしまうなぁ。

返す返すも私はCisco屋なのだが、仕事の都合でアライドテレシスのルータAR550Sを使ってBフレッツに接続しなければいけなくなってしまった。触ったことがないのでメーカーから借用し、接続検証をした。こちらがそのコンフィグ。

接続検証に使った対向(網)側のCiscoコンフィグは、YAMAHAの時とかわらずこちら

ネットワーク屋で疎通試験、障害試験をする人は、ダウンタイムを計測するのにExpingを使っている人が多いと思う。複数のあて先を設定できたり、カラーアイコンで状態がわかったり、ログを保存できたりと実に便利だ。

しかし障害試験などでダウンタイム測りたい場合は、あまり便利ではない。別途ストップウォッチソフトで測るか、ExPingに表示されるタイムスタンプを自分で引き算することになる。これは大量の試験をするときには結構大変だし、効率がわるい。

そこで、非常に簡単なスクリプトだが特定のあて先にpingをうち、アップタイム、ダウンタイムを表示するものを作った。これまで何回か使ったが、特に問題なく使えるようだ。

pinger.pl

Windows+Cygwin、Windows+Active Perl、Linuxで動いている。特にパッケージの追加は必要ないが、Linuxではrootで使用する必要がある。

使い方はこんなかんじ。

[root@test ishii]# /usr/bin/perl pinger.pl www.grandarbre.net
www.grandarbre.net is up for 10 seconds
www.grandarbre.net is down for 5 seconds ←ケーブルを抜いたのでダウン
www.grandarbre.net is up for 10 seconds ←ケーブルを戻したのでアップ