昨年末のGMOクラウドとのごたごたでサーバを再びさくらのVPSに移動したため、ちょうど良い機会なのでIPv6に対応させた。
さくらVPSでは基本的にIPv6が有効なので特にすることも無くIPv6に対応できる。 逆に、IPv6が有効になっているので、Firewall設定をしないとマズイ。
IPv6はiptablesではなくip6tablesでフィルタするので、従来通りiptablesだけを設定するとv6経由では穴だらけとなってしまう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited COMMIT |
HTTP/HTTPS着信だけ許可する定義、こいつを /etc/sysconfig/ip6tables として保存してやって、chkconfig ip6tables on と /etc/init.d/ip6tables start しておく。
あとは、ApacheやPHPなどは特に何もせず動くけど、こちらもIPの処理を書いている場合にはIPv4フォーマット以外にIPv6フォーマットが来るのでその点で注意。
せっかくIPv6対応したので、WordpressにIPv4/6の接続状況表示を出してみた。
1 2 3 4 5 6 7 8 |
接続状況: <?php if(preg_match('/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/',$_SERVER['REMOTE_ADDR'])){ echo('IPv4'); }else{ echo('IPv6'); } ?> |
SERVER[‘REMOTE_ADDR’]はv6だとfe80:みたいなフォーマットになるんで、そこのフォーマットをチェックしてやるだけの手抜き仕様。
あとは、サイトへの誘導のためDNSにレコードを登録する。 IPv4のAレコードに対して、IPv6はAAAAレコードに記述する。
Valuedomainでは既に対応しているので、従来の設定で
a blog 153.126.194.176
みたいになっていたのに追記で
aaaa blog 2401:2500:102:3033:153:126:194:176
みたいにして記述する。
IPv6でサイトが稼働しているのをチェックするには、IPv6Proxyなんかを使うと、v4環境からでもv6で表示できることを確認できる。
ブラウザでIPv6アドレスを直うちする場合は、 http://[2401:2500:102:3033:153:126:194:176]/ のように、IPを[]で囲むのが作法。
(972)