Edited at

IPv6でアクセスすると"via IPv6"って出るやつ

More than 1 year has passed since last update.

IPv6でアクセスすると"via IPv6"って出る例のやつ作りました。

(HTMLタグ貼るだけのやつが見つからなかったので)

表示してみる

IPv6から繋ぐと



が表示されます。

IPv4から繋ぐと



が表示されます。


使い方

<span id="kibousoft-viav6"></span>

<script type="text/javascript">
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://viav6.kibousoft.co.jp/', true);
xhr.onreadystatechange = function(){
if (xhr.readyState === 4 && xhr.status === 200){
  var dom = document.getElementById('kibousoft-viav6');
dom.innerHTML = xhr.responseText;
}
};
xhr.send(null);
</script>


ソースコード

汚いですが直書きです。大したことしてない。


index.php

<a href="https://github.com/kibousoft/viav6_web/" style="text-decoration: none; color: white;">

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$headers = apache_request_headers();
if ($headers['X-Forwarded-For']) {
$ip = $headers['X-Forwarded-For'];
}

if (preg_match('/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/', $ip)) {
echo '<div style="background: linear-gradient(#FF0000, #FF99CC); padding: 5px; border: 1px solid #333333; border-radius: 3px; font-size: 13px; width: 50px; text-align: center; font-family: sans-serif;">via IPv4</div>';
} else {
echo '<div style="background: linear-gradient(#0000FF, #99CCFF); padding: 5px; border: 1px solid #333333; border-radius: 3px; font-size: 13px; width: 50px; text-align: center; font-family: sans-serif;">via IPv6</div>';
}
?>
</a>



CORSの話

外部からXHRで取得される可能性のあるサイトでは、

Access-Control-Allow-Origin , Access-Control-Allow-Methods ヘッダーを返す必要があります。

.htaccessで以下を設定しました。


.htaccess

Header set Access-Control-Allow-Origin "*"

Header set Access-Control-Allow-Methods "GET"


インフラの話

最初Amazon API Gatewayでやろうとしたんですが、API GatewayはIPv6対応していませんでした。

なので、OpsWorksでPHP App Serverを立てて動かしています。

OpsWorksにも以下の問題がありました。


  • Application Load Balancer(IPv6対応)には対応していない

  • EC2へのIPv6アドレスのアタッチには対応していない

  • セキュリティグループでIPv6のTCP 80番が許可されていない

そのため、上記の設定は手動で行いました。


備考


  • Happy Eyeballsの関係で、サイトにはIPv4で繋がって、XHRはIPv6で繋がるケースもあるよねとか細かい話はなしで。