してみるテストロゴ
Apache 2.4系でHTTP/2サーバを構築してみるテスト。

IPv6のサーバ設置ネットワークの設定

さて、IPv6のクライアントPCの用意ができたところで、早速サーバの設定に進みます。

サーバを運用しているNURO-Bizの回線は、IPv6に対応しています。

NUROのIPv6は、デュアルスタックとよばれる方式で提供されています。これは、IPv4とIPv6が共存する方式で、トンネル化などが不要で、特別なことをしなくても、IPv6に接続できます。

トンネル方式ではないので、そのままパケットが運ばれます。そのため、遅延もIPv4と大差ありません。

あとは、サーバ運用に必要となるIPアドレスを固定的に割り当てるだけです。

これまで、IPv4のサーバを運用していれば、IPアドレスとサブネットマスクの情報が書面で渡されて、それを手動で設定といった感じで、構築していたと思いますが、IPv6には、これをある程度自動化する仕組みがあります。

これは、DHCPv6-PDと呼ばれるプロトコルで実現します。

IPv4のDHCPは、ルータとホストマシンの両方を自動設定することができましたが、DHCPv6-PDは一定範囲のアドレスを、ルータ向けに配布するといったものになります。

ホストマシン向けには、ステートレスアドレス自動設定(SLAAC)を使う設定で進めます。

DHCPv6-PDを利用したルータの設定

IPv6では、アドレスの範囲の割り当てを委任する方法を使うことができます。これはDHCPv6-PD(Prefix Delegation)と呼ばれる方法です。

対応ルータは、まだ少ないのですが、非クラウド環境でIPv6対応のサーバを運用する場合は、DHCPv6-PDが便利です。

NURO-Bizは、このDHCPv6-PDによるアドレス割り当ての委任を提供しております。

DHCPv6-PDによって委任されるNURO-Bizのアドレスは、DHCPとあるので、なんだかすぐ値が変わってしまうと思い込んでしまいそうですが、そんなことはなく、IPv4の固定IPのように継続的かつ固定的に割り当てられますので、サーバ設置が可能です。

さてそこで重要となるのが、DHCPv6-PDに対応したルータですが、YAMAHAのRTX1210等が候補になりますが、ここではCISCOのC800シリーズ(IOSは15.X系)を利用してみます。


[拡大]

この図にあるように、VLANにサーバ群、GigabitEhernet8に上位プロバイダ(この場合Nuro-Biz)を、それぞれ接続する構成を想定します。

以下、上図のように、設定表記中、グローバルIDを赤、サブネットIDを緑、インタフェースIDを青で記載します。

>IPv6アドレスについては、コチラを参考にしてください>> IPv6アドレスについて

まずは、コンソールケーブルなどで、ルータに接続します。IPv4の設定は済んでいる前提で進めます。

gw>enable
Password:XXXX
gw#conf t
gw(config)#ipv6 unicast-routing
gw(config)#ipv6 cef

ここまでは、全体の設定です。

次に、上位プロバイダと接続しているインタフェースの設定になります。

gw(config)# interface GigabitEthernet 8
gw(config-if)# ipv6 enable
gw(config-if)# ipv6 dhcp client pd dhcp-prefix
gw(config-if)# ipv6 dhcp client request vendor
gw(config-if)# end
gw#

これで、DHCPv6-PDの設定ができました。

ipv6 dhcp client pdに続く文字列はなんでもいいのですが、ここでは、「dhcp-prefix」としています。

この文字列は、後述の別インタフェースのアドレスの設定の際に、グローバルID部分を意味する文字列として、利用できます。この文字列「dhcp-prefix」とサブネットIDとインタフェースIDと一緒に記載して、アドレスとして表現します。

割り当てられたアドレス範囲を確認するには、以下のコマンドを打ちます。

gw# show ipv6 dhcp interface
GigabitEthernet8 is in client mode
  Prefix State is OPEN
  Renew will be sent in 01:06:51
  Address State is IDLE
  List of known servers:
    Reachable via address: FE80::1
    DUID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    Preference: 0
    Configuration parameters:
      IA PD: IA ID 0x00XXXXXX, T1 XXXX, T2 XXXX
        Prefix: 240D:XXXX:XXXX:XX00::/56
                preferred lifetime 10800, valid lifetime 10800
                expires at XXX XX 2016 HH:MM PM (9411 seconds)
      DNS server: 240D:XXXX:XXXX:XXXX::XX
      DNS server: 240D:XXXX:XXXX:XXXX::XX
      Information refresh time: 0
  Prefix name: dhcp-prefix
  Prefix Rapid-Commit: disabled
  Address Rapid-Commit: disabled

と確かに、/56のプリフィックスでアドレスが来ていることが判ります。

続いて、サーバ群を設置するVLANの設定です。

サーバ設置ネットワークの設定

サーバを設置するネットワークは、CiscoルータのVLANとします。

ここでは、VLAN1とします。

設定は以下の通りです。

gw#conf t
gw(config)# interface GigabitEthernet 0
gw(config-if)# switchport mode access
gw(config-if)# switchport access vlan 1
gw(config-if)# no shutdown
gw(config-if)# no ip address
gw(config-if)# end
gw#

これで、ギガビットイーサネットのポート0番をVLAN 1に割り当てます。

(たぶん初期設定のままでいけるとおもいますが、念のため。)

 

続いて、VLANのグローバルスコープと、リンクローカルスコープにそれぞれアドレスを振ります

リンクローカルアドレスと、DHCPv6-PDのアドレスを設定します。

デフォルトゲートウェイとなるリンクローカルアドレスには、FE80::1を割り当てることが多いので、ここでもFE80::1を割り当てます。

 

gw#conf t
gw(config)# interface Vlan1
gw(config-if)# ipv6 address FE80::1 link-local
gw(config-if)# ipv6 address dhcp-prefix ::1:0:0:0:1/64
gw(config-if)# ipv6 enable
gw(config-if)# end
gw#

上記の設定で、VLAN1にリンクローカルアドレスFE80::1が割り当てられます。

なお、ルータに接続されたホストに、ステートレスアドレス自動設定(SLAAC)を行う、ルータ広告(RA)は有効になっていますので、このリンクローカルのアドレスと、ネットワークのプリフィックスが広告されます。

その次の行では、IPv6アドレスとして、上位プロバイダから割り当てられたDHCPv6-PDのグローバルID部分を意味する(「dhcp-prefix」(これは、インタフェースの設定で、ipv6 dhcp client pd コマンドに続いて指定した文字列と同じ)と、サブネットID(1)とインタフェースID(:0:0:0:1)を結合したアドレス(dhcp-prefix ::1::0:0:0:1)を設定します。

※今回は例のため、dhcp-prefix ::1::0:0:0:1といった設定をしていますが、ルータに振られたグローバルIPアドレスは、隠しておきたいところ。インタフェースIDの部分は、乱数などで予想できない数値をおすすめします。

このように、プリフィックス表記(この例ではdhcp-prefix)を含む設定が行えるのは、インタフェースのアドレス設定(ipv6 address)だけのようです。

たとえば、トラフィックフィルタの設定では使えないようです。

確認は以下のコマンドで行えます。

gw#show ipv6 interface vlan 1
Vlan1 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::1
  No Virtual link-local address(es):
  General-prefix in use for addressing
  Global unicast address(es):
    240D:XXXX:XXXX:XX01::1, subnet is 240D:XXXX:XXXX:XX01::/64 [CAL/PRE]
      valid lifetime 10004 preferred lifetime 10004
  Joined group address(es):
    FF02::1
    FF02::2
    FF02::1:FF00:1
  MTU is 1500 bytes
  ICMP error messages limited to one every 100 milliseconds
  ICMP redirects are enabled
  ICMP unreachables are sent
  Output features: CCE Classification
  ND DAD is enabled, number of DAD attempts: 1
  ND reachable time is 30000 milliseconds (using 30000)
  ND advertised reachable time is 0 (unspecified)
  ND advertised retransmit interval is 0 (unspecified)
  ND router advertisements are sent every 200 seconds
  ND router advertisements live for 1800 seconds
  ND advertised default router preference is Medium
  Hosts use stateless autoconfig for addresses.

と、設定通りになっています。

トラフィックフィルタの設定

当然ですが、IPv6でも、サーバを保護し、必要な通信のみ許可するように、フィルタを設定します。

以下、問題ないように記載したつもりですが、十分にテストした物ではありません。

みなさんが理解できる範囲で、参考程度にご利用ください。

 

まずは、上位プロバイダ方向に送信(out)されるパケットについて、以下の通り許可します。

このうち、TCPとUDPについては、LAN内部から開始した通信に対する応答を許可するための一時的なACLを作る、「refrect REFLECTOUT」を追加します。

gw#conf t
gw(config)# no ipv6 access-list filter_ipv6_out
gw(config)# ipv6 access-list filter_ipv6_out
gw(config-acl)# permit tcp 240D:XXXX:XXXX:XX00::/56 any reflect REFLECTOUT
gw(config-acl)# permit udp 240D:XXXX:XXXX:XX00::/56 any reflect REFLECTOUT
gw(config-acl)# permit icmp any any
gw(config-acl)# deny ipv6 any any log
gw(config-acl)# exit
gw(config)# 

上位プロバイダ方向から受信(in)するパケットについては、一時的なACLである、REFLECTOUTに加え、サービスを行うポートへの通信を許可します。

ルータを 240D:XXXX:XXXX:XX01::1に設定したので、サーバのIPv6のグローバルアドレスは、 240D:XXXX:XXXX:XX01::2とします。

今回は、このサーバで、DNSとHTTPのサービスを提供しますので、HTTP/1.1の80番(www)ポートとHTTP/2用の443番ポート、それからDNS用に53番ポート(domain)を開けます。

一旦接続が済んだ通信については許可するよう、アクセスリストの先頭で、permit tcp any any establishedとします。

また、ルータ広告や、DHCPv6のパケットを受信するため、リンクローカルの通信も許可(permit ipv6 FE80::/10 any)しておきます。

icmpについては、pingと、tracerouteの戻りとして必要なパケットを許可し、これら以外を拒否するようにします。

gw#conf t
gw(config)# no ipv6 access-list filter_ipv6_in
gw(config)# ipv6 access-list filter_ipv6_in
gw(config-acl)# permit tcp any any established
gw(config-acl)# evaluate REFLECTOUT
gw(config-acl)# permit udp any 240D:XXXX:XXXX:XX01::2/128 eq domain
gw(config-acl)# permit tcp any 240D:XXXX:XXXX:XX01::2/128 eq www
gw(config-acl)# permit tcp any 240D:XXXX:XXXX:XX01::2/128 eq 443
gw(config-acl)# permit ipv6 FE80::/10 any
gw(config-acl)# permit icmp any any echo-reply
gw(config-acl)# permit icmp any any time-exceeded
gw(config-acl)# permit icmp any any unreachable
gw(config-acl)# permit icmp any any packet-too-big
gw(config-acl)# deny ipv6 any any log
gw(config-acl)# exit
gw(config)# 

これを上位プロバイダに接続しているインタフェースに設定します。

gw#conf t
gw(config)# interface GigabitEthernet8
gw(config-if)# ipv6 traffic-filter filter_ipv6_in in
gw(config-if)# ipv6 traffic-filter filter_ipv6_out out
gw(config-if)# end
gw#

以下、コピペ用です。

conf t

no ipv6 access-list filter_ipv6_out
ipv6 access-list filter_ipv6_out
permit tcp 240D:XXXX:XXXX:XX00::/56 any reflect REFLECTOUT
permit udp 240D:XXXX:XXXX:XX00::/56 any reflect REFLECTOUT
permit icmp any any
deny ipv6 any any log
exit

no ipv6 access-list filter_ipv6_in
ipv6 access-list filter_ipv6_in
 permit tcp any any established
 evaluate REFLECTOUT
 permit udp any 240D:XXXX:XXXX:XX01::2/128 eq domain
 permit tcp any 240D:XXXX:XXXX:XX01::2/128 eq www
 permit tcp any 240D:XXXX:XXXX:XX01::2/128 eq 443
 permit ipv6 FE80::/10 any
 permit icmp any any echo-reply
 permit icmp any any  time-exceeded
 permit icmp any any unreachable
 permit icmp any any  packet-too-big
 deny ipv6 any any log
exit

interface GigabitEthernet8
 ipv6 traffic-filter filter_ipv6_in in
 ipv6 traffic-filter filter_ipv6_out out
 end

次はいよいよ、サーバにIPv6アドレスを設定します。

NEXT >> IPv6スタティックアドレスの設定

©Copyrights 2015-2023, non-standard programmer

このサイトは、あくまでも私の個人的体験を、綴ったものです。 軽く参考程度にご利用ください。