WordPressをIPv6に対応し、IPv4/IPv6を判別する

先日、光回線を上田ケーブルビジョン(UCV)50Mからコミュファ光の1Gに変更しました。UCVは50M契約で上り/下りとも40Mbps程度安定して出て、pingも5ms程度と調子はすこぶるよかったのですが、電話と光回線込みで1000円以上安くなるということで乗り換えてしまいました。

コミュファは時間帯によっては速度がばらつきますが、遅くても80Mbps、早いと400Mbps(有線)くらい出ます。pingは15ms程度と悪化しました。

前置きが長くなりましたが、UCVではIPv4のみだったところ、コミュファはIPv6にも対応していたので、さっそく本BlogサイトもIPv6アクセスに対応してみました。

1. AWS EC2にIPv6設定をする

-1. ネットワークアダプタにIPv6アドレスを付与

当該EC2インスタンスのネットワークアダプタにIPv6アドレスを付与します。EC2インスタンスの属するVPCとサブネットにも自動的にIPv6のネットワークアドレスが付与されるかと思いますが、されない場合は手動で足してください。

-2. EC2インスタンスのネットワーク設定を変更

当該EC2インスタンスにSSHログインし、以下の2つのファイルを下記のように書き換えます。do not editって書いてありますが無視 笑

$ sudo -i
# vim /etc/sysconfig/network
# Created by cloud-init on instance boot automatically, do not edit.
#
NETWORKING=yes
#NETWORKING_IPV6=yes
#IPV6_AUTOCONF=no
HOSTNAME=localhost.localdomain
NOZEROCONF=yes

 

# vim /etc/sysconfig/network-scripts/ifcfg-ens5
# Created by cloud-init on instance boot automatically, do not edit.
#
BOOTPROTO=dhcp
DEVICE=ens5
HWADDR=xx:xx:xx:xx:xx:xx
IPV6INIT=yes
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
PEERDNS=no
DHCPV6C=yes
DHCPV6C_OPTIONS=-nw
PERSISTENT_DHCLIENT=yes
RES_OPTIONS="timeout:2 attempts:5"
DHCP_ARP_CHECK=no

 

t2.nano→t3a.nanoにインスタンスタイプを変換する際に、eth0→ens5に変わっていますので、eth0を削除します。これを削除しないと、ネットワークアダプタの再起動に失敗します(実はこれにめちゃくちゃハマりました汗)いままでよくこの状態で動いていたものです。

# rm -rf /etc/sysconfig/network-scripts/ifcfg-eth0

 

ネットワークサービスを再起動して完了。

Apacheのバーチャルホスト設定はデフォルトでIPv4/IPv6両対応なのでいじらなくても大丈夫でした。逆にIPv6でアクセスがきたらこっちのサイトを表示、とやる方法もあるようですが今回は割愛。

# systemctl restart network

 

 

2. セキュリティグループにIPv6の設定をする

当該セキュリティグループのインバウンドの TCP/80、TCP/443に「 ::/0」を追加します。

 

 

3. DNS AAAAレコードを設定する

お名前.com等で、上記で設定した IPv6アドレスをAAAAレコードに追加します。IPv4はAレコードですが、IPv6はAAAAレコードです。

 

その後、DNSが浸透するまで数十分待って、IPv6テストサイトで疎通を確認してみてください。

 

4. WordPressにIPv4/IPv6判別アイコンをつける(任意)

IPv6アクセスの準備ができたら、ちゃんとIPv6でアクセスがきているかを確認するために、WordPressのIPv4/IPv6判別アイコンを表示したい箇所に以下を追記します(任意)。footer.php あたりが比較的簡単です。

<?php
    $ipv4 = '^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$';
    if (preg_match('/' . $ipv4 . '/', $_SERVER['REMOTE_ADDR']) ) {
        echo '<br>あなたはIPv4でアクセスしています<br>';
    }else{
        echo '<br>あなたはIPv6でアクセスしています<br>';
        echo '<img src="/images/ipv6.png" alt="ipv6" border="0" />';
    }
?>
/wp-content/themes/twentyfourteen/footer.php 全文
<?php
/**
 * The template for displaying the footer
 *
 * Contains footer content and the closing of the #main and #page div elements.
 *
 * @package WordPress
 * @subpackage Twenty_Fourteen
 * @since Twenty Fourteen 1.0
 */
?>
    </div><!-- #main -->
    <footer id="colophon" class="site-footer" role="contentinfo">
        <?php get_sidebar( 'footer' ); ?>
            <div class="site-info">
                <?php do_action( 'twentyfourteen_credits' ); ?>
                    <?php
                        if ( function_exists( 'the_privacy_policy_link' ) ) {
                            the_privacy_policy_link( '', '<span role="separator" aria-hidden="true"></span>' );
                        }
                   ?>
                   <a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyfourteen' ) ); ?>" class="imprint">
                   <?php printf( __( 'Proudly powered by %s', 'twentyfourteen' ), 'WordPress' ); ?>
                   </a>

                   <?php
                       $ipv4 = '^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$';
                       if (preg_match('/' . $ipv4 . '/', $_SERVER['REMOTE_ADDR']) ) {
                            echo '<br>あなたはIPv4でアクセスしています<br>';
                       }else{
                           echo '<br>あなたはIPv6でアクセスしています<br>';
                           echo '<img src="/images/ipv6.png" alt="ipv6" border="0" />';
                       }
                   ?>
                </div><!-- .site-info -->
            </footer><!-- #colophon -->
        </div><!-- #page -->
    <?php wp_footer(); ?>
</body>
</html>

 

アクセス結果

IPv4アクセス(UQモバイル 4G)

IPv6アクセス(コミュファ光 Wi-Fi)

 

ページ最下部にIPv4/IPv6判別アイコンが付加され、IPv6でのアクセスが確認できました!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

リンクが含まれる投稿はサイト管理者の承認後に表示されます(スパム対策)