WEBサーバー、IPv6化

この記事は約18分で読めます。

IPv4が枯渇!と、叫ばれてから、だいぶ経ちますが、
プロバイダ、周辺ソフトなど、IPv6対応が多いので、ここで、WEBサーバーのIPv6化に・・

CentOS7のIPv6(2020/08/01追記)

さくらのVPSの、CentOS7をIPv6に対応させます。

# cat /etc/centos-release
CentOS Linux release 7.8.2003 (Core)

↑7.8です。
# /sbin/ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet XXX.XXX.XXX.XXX  netmask 255.255.254.0  broadcast XXX.XXX.XXX.255
        ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (Ethernet)
        RX packets 8813761  bytes 2111429323 (1.9 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1092160  bytes 656616314 (626.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (Ethernet)
        RX packets 8  bytes 656 (656.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (Ethernet)
        RX packets 8  bytes 656 (656.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 140  bytes 11365 (11.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 140  bytes 11365 (11.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

↑IPv6は、設定されていません。
# vi /etc/sysconfig/network

NETWORKING=yes
NETWORKING_IPV6=yes
#IPV6_DEFAULTDEV="eth0"
#IPV6_DEFAULTGW="fe80::1"
 ↓
NETWORKING=yes
NETWORKING_IPV6=yes
IPV6_DEFAULTDEV="eth0"
IPV6_DEFAULTGW="fe80::1"

↑最後の2行のコメントを外します。設定内容は、さくらのVPS側できちんと設定されているので、このまま、有効にします。
vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"
IPADDR="XXX.XXX.XXX.XXX"
NETMASK="255.255.254.0"
GATEWAY="XXX.XXX.XXX.1"
ONBOOT="yes"
TYPE="Ethernet"
DNS1="133.242.0.3"
DNS2="133.242.0.4"
#IPV6INIT="yes"
#IPV6_ROUTER="no"
#IPV6ADDR="xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64"

 ↓

DEVICE="eth0"
IPADDR="XXX.XXX.XXX.XXX"
NETMASK="255.255.254.0"
GATEWAY="XXX.XXX.XXX.1"
ONBOOT="yes"
TYPE="Ethernet"
DNS1="133.242.0.3"
DNS2="133.242.0.4"
DNS3="2401:2500::1"
IPV6INIT="yes"
IPV6_ROUTER="no"
IPV6ADDR="xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64"

↑最後の3行を有効にします。実際のIPアドレスも、正しいアドレスになっています。

「DNS3=」の部分は、新たに加えます。「/etc/resolv.conf」を直接編集しても、反映されませんので、このネットワーク部分にDNSを指定します。

# vi /etc/sysctl.conf


# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).

# Do not accept RA
net.ipv6.conf.default.accept_ra=0
net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.eth0.accept_ra=0
# Do not use IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

 ↓ 

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0

↑最後2行を変更します。「1」を「0」にします。
# /etc/rc.d/init.d/network restart

↑ネットワークを再起動します。
# /sbin/ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet XXX.XXX.XXX.XXX  netmask 255.255.254.0  broadcast XXX.XXX.XXX.255
        inet6 XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX  prefixlen 64  scopeid 0x0<global>
        inet6 xxxx::xxxx:xxxx:xxxx:xxxx  prefixlen 64  scopeid 0x20<link>
        ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (Ethernet)
        RX packets 11227  bytes 708041 (691.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 685  bytes 99097 (96.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 28  bytes 2488 (2.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 28  bytes 2488 (2.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

↑IPv6が設定されました。

CentOS6のIPv6

DNS(bind)を利用しているサーバーが、CentOS6なので、こちらをIPv6に!
さくらのVPSのサーバーを利用してます。

# /sbin/ifconfig 
eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          inet addr:XXX.XXX.XXX.XXX  Bcast:XXX.XXX.XXX.XXX  Mask:255.255.255.0
          inet6 addr: XXXX::XXXX:XXXX:XXXX:XXXX/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:xx errors:0 dropped:0 overruns:0 frame:0
          TX packets:xx errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000

↑「inet6 addr」のところが、「Scope:Link」のみとなっています。
グローバルアドレスが設定されていません。

ネットワークの設定を行います。

vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=localhost.localdomain
  ↓
NETWORKING=yes
HOSTNAME=localhost.localdomain
NETWORKING_IPV6="yes"
IPV6_DEFAULTDEV="eth0"
IPV6_DEFAULTGW="XXXX::1"

↑「IPV6_DEFAULTGW」は、さくらインターネットが指定している、ゲートウェイを設定します。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 

DEVICE="eth0"
IPADDR="XXX.XXX.XXX.XXX"
NETMASK="255.255.255.0"
GATEWAY="XXX.XXX.XXX.1"
ONBOOT="yes"
TYPE="Ethernet"

  ↓

DEVICE="eth0"
IPADDR="XXX.XXX.XXX.XXX"
NETMASK="255.255.255.0"
GATEWAY="XXX.XXX.XXX.1"
ONBOOT="yes"
TYPE="Ethernet"
IPV6INIT=yes
IPV6_ROUTER="no"
IPV6ADDR=XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX

↑「IPV6ADDR」のところに、さくらインターネットで指定しているIPv6の「アドレス」(グローバルアドレス)を設定します。
# vi /etc/resolv.conf

options single-request-reopen
nameserver 133.242.0.3
nameserver 133.242.0.4
search sakura.ne.jp

  ↓

options single-request-reopen
nameserver 133.242.0.3
nameserver 133.242.0.4
nameserver 2401:2500::1
search sakura.ne.jp

↑「nameserver 2401:2500::1」を加えます。
このDNSも、さくらインターネットで指定しているIPv6の「DNS」を設定します。
# /etc/rc.d/init.d/network restart

↑ネットワークを再起動します
# /sbin/ifconfig 
eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          inet addr:XXX.XXX.XXX.XXX  Bcast:XXX.XXX.XXX.XXX  Mask:255.255.255.0
          inet6 addr: XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX/64 Scope:Global
          inet6 addr: XXXX::XXXX:XXXX:XXXX:XXXX/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:xx errors:0 dropped:0 overruns:0 frame:0
          TX packets:xx errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000

↑「Scope:Global」の行が増えました。これで、IPv6がアサインされました。
# ping6 XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX
PING XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX(XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX) 56 data bytes
64 bytes from XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX: icmp_seq=1 ttl=51 time=24.9 ms
64 bytes from XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX: icmp_seq=2 ttl=51 time=24.9 ms
64 bytes from XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX: icmp_seq=3 ttl=51 time=24.8 ms
64 bytes from XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX: icmp_seq=4 ttl=51 time=24.7 ms

↑「ping6」というコマンドで、疎通を試しましょう。

DNSのIP化

該当ドメインのNSレコードに設定しているIPをIPv6にします

↑上記は、お名前.comの設定です。
これは、ある独自ドメイン名のNSレコードを、その独自ドメインで設定する場合です。
IPv6のところに、IPv6のグローバルアドレスを入れます。

DNSのAAAAレコード設定

DNSを、IPv6に対応して、「AAAAレコード」を設定したいと思います。

DNSのIPv6の基本対応

vi etc/named.conf

options {
	listen-on-v6{any;}
}

↑「options」セクションに、「v6」の設定を入れます。
(実際には、「options」セクションには、複数行の設定があります)
zone "localhost" {
        type master;
        file "local.zone";
};

↑「localhost」を指定している、正引きのファイルに
              IN      NS      localhost.
              IN      A       127.0.0.1
              IN      AAAA    ::1

↑「AAAA」のレコード(最後の行)を追加します

該当WEBの正引き

(WEBのFQDN). IN AAAA XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX

↑グローバルアドレスを設定します。

WEBサーバーのIPv6設定

今回、nginxで設定をします。

昔の、nginxは、構築時に、「–with-ipv6」を指定して、コンパイルする必要がありましたが、
いまでは、デフォルトで、IPv6に対応しているので、「–with-ipv6」の指定は不要です。

listen 80;
listen [::]:80;

listen       443 ssl http2;
listen       [::]:443 ssl http2;

↑「listen」のところに、「[::]:」を設定した行を入れるだけです。

firewallなど

firewall-cmd
iptables
は、そのままで大丈夫です。

IPv6のチェック

外部のlinuxから、wget,pingで確認してみましょう

# wget -6 https://(サーバーFQDN)/
--XXXX-XX-XX XX:XX:XX--  https://(サーバーFQDN)/
Resolving (サーバーFQDN) ((サーバーFQDN))... XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX
Connecting to (サーバーFQDN) ((サーバーFQDN))|XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX|:443... connected.
HTTP request sent, awaiting response... 200 OK

↑「-6」オプションで、IPv6で、接続されます。うまくいきました。
# ping6 (サーバーFQDN)
PING (サーバーFQDN)((サーバーFQDN) (XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX)) 56 data bytes
64 bytes from (サーバーFQDN) (XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX): icmp_seq=1 ttl=64 time=0.063 ms
64 bytes from (サーバーFQDN) (XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX): icmp_seq=2 ttl=64 time=0.063 ms

↑「ping6」コマンドを使います。

外部アプリからのIPv6チェック

IPv6 test – web site reachability

から、該当WEBサーバーにアクセスをしてみましょう。

↑問題なければ、上記のようになるはずです。

このときの、サーバー側のログをみると、

XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX - - [XX/XX/XXXX:XX:XX:XX +0900] "GET / HTTP/1.0" 200 157410 "http://ipv6-test.com/validate.php" "ipv6-test.com validator"

と、IPv6からのアクセスとして、記録されるはずです。

IPv6結論

今では、簡単に設定できる、IPv6。WEB上での情報も多いので、楽に設定ができるかと思います。

参考記事(2020/10/20)

メールサーバー、postfix、dovecot 、rspamdで、ipv6化

 

タイトルとURLをコピーしました