Apache 2.4系でHTTP/2サーバを構築してみるテスト。
IPv6スタティックアドレスの設定さて、サーバのIPv6スタティックアドレスを決めたら、ホストに設定します。 世の中のIPv6解説の多くが、グローバルIPv6アドレスをデフォルトゲートウェイに設定する方法で溢れていますが、IPv6では、リンクローカルアドレスをデフォルトゲートウェイに設定することもできます。 NuroやUQ-WiMAX2+といったIPv6に対応したプロバイダも、リンクローカルアドレスをデフォルトゲートウェイとして利用しています。 IPv6では、ルータ広告(RA)のリンクローカルアドレスをデフォルトゲートウェイとして自動設定できます。 自動設定せずにデフォルトゲートウェイのグローバルアドレスを設定することもできますが、毎回デフォルトゲートウェイとしてグローバルアドレスを設定すると疲れたり、管理が難しくなります。 今回はルータの設定も自前で行ってることですし、修行中の身?というわけでもないと思いますので、ルータ広告(RA)の送信元アドレスのリンクローカルアドレスをデフォルトゲートウェイに設定する方法でいきます。 なお、デフォルトゲートウェイにリンクローカルアドレスを設定しても、ホストにグローバルアドレスが設定してあれば、そのホストは、他のグローバルスコープの機器と通信できますのでご安心を。 これなら管理するグローバルIPv6アドレスは、サーバのスタティックアドレスだけで済みます。
ここでは、こちらのページで設定したルータから、ルータ広告を受けて、送信元のリンクローカルアドレスを、デフォルトルートとして自動設定し、その後グローバルアドレスを、スタティックアドレスとして設定します。
以下、LinuxとSolarisの設定方法を記載します。 いずれのホストもIPv4の設定があり、IPv4経由のSSHなどで接続している想定です。 (IPv6の設定をいじる場合は、IPv6のネットワーク経由のSSHログインだと怖いので、IPv4経由を推奨します。)
こちらで設定したのネットワーク構成に、Webサーバを設置する例で説明します。 ルータ広告で降ってくるデフォルトゲートウェイアドレスはFE80::1/10 設定するグローバルアドレスは、240D:XXXX:XXXX:XX01::2/64 サーバのEUI-64のインタフェースIDはYYYY:YYff:feYY:YYYYと表記します。 といった構成を設定します。
Linuxの場合CentOS(たぶんRed hatも同じ)の場合を書いてみます。 まずはデバイスを確認 # ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet XX.XX.XX.XX netmask 255.255.255.0 broadcast XX.XX.XX.XX inet6 fe80::YYYY:YYff:feYY:YYYYprefixlen 64 scopeid 0x20>link> ether XX:XX:XX:XX:XX:XX txqueuelen 1000 (Ethernet) RX packets 350 bytes 99772 (97.4 KiB) RX errors 0 dropped 2 overruns 0 frame 0 TX packets 397 bytes 64056 (62.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0というデバイス(LANポート)が存在しています。 ということで、まずは、IPv6の初期設定をして、ルータ広告を受け入れるように設定します。 # vi /etc/sysconfig/network /etc/sysconfig/network
(…省略…) NETWORKING_IPV6=yes ←追記 (…省略…) # vi /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0
IPV6INIT=yes ←追記 IPV6_AUTOCONF=yes ←追記 これで、リブートします。 続いて、スタティックアドレスを割り当てます。 以降、Linuxの場合、ifconfigとipコマンドの2通りの方法があります。 どちらかというと、ipコマンドの方が推奨されているようです。
スタティックアドレスの設定(ipconfigコマンド)
IPv6アドレスの追加 /sbin/ifconfig <interface> inet6 add <ipv6address>/<prefixlength> # /sbin/ifconfig eth0 inet6 add 240D:XXXX:XXXX:XX01::2/128
IPv6アドレスの削除は /sbin/ifconfig <interface> inet6 del <ipv6address>/<prefixlength> # /sbin/ifconfig eth0 inet6 del 240D:XXXX:XXXX:XX01::2/128
IPv6アドレスの確認は # /sbin/ifconfig <interface> # /sbin/ifconfig eth0 (…省略…) inet6 addr: fe80::YYYY:YYff:feYY:YYYY/10 Scope:Link inet6 addr: 240D:XXXX:XXXX:XX01::2/64 Scope:Global (…省略…)
スタティックアドレスの設定(ipコマンド)
インタフェース名の列挙 /sbin/ip link # /sbin/ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether YY:YY:YY:YY:YY:YY brd ff:ff:ff:ff:ff:ff
IPv6アドレスの確認 /sbin/ip -6 addr show dev <interface> # /sbin/ip -6 addr show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 inet6 fe80::YYYY:YYff:feYY:YYYY/64 scope link valid_lft forever preferred_lft forever
IPv6アドレスの追加 /sbin/ip -6 addr add <ipv6address>/<prefixlength> dev <interface> # /sbin/ip -6 addr add 240D:XXXX:XXXX:XX01::2/128 dev eth0
IPv6アドレスの削除 /sbin/ip -6 addr del <ipv6address>/<prefixlength> dev <interface> # /sbin/ip -6 addr del 240D:XXXX:XXXX:XX01::2/128 dev eth0
DNSサーバのIPv6アドレスを設定仕上げに、プロバイダの指定するDNSサーバのIPv6アドレスを設定します。 # vi /etc/resolv.conf /etc/resolv.conf
(…省略…) nameserver 240D:XXXX:XXXX:XXXX::XX nameserver 240D:XXXX:XXXX:XXXX::XX
Solarisの場合こちらも、なにはともあれ、まずは、LANポートのインタフェース名を調べます。 # ipadm show-if IFNAME CLASS STATE ACTIVE OVER lo0 loopback ok yes -- net0 ip ok yes -- net0 という名前のインタフェースがあるようです。 これに自動設定用(addrconf)のアドレスを割り当てます。 アドレスの管理は、アドレスオブジェクト名で行います。 アドレスオブジェクトは、/で区切られた2つの部分い分けられます。 /よりも前にインタフェース名(ここでは最初に調べたnet0)を入れます。 /の後には、重複が無いように、管理者が管理しやすい名前で命名します。 ここでは、net0/v6と命名しました。 # ipadm create-addr -T addrconf net0/v6 続いて、IPv6 デーモン in.ndpd を起動します。 # /usr/lib/inet/in.ndpd これだけで、ルータ広告が受信できるようになります。 早速、アドレスを確認します。 # ipadm show-addr ADDROBJ TYPE STATE ADDR lo0/v4 static ok 127.0.0.1/8 net0/v4 static ok XXX.XXX.XXX.XXX/29 lo0/v6 static ok ::1/128 net0/v6 addrconf ok fe80::YYYY:YYff:feYY:YYYY/10 ついでにデフォルトゲートウェイも設定されているか見てみます。 # netstat -r
(…省略…)
Routing Table: IPv6
Destination/Mask Gateway Flags Ref Use If
--------------------------- --------------------------- ----- --- ------- -----
localhost localhost UH 2 108 lo0
fe80::/10 fe80::YYYY:YYff:feYY:YYYY U 3 28875 net0
default fe80::1 UG 3 724972 net0
ルータ設定の通り、ルータのサーバ側VLANのリンクローカルIP(fe80::1)が設定されています。。 このように、ルータ広告を使った自動設定ができています。
スタティックアドレスの設定ただ、これでは、グローバルアドレスが無いので、外部との通信はまだできません。 そこで、さらにアドレスオブジェクトを作成して、さきほど決めたグローバルアドレス(240D:XXXX:XXXX:XX01::2)をスタティックアドレスとして設定します。 アドレスオブジェクトは、net0/v6addと命名しました。 # ipadm create-addr -T static -a 240D:XXXX:XXXX:XX01::2/64 net0/v6add 出来たか確認します。 # ipadm show-addr ADDROBJ TYPE STATE ADDR lo0/v4 static ok 127.0.0.1/8 net0/v4 static ok XXX.XXX.XXX.XXX/29 lo0/v6 static ok ::1/128 net0/v6 addrconf ok fe80::XXXX:XXXX:XXXX:XXXX/10 net0/v6 addrconf ok 240D:XXXX:XXXX:XX01:YYYY:YYff:feYY:YYYY/64 ←EUI-64のアドレスが自動追加 net0/v6add static ok 240D:XXXX:XXXX:XX01::2/64 ←スタティックアドレスが追加 ルーティングも確認します。
# netstat -r
(…省略…)
Routing Table: IPv6
Destination/Mask Gateway Flags Ref Use If
--------------------------- --------------------------- ----- --- ------- -----
localhost localhost UH 2 108 lo0
240D:XXXX:XXXX:XX01::/64 240D:XXXX:XXXX:XX01::2 U 2 0 net0
240D:XXXX:XXXX:XX01::/64 240D:XXXX:XXXX:XX01:YYYY:YYff:feYY:YYYY U 2 0 net0
fe80::/10 fe80::YYYY:YYff:feYY:YYYY U 3 7 net0
default fe80::1 UG 3 69 net0
アドレスオブジェクトの削除スタティックアドレスや、自動設定されたアドレスを修正する場合は、いったん削除する必要があります。 # ipadm delete-addr net0/v6add ルータから、間違ったルータ広告でグローバルアドレスを振ってしまった場合などは、net0/v6をいったん削除して、再度作成する必要があります。 このような場合は、IPv4経由のSSH接続をしていないと、ターミナルが死ぬのでご注意ください。
DNSサーバのIPv6アドレスを設定仕上げに、プロバイダの指定するDNSサーバのIPv6アドレスを設定します。 # vi /etc/resolv.conf /etc/resolv.conf
(…省略…) nameserver 240D:XXXX:XXXX:XXXX::XX nameserver 240D:XXXX:XXXX:XXXX::XX
IPv6のtracerouteで経路を確認最後にtracerouteでも確認します。 ここでは、こちらのページで設定したトラフィックフィルタなら、tracerouteの戻りのパケットも受信できるはずです。 # traceroute -A inet6 www.facebook.com traceroute to www.facebook.com (2a03:2880:f00f:1e:face:b00c:0:25de), 30 hops max, 60 byte packets 1 240d:XXXX:XXXX:XXXX::XXXX 0.773 ms 0.737 ms 0.641 ms 2 240d:YYYY:YYYY:YYYY::YYYY 3.400 ms 3.288 ms 3.388 ms 3 240d:ZZZZ:ZZZZ:ZZZZ::ZZZZ 3.477 ms 2.637 ms 2.942 ms (…省略…) 10 edge-star-mini6-shv-01-nrt1.facebook.com (2a03:2880:f00f:1e:face:b00c:0:25de) 2.912 ms 2.668 ms 2.662 ms 余談ですが、facebookのIPv6アドレスのインタフェースIDの上位32ビットは、face:b00cとなっています。0(ゼロ)をo(オー)、末尾のcをkと読ませるアナグラムといったところでしょうか。
| |||||||||||||||||||||