|||||||||||||||||||||

なんぶ電子

- 更新: 

IPv4ネットワーク同士をIPv6で結ぶ(IPv4 over IPv6)

ipv4 over ipv6

友人や離れて住む家族にパソコンの操作方法を聞かれ、テレビ電話などで対応し「直接PCを操作したい」ともどかしい思いをしたり、会社のPCを家から操作したいと思ったことはありませんか。

それを実現するためにVNCというアプリがあるのですが、従来のIPv4接続のインターネットの世界では「固定IPアドレス」が必要か、そうでなければ「DDNS」といった仕組みと一緒に利用しないといけなかったりして、費用が掛かったり安定性に欠けたり、設定が複雑でした。

しかしIPv6の世界ではそのような仕組みを使わなくても、遠隔地とネットワークを接続できるようになりました。IPアドレスの数が増え、インターネットを接続する端末毎にグローバルネットワークアドレスが割り当てられるようになったためです。

ただ、通常IPv6環境を利用するには自分の家のインターネット環境をすべてを対応させなければいけません。ルーターやパソコン等の機器がIPv6に対応している必要があるだけでなく、それらの設定やプロバイダとの契約内容まで変更がおよびます。

そこでこの記事では、家庭内の環境はIPv4のままでNTTの光回線において標準(無料)で提供されているIPv6のサービスを使って、遠隔地とネットワーク接続をしてみます。この技術は「IPv4 over IPv6」や「DS-Lite」と呼ばれているそうです。

NTTの光サービスを使いますのでNTTの東西に壁があり、それらをまたいだ接続はできません※。

※正確には、IPv6でプロバイダ契約をすれば東西をまたぐことは可能です。しかし、その場合はIPv6を使って2つの場所を直接接続できると思いますので、この記事でやることに意味がないと思われます。

予備知識

前述のとおり接続したい2つの場所の回線が、NTTの光回線かNTT光コラボ回線で、NTTのサービスエリアが同じでなければいけません。そして、それぞれの場所でフレッツ・v6オプションを契約する必要があります。契約といっても、NTTを利用している場合ネットからの申し込みなら工事費・利用料ともに無料です。(コラボ光の場合はプロバイダにご確認ください)

接続のイメージは次の通りです。

ipv4overipv6接続イメージ

遠隔地のPCと接続するには図の①の方法と②の方法があります。①は一度インターネットに出てから目的の場所へ接続する方法。もう一つは②のようにインターネットに出る前のネットワーク上で目的の場所へ接続する方法です。

ここでは②の方を使います。なので、インターネット接続(プロバイダ契約)がなくても接続可能です。

ここでは触れませんが、ADSLだったりCATV系や電力会社系の回線だったりする場合は①のような接続を用います。

②のメリットとしては遠回りをしないので早いということ、なにより安定的な接続を低コストで実現できるということです。

デメリットとしては、第三者とあなたのPCがネットワークを通じてつながっている状態になるということです。IPアドレスさえわかれば、誰でも他人の家のネットワークまで到達できます。従来のIPv4においては第三者が到達できるのはルーターまででしたが、IPv6においてはその内側にある端末まで到達が可能です。

そのような理由から、今まで以上に「ファイアウォール」の存在が重要になってきます。二の足を踏みたくもなりますが、IPv6の世界は遅かれ早かれ家庭にもやってくると思いますので、家庭内のネットワークセキュリティの見直しのいい機会と考えましょう。

IPv6オプションの申し込み

IPv6オプションの申し込みをNTT西日本を例に説明していきます。詳しくは、公式ページのフレッツ・v6オプションのページに掲載されています。

IPv6のアドレスがすでに降りてきている場合はこちらそうでない場合はこちらから、NTTのサービス申込受付ページに進みます。

自分が契約している回線からでないとつながりません。また、IPv4サイトへの接続の場合はPPPoEのIDとパスワードを変えて接続する必要があります。その際のIDとパスワードは固定のようですが、ここで案内するのは問題かもしれませんので、公式ページをご確認ください。ただ公式ページに記述がなかったので、設定ガイドファイルにリンクします。このSTEP2の手順6にPPPoEの接続のための情報が記述されています。

ちなみに、NTT東日本の場合のアドレスは、IPv6の場合はこちらIPv4の場合はこちらとなっています。PPPoEの接続パスワード等はこちらよりご確認ください。

リンク先を表示させると「NGNサービス情報サイト」というトップページが出てきます。ここから「サポート情報」の項目内にある「申し込み受付」のリンクより設定ページに移ります。

設定ページのトップページには、下の方にログインボタンがあります。契約時の書類に記載してあるCAFから始まる「お客様ID」と「アクセスキー」を画面に入力します。

ログイン後のページ中段にある「フレッツ・v6オプション」の項目の「詳細・申込・変更」から申し込みをします。

自動で処理が行われているようで、夜に申し込みをしたのですが数時間後には開通の通知メールが来ました。

v6オプション申し込み

IPv6データの受け入れ

開通するとIPv6のアドレスが配布されるようになります。なにも設定しなくてもルーターの内側にまで配布されるかもしれませんが、そうでなければルーターー側の設定で、IPv6のデータを「IPv6パススルー」や「IPv6ブリッジ」等の名前のついた機能を使って内側に引き込みます。

本格的に運用する場合は、パケットフィルタリング等をして、意図しない場所からの通信を遮断しましょう。

例えば、Buffallo製品では、ND Proxyという機能と、IPv6フィルターを用います。ND Proxyは「Internet IPv6」の項目に選択項目として存在しますので、それを選択します。その後、「セキュリティー」「IPv6フィルター」の項目からフィルターを登録します。この製品のフィルターでは上から順にチェックしていき最初に一致したルールを採用するので、最後にすべてを拒否する設定を入れてその上に許可対象のルールを登録します。

このIPv6フィルターはND Proxyでなくても設定自体は可能ですが、「パススルー」モードだとフィルターが機能しません。逆にND Proxyだけ設定してフィルターの設定をしなくい場合は、ステートフルインスペクションファイアウォールとして機能するようですが、相手からのIPv4 over IPv6トンネル構築も防いでしまいます。

参考画像では相手先からのICMP(Ping)だけ受け付ける設定となっていますが、ネットワーク単位ですべての通信を許可するか、さらにそこから搾りこみIPv4 over IPv6トンネルのポート番号を指定したフィルターを作るようにします。

Buffalo ND ProxyにおけるIPv6フィルター

IPv6が配布されているかどうかは、WindowsPCのコマンドプロンプトから確認できます。

 ipconfig /all 

「IPv6 アドレス」の項目にアドレスが入っていたら成功しています。リンクローカル IPv6アドレスではありません。

IPv4のネットワーク同士をIPv6を使って接続するためには、IPv6上にIPv4のデータを通す技術「IPv4 over IPv6」を用います。「DS-Lite」とも表記されることがあります。IPv4とIPv6を混在させる技術としては、逆の「IPv6 over IPv4」(IPv4のネットワークにIPv6のデータを流す)方が一般的らしく、家庭用のルーターでは対応しているものは少ないです。IO-DATA製のルーター「WN-DX1167GR」がIPv4 over IPv6に対応可能なようですが、ルーティングに対応していないようで意図した使い方はできません。

家庭用ではないと思いますがヤマハのNVR510を、同機種間でのIPv4 over IPv6が可能です。

もう少し安く上げようとすると、経路設定のできるBaffaloのルーター(経路設定とIPv6フィルターがある機種が必要です)と、古いPCにDebianをインストールしてトンネル通信をするPCを設けるという構成になると思います。通常のインターネットをする際にはルーターのIPv4のPPPoE(IPv6通信ができない前提です)、ネットワーク間をつなげるにはPCを経由してIPv6という経路の振り分をします。

WindowsXP世代の古い使われていないPCで構いませんのでDebianをインストールしてください。ラズベリーパイでもかまいません。ネットワークアダプター(NIC)は複数持つ必要はありません。

トンネル構築用のDebianに自分が利用しているIPv4ネットワークのアドレスを割り振って再起動します。次のコマンドを入力して、IPv6アドレスが割り振られているのを確認します。

 $ ip -6 a 
debian ip -6 a

このIPv6アドレスをメモして次のスクリプトファイルに記述します。また、同様にして得た接続先のIPv6アドレスも必要です。

Debianに次のようなbashスクリプトファイルを作ります。環境に応じて変数の値を変えてください。

$ nano maketunnel.sh 
#!/bin/bash

#トンネル処理をするPC(またはルーターの)IPv6アドレス 相手側
REMOTE=2001:xxxx:xxxx:xxxx::1

#トンネル処理をするPC(またはルーターの)IPv6アドレス 自分側
LOCAL=2001:yyyy:yyyy:yyyy::1

#トンネルを作るNIC(ネットワークインターフェース)名
TUNNIC=enp2s0

#トンネルの名称
TUNNM=tunv6

#相手先のIPv4ネットワークを「ネットワークアドレス/サブネットマスク」の書式で。相手とネットワークアドレスが重複していると接続できません
REMOTEV4=192.168.202.0/24

#記述ミス確認の為、自分のIPv6アドレスへPingしています
ping -c 4 $LOCAL

#宛先にPingテストをします
ping -c 4 $REMOTE

#IP6トンネルモジュールをカーネルに追加します。
modprobe ip6_tunnel

#トンネルを作成します
ip -6 tunnel add $TUNNM mode ipip6 remote $REMOTE local $LOCAL dev $TUNNIC

#トンネルをリンクアップさせます
ip link set dev $TUNNM up

#ルーティングテーブルに追加アドレスを追加します。
ip route add $REMOTEV4 dev $TUNNM

#複数NIC間の転送を許可します
sysctl -w net.ipv4.ip_forward=1

このIPトンネルの張り方は15分で出来るRaspberryPi(Linux)でDS-Lite(IPv6/IPv4)を参考にさせていただきました。ありがとうございました。

スクリプトを保存したら実行可能にします。このスクリプトは管理者権限で起動させる必要がありますので、所有者をrootにして、所有者だけに権限を付与します。

筆者のDebian環境におけるスクリプトですので、状況に応じて書き換えてください。スクリプトの実行時、modprobeやsysctlが見つからないという内容のエラーが出たらパスが通っていませんので、その際は/sbin/modprobeという風に絶対パスに書き換えてください。また、ラズベリーパイ等の、sudo環境の場合もそれに読み替えてください。

作成したスクリプトに実行権限を付けるには次のようにします。

 # chown root:root maketunnel.sh
 # chmod 744 maketunnel.sh

スクリプトを手動で実行するか、PC起動時またはネットワーク起動時に自動実行されるように設定しておきます。

インターネット接続に使用しているルーターの設定(ルーティングテーブル)に、接続相手先のIPアドレスの場合は、作成したトンネル用PCのIPアドレスへ転送するように設定を記述します。Buffalo製のWXR-1750DHPだと次のようになります。

Buffaloルーティングテーブル設定

特定のPCからしか接続しないという場合は、ルーターではなくPCのルーティングテーブルだけ変えるという方法もあります。Windowsのコマンドプロンプトだと次のようになります。管理者権限が必要です。

route add 192.168.200.0 mask 255.255.255.0 192.168.100.1

route addの後は、宛先ネットワーク、宛先ネットワークのサブネットマスク、転送先(ゲートウェイ)アドレスとなっています。遠隔地向けのデータは、トンネル用PCに転送する設定にしています。

両方のネットワークでこのスクリプトを実行すると、ネットワーク間で接続が可能になります。PCを遠隔操作したい場合は、相手先のPCのプライベートIPアドレスを指定してVNCができます。VNCアプリについては別記事に記載します。

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告