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化