IPv6 Tunnel Brokerを使ってIPv6ネイティブな環境を構築する

# IPv6ネイティブなネットワークを構築したい
iOSでのIPv6オンリーネットワークへの対応が必須になったのを機会に社内のネットワークをネイティブなIPv6に対応させようと思ったのですが、勤務先が利用しているネットワーク接続サービスがUSENの[GATE02(旧BROAD-GATE 02)](http://www.usen.com/gate02/)で、一向にIPv6に対応する様子がないサービスだったので[Hurricane Electric](http://he.net/)が提供する[IPv6 Tunnel Broker](https://tunnelbroker.net/)というサービスを使ってIPIPトンネルによるIPv6アクセス環境を構築してみました。

## IPv6 Tunnel Brokerとは
[Hurricane Electric](http://he.net/)が提供する無料のIPv6トンネリングサービスでIPv4インターネットへの接続環境(グローバルIPを推奨)とIPIPトンネル(IPv6)に対応可能なルーターまたはホストマシンが用意できればオンラインサインアップからの申し込みで/48のプレフィックスのIPv6アドレスの割り当てとIPIPトンネル（IPv6 over IPv4）の接続先エンドポイントの提供を受けることができます。

## IPv6 Tunnel Brokerのホームページ
#### 新規アカウントの登録
[IPv6 Tunnel Brokerのホームページ](https://tunnelbroker.net/)で「Register」または「Sign up now!」のボタンをクリックすれば新規アカウントの登録を行なうことができます。
![スクリーンショット 2017-02-02 14.31.39r.png](https://qiita-image-store.s3.amazonaws.com/0/148717/d542b873-dfaa-6bb7-8444-c7356f0d142c.png)

#### アカウント情報の登録
![スクリーンショット 2017-02-02 14.36.10.png](https://qiita-image-store.s3.amazonaws.com/0/148717/f7f1de65-457d-b47e-ec7f-788ca6d5ab6f.png)

登録に必要な全ての情報の入力が完了して、利用規約に同意(「I have read and agree to the Terms of Service」をチェック)すると「Register」ボタンが有効になるので、これをクリックすれば仮アカウントが作成され、「Email」に設定したメールアドレスへと登録確認のメールが送信されます。

仮登録の完了とともに、以下の様に確認メール送信のメッセージが表示されますからIPv6 Tunnel Brokerのメールアドレス(ipv6@he.net)からのメールがシパムとしてゴミ箱に行かない様に注意しましょう。
![スクリーンショット 2017-02-02 14.38.42.png](https://qiita-image-store.s3.amazonaws.com/0/148717/a1fa9759-a732-968e-c9c7-86540ed375a9.png)


### 受信したメールからの登録の確認
IPv6 Tunnel Brokerのメールアドレス(ipv6@he.net)から以下の様な登録確認のメールが届いたら、本文中の「Verify:」に続く確認用リンクをクリックしてブラウザでオープンされた[IPv6 Tunnel Brokerのホームページ](https://tunnelbroker.net/)に先ほど登録したアカウントの「Account Name:」と「Password:」の情報を入力して[IPv6 Tunnel Brokerのホームページ](https://tunnelbroker.net/)にログインすればアカウントの登録は完了です。
![スクリーンショット 2017-02-02 14.39.26r.png](https://qiita-image-store.s3.amazonaws.com/0/148717/8ec7c22d-ff1c-951b-fd1b-0440ea56faf5.png)

### 新しいトンネルの作成
登録確認メールのリンクから[IPv6 Tunnel Brokerのホームページ](https://tunnelbroker.net/)へとログインすると次の様な「Main Page」が表示されるので、ここで左側の「User Functions」にある「Create Regular Tunnel」のリンクをクリックして新しいトンネルの作成を行ないます。
![スクリーンショット 2017-02-02 14.40.56r.png](https://qiita-image-store.s3.amazonaws.com/0/148717/8401deb7-be60-ba17-c5b7-43b1d460556f.png)

新しいトンネルを作成するために必要な情報は自分が利用するトンネルエンドポイントのホストまたはルーターのグローバルIPアドレス「IPv4 Endpoint (Your side):」とIPv6 Tunnel Broker側のトンネルエンドポイントのアドレスです。
「IPv4 Endpoint (Your side):」にはIPv6 Tunnel Broker側のトンネルエンドポイントからアクセス可能なグローバルIPアドレスを設定する必要があります。
もし、[IPv6 Tunnel Brokerのホームページ](https://tunnelbroker.net/)に自分の自分側のトンネルエンドポイントに利用するホストからアクセスしているのであればどうページの「You are viewing from:」の欄にそのIPアドレスが表示されているはずです。
もし、そのホストがNATの内側に設置されたホストであれば「You are viewing from:」にはNATを司るルーターのIPアドレスが表示されているはずなので、「IPv4 Endpoint (Your side):」にはそのルーターの持つグローバルIPアドレスを設定して、ルーターではIPv6 Tunnel BrokerとのIPIP接続で使われるポート(41番)の開放と、このプロトコルのNATの内側(ローカルネットワーク)でトンネルを行なうホストへの転送(ポートフォワーディング)の設定が必要となります。
IPv6 Tunnel Broker側のトンネルエンドポイントについては、設定ページに利用可能なIPv6 Tunnel Broker側のトンネルエンドポイントの一覧が用意されているので、この中から自分のホストに一番近いロケーションを選ぶと良いでしょう。(例えば、日本国内であれば「Tokyo,JP」を選べば良いでしょう)

![スクリーンショット 2017-02-02 14.44.05rr.png](https://qiita-image-store.s3.amazonaws.com/0/148717/7540d63c-046b-5f35-24f7-9da10d9a3e86.png)

「IPv4 Endpoint (Your side):」に設定されたIPアドレスがIPv6 Tunnel Broker側のトンネルエンドポイントのサーバーからアクセス可能なIPアドレスであれば以下の様に「IP is potential tunnel endpoint.」のメッセージが表示されるので「Create Tunnnel」ボタンをクリックして新しいトンネルの作成を行ないます。

![スクリーンショット 2017-02-02 14.45.25r.png](https://qiita-image-store.s3.amazonaws.com/0/148717/9296c191-cc6b-49c1-1566-2da9919dfc62.png)

もし、ここで「IPv4 Endpoint (Your side):」に設定されたIPアドレスが、例えばNATの外側のグローバルIPではなくてローカルIPだったりするなど、IPv6 Tunnel Broker側のトンネルエンドポイントのサーバーからアクセス不可能であった場合には、以下の様にエラーメッセージが表示されるので正しいIPアドレスを設定する必要があります。

![スクリーンショット 2017-02-02 17.38.09.png](https://qiita-image-store.s3.amazonaws.com/0/148717/4bad79af-2312-b57f-5921-02bf8b1ec986.png)

正常にトンネルが作成されると、以下の様に新しく作成されたトンネルの概要が表示されるはずです。

![スクリーンショット 2017-02-02 14.46.08r.png](https://qiita-image-store.s3.amazonaws.com/0/148717/07247ded-7806-c642-23c8-8540c082ed9e.png)


#### 各種OS、ルーターでの設定例
[IPv6 Tunnel Brokerのホームページ](https://tunnelbroker.net/)にログインした状態で「Main Page」から設定済みのトンネル一覧「Configured Tunnels」のトンネル名称「Name」リンクをクリックすると表示されるトンネル詳細「Tunnnel Detailes」ページで設定のサンプル「Example Configurations」タブをクリックすることで各種UNIX系OSや一部ルーター用のサップルの設定情報を得ることができます。
![スクリーンショット 2017-02-02 14.47.10.png](https://qiita-image-store.s3.amazonaws.com/0/148717/97f8f7aa-28be-7d5d-7b6d-de0e6f07688c.png)

### Linux net-toolsを使ってトンネル接続を行なう
CentOS 5.xやCent OS 6.xで使われるnet-toolsを利用しての設定例は[IPv6 Tunnel Brokerのホームページ](https://tunnelbroker.net/)で「Main Page」->「Configured Tunnels」->「Tunnnel Detailes」->「Tunnnel Detailes」の順にページを遷移して「Select Your OS」のプルダウンから「Linux-net-tools」を選択します。
「Copy and paste the following commands into a command window:」のテキストボックスにLinuxのnet-toolsで行なうべき設定の例が表示されるので、これを元にして設定用のスクリプトなどを用意すると良いでしょう。

```
ifconfig sit0 up
ifconfig sit0 inet6 tunnel ::XXX.XXX.XXX.XXX
ifconfig sit1 up
ifconfig sit1 inet6 add 2001:470:XXXX:XXXX::2/64
route -A inet6 add ::/0 dev sit1
```

一時的に設定するのであれば、スーパーユーザー権限で起動したシェル上で上記の設定を行なうことでこの設定を行なったホストからIPv6ネットワークへのアクセスが可能となっているはずです。
IPトンネルを設定したホストをローカルネットワーク内の他のホストのためのゲートウェイとするためには、更にRA(ルーター広告)を行なうためのradvdなどの設定やIPv6ファイアウォールの設定なども行なう必要がありますが、ここでは説明しません。
特に、ルーター広告などを行なってローカルネットワーク内の他のホストにIPv6アドレスの割り当てを行なってしまうと、適切なルーティングやファイアウォールなどによる権限の設定を行なっておかないと、これらホストに対してもローカルネットワーク街のインターネット上の多くのホストからアクセスが可能となってしまうので注意が必要です。

### Linux iproute2を使ってトンネル接続を行なう
一応旧来のnet-toolsを使ってIPIPトンネルの設定を行なう手順を記載しましたが、すでにnet-toolsは非推奨となっているので、最近のLinuxであればここに示すiproute2による設定を行なうのが良いかもしれません。
net-toolsを利用しての設定例は[IPv6 Tunnel Brokerのホームページ](https://tunnelbroker.net/)で「Main Page」->「Configured Tunnels」->「Tunnnel Detailes」->「Tunnnel Detailes」の順にページを遷移して「Select Your OS」のプルダウンから「Linux-route2」を選択します。

```
modprobe ipv6
ip tunnel add he-ipv6 mode sit remote 74.82.46.6 local 192.168.XXX.XXX ttl 255
ip link set he-ipv6 up
ip addr add 2001:470:XXXX:XXXX::2/64 dev he-ipv6
ip route add ::/0 dev he-ipv6
ip -f inet6 addr
```
iproute2を使ってNAT環境下のホストでトンネルを設定する場合にはトンネルの手前(local=自分のホスト)のIPアドレスの指定に注意する必要があります。
[IPv6 Tunnel Brokerのホームページ](https://tunnelbroker.net/)で例示される設定のlocal側のIPアドレスはNATの出口となっているルーターのIPアドレスとなっているはずですから、これは実際のホストが利用しているIPアドレス(たぶん、192.168で始まるローカルIP)を指定する必要があります。
そして、もちろんNATの外側(インターネット)との中継を行なっているルーターではIPv6 Tunnel BrokerとのIPIP接続で使われるポート(41番)の開放と、このプロトコルのNATの内側(ローカルネットワーク)でトンネルを行なうホスト(local 192.168.XXX.XXX)へのポート転送の設定が必要となります。

### ヤマハのルーターを使ってトンネル接続を行なう
macOS、LinuxやFreeBSD、SolarisなどのUNIX系OS、一部のルーターなどについては先ほどのスクリーンショットにあるように[IPv6 Tunnel Brokerのホームページ](https://tunnelbroker.net/)に設定例が表示されるので、ほとんどの場合はその設定例をコピーアンドペーストすれば設定は完了しますが、残念ながらヤマハのRTXシリーズに対応した設定例はありません。
以下に自分が使っているRTX1200、RTX1210、NVR500にて動作確認を行なった設定の例を載せておきます。

```
tunnel select 1
 tunnel encapsulation ipip
 tunnel endpoint address 192.168.XXX.XXX 74.82.XXX.XXX
 ip tunnel mtu 1280
 ipv6 tunnel address 2001:470:XXXX:XXXX::2/64
 tunnel enable 1

ipv6 route default gateway tunnel 1
ipv6 routing on
ipv6 prefix 1 2001:470:XXXX:XXXX::/64
ipv6 lan1 rtadv send 1
```
この例ではルーターのlan1がローカルネットワーク側でIPアドレスに「192.168.XXX.XXX」が割り当てられていて、IPv6 Tunnel Brokerとのトンネルにルーターのtunnnel 1を使う状況を想定しています。
IPv6 Tunnel Broker側のトンネルエンドポイントのIPアドレス(74.82.XXX.XXX)やlan1に割り当てる自分の側のトンネルエンドポイントのIPv6アドレス(2001:470:XXXX:XXXX::2/64)はそれぞれ[IPv6 Tunnel Brokerのホームページ](https://tunnelbroker.net/)でトンネルを作成した際に「Tunnnel Detailes」ページに表示された「Server IPv4 Address:」や「Client IPv6 Address:」に置き換えてください。
以上の設定を行なうことでヤマハのルーターとIPv6 Tunnel Brokerのサーバー間でIPIPトンネルが貼られ、lan1側(ローカルネットワーク)に接続されたホストにルーターで稼働させたルータ広告機能によってIPv6アドレスが割り当てられるはずです。