どうも IPv6 の RA (Router Advertisement) は /64 限定らしい。


どうもみむらです。
なんだかんだ、私の家では NVR500 を使って良い感じでインターネットをしていたりします。

YAMAHA NVR500 と OCN でひかり電話と IPv6

ヤマハルータと Hyper-V でネットワーク的な隔離環境を作ってみる

過去に書いたこの2つの記事を見れば、どういう環境かは簡単に想像出来るかと思います(

 

なんだかんだで、 Hyper-V 側に ipv6 環境を持って行かないとなーと思いまして
セグメントを変えて RA (Router Advertisement) を使って配信しようと思ってハマりましたのでメモ。

(どうでも良い雑談をすっ飛ばしたい方は、下の方まで読み飛ばしてください・・w)

 


プロローグ:

まず、何となく適当に、

ipv6 prefix 2 dhcp-prefix@pp2:cafe::/80

ipv6 lan1/1 address dhcp-prefix@pp2:cafe::1/80
ipv6 lan1/1 rtadv send 1 o_flag=on

こんな感じで書いてみました。

設定としては、
プロバイダから指定されたアドレスのプレフィックス (dhco-prefix@pp2) に
”cafe” というアドレスをくっつけたものをサブネットプレフィックスとして配信する設定。

(o_flag = ON : Other Flag,  これが設定されていると、DHCPv6 等を使ってアドレス以外の情報を撮ってくるようになります。)

 

image

一見、なんとなく良さそうな感じで RA が配信されるのですが、
どうもシステムに IP アドレスが設定される気配が無く。

 

どうしようか・・と思っていた所で、ルータの設定画面のトップページを見てみますと

image

・・・!  “/56 じゃん!” (OCN IPv6)

なら、 /64 としていじればいいんじゃね! ということで、

ipv6 prefix 2 dhcp-prefix@pp2:1100::/64

ipv6 lan1/1 address dhcp-prefix@pp2:1100::1/64
ipv6 lan1/1 rtadv send 1 o_flag=on

こんな感じで書いてみたところ、(これの書き方については後述)

image

なんかとっても良い感じで出てきたのでにっこり。

もちろん、カメさん、歩きます。

 


原因調査:

・・とはいっても気持ち悪いので、原因を調べることに。

友人に聞くのが早いかな・・と思ったので
いつもいろいろとお世話になっている、あたがわさんに聞いてみることに。

そうしましたらさくっと、
「RA は /64 限定ですよ!」 と。

まじすか・・! ということで RFC を当たってみることに。

 

参考にしましたのは下記の2つ。

RFC 4862 : IPv6 Stateless Address Autoconfiguration
http://tools.ietf.org/rfc/rfc4862.txt

RFC 4291 : IP Version 6 Addressing Architecture
http://tools.ietf.org/rfc/rfc4291.txt

 

まず、RFC 4862 の 5.5.3 “Router Advertisement Processing” を見てみますと、

image

こんな感じでアドレスが設定されますよ、と書いてあります。

でもって、次に RFC 4291 の 2.5.1 “Interface Identifiers” を見てみますと、

For all unicast addresses, except those that start with the binary value 000, Interface IDs are required to be 64 bits long and to be constructed in Modified EUI-64 format.

すべてのユニキャストアドレス(ネットワーク内においてただ一つの特定ノードを指すアドレスのこと)は、b000 (2進数表記) で始まるもの以外のアドレスの Interface ID は、すべて 64bit 長の “Modified EUI-64” 形式で表現される必要がある。

ということで。(訳はものすごく適当です。)

 

ここから考えるに、まず RFC 4862 5.5.3 の図に照らし合わせると、
N は N=64 である必要があって、 “Link prefix” は残った分 (64bit) になるということが読めます。

(※ RA の場合のみ。 DHCPv6 で割り当てる場合は、もちろん自由に設定できます。。)

 

このことから、先ほど上の方に書いたような、 /64 ではないプレフィックスを持った
RA が飛んできても、今のところ RFC と比較した際に誤ったデータであると見ることが出来て、
弾いた、というところが読み取れます。

 

ただ、上の図に挙げたように、
/64 でないプレフィックスの RA を飛ばすことが出来ているところから、
もしかすると /64 でないアドレスの配信も行えるようになるんですかね・・んー。

 


そういえば:

最初の部分のラストで、

ipv6 prefix 2 dhcp-prefix@pp2:1100::/64

ipv6 lan1/1 address dhcp-prefix@pp2:1100::1/64
ipv6 lan1/1 rtadv send 1 o_flag=on

 

こんな感じで設定を書きましたが、

ipv6 prefix 2 dhcp-prefix@pp2:11::/64

とかでも動くのでは、と思う方結構いると思うんです。でも動かないんです。。

 

今回のケースだと、プロバイダーから振ってくるアドレスは /56 でした。

IPv6 は 16バイト毎に “:” で区切って表現しますが、
今回の場合はすでに 56 バイト分指定されていますので、

xxxx:xxxx:xxxx:xxoo:oooo:oooo:oooo:oooo

こんな感じ ( o が指定できる場所 ) になります。
また、IPv6 のアドレスでは、高い位の 0 は省略できる事になっています。
(数学や算数での数字の表現と一緒です。)

つまり、 1234:56:7::1  は、 1234:0056:0007:0000:0000:0000:0000:0001 と同値です。

 

・・・たぶんヤマハルータ内の処理プログラムのバグのような気がするのですが

ipv6 prefix 2 dhcp-prefix@pp2:11::/64

と書いた場合に一度、 dhcp-prefix@pp2:0011::/64 として展開されるようで、

:xxxx:xxoo:oooo::  の部分に  :xxxx:xx00:11oo:: として当てはめられて、
/64 ですから、 :xxxx:xx00:oooo::  として配信されてしまうようです。

(解析等はしていませんので、何とも言えませんが・・。

 

一方で、

ipv6 prefix 2 dhcp-prefix@pp2:1100::/64

と書きますと、

:xxxx:xxoo:oooo::  の部分に  :xxxx:xx11:00oo:: として当てはめられて、
/64 ですから、 :xxxx:xx11:oooo::  として配信される、と。そういう感じ。

 

・・・ちょっとヤマハさんの中の人に聞いてみようかなぁと思ったのですが、
どうやら明日から夏期休業らしく・・。どこかで聞いてみよう・・。

どうも IPv6 の RA (Router Advertisement) は /64 限定らしい。


どうもみむらです。
なんだかんだ、私の家では NVR500 を使って良い感じでインターネットをしていたりします。

YAMAHA NVR500 と OCN でひかり電話と IPv6

ヤマハルータと Hyper-V でネットワーク的な隔離環境を作ってみる

過去に書いたこの2つの記事を見れば、どういう環境かは簡単に想像出来るかと思います(

 

なんだかんだで、 Hyper-V 側に ipv6 環境を持って行かないとなーと思いまして
セグメントを変えて RA (Router Advertisement) を使って配信しようと思ってハマりましたのでメモ。

(どうでも良い雑談をすっ飛ばしたい方は、下の方まで読み飛ばしてください・・w)

 


プロローグ:

まず、何となく適当に、

ipv6 prefix 2 dhcp-prefix@pp2:cafe::/80

ipv6 lan1/1 address dhcp-prefix@pp2:cafe::1/80
ipv6 lan1/1 rtadv send 1 o_flag=on

こんな感じで書いてみました。

設定としては、
プロバイダから指定されたアドレスのプレフィックス (dhco-prefix@pp2) に
”cafe” というアドレスをくっつけたものをサブネットプレフィックスとして配信する設定。

(o_flag = ON : Other Flag,  これが設定されていると、DHCPv6 等を使ってアドレス以外の情報を取ってくるようになります。)

 

image

一見、なんとなく良さそうな感じで RA が配信されるのですが、
どうもシステムに IP アドレスが設定される気配が無く。

 

どうしようか・・と思っていた所で、ルータの設定画面のトップページを見てみますと

image

・・・!  “/56 じゃん!” (OCN IPv6)

なら、 /64 としていじればいいんじゃね! ということで、

ipv6 prefix 2 dhcp-prefix@pp2:1100::/64

ipv6 lan1/1 address dhcp-prefix@pp2:1100::1/64
ipv6 lan1/1 rtadv send 1 o_flag=on

こんな感じで書いてみたところ、(これの書き方については後述)

image

なんかとっても良い感じで出てきたのでにっこり。

もちろん、カメさん、歩きます。

 


原因調査:

・・とはいっても気持ち悪いので、原因を調べることに。

友人に聞くのが早いかな・・と思ったので
いつもいろいろとお世話になっている、あたがわさんに聞いてみることに。

そうしましたらさくっと、
「RA は /64 限定ですよ!」 と。

まじすか・・! ということで RFC を当たってみることに。

 

参考にしましたのは下記の2つ。

RFC 4862 : IPv6 Stateless Address Autoconfiguration
http://tools.ietf.org/rfc/rfc4862.txt

RFC 4291 : IP Version 6 Addressing Architecture
http://tools.ietf.org/rfc/rfc4291.txt

 

まず、RFC 4862 の 5.5.3 “Router Advertisement Processing” を見てみますと、

image

こんな感じでアドレスが設定されますよ、と書いてあります。

でもって、次に RFC 4291 の 2.5.1 “Interface Identifiers” を見てみますと、

For all unicast addresses, except those that start with the binary value 000, Interface IDs are required to be 64 bits long and to be constructed in Modified EUI-64 format.

すべてのユニキャストアドレス(ネットワーク内においてただ一つの特定ノードを指すアドレスのこと)は、b000 (2進数表記) で始まるもの以外のアドレスの Interface ID は、すべて 64bit 長の “Modified EUI-64” 形式で表現される必要がある。

ということで。(訳はものすごく適当です。)

 

ここから考えるに、まず RFC 4862 5.5.3 の図に照らし合わせると、
N は N=64 である必要があって、 “Link prefix” は残った分 (64bit) になるということが読めます。

(※ RA の場合のみ。 DHCPv6 で割り当てる場合は、もちろん自由に設定できます。。)

 

このことから、先ほど上の方に書いたような、 /64 ではないプレフィックスを持った
RA が飛んできても、今のところ RFC と比較した際に誤ったデータであると見ることが出来て、
弾いた、というところが読み取れます。

 

ただ、上の図に挙げたように、
/64 でないプレフィックスの RA を飛ばすことが出来ているところから、
もしかすると /64 でないアドレスの配信も行えるようになるんですかね・・んー。

 


そういえば:

最初の部分のラストで、

ipv6 prefix 2 dhcp-prefix@pp2:1100::/64

ipv6 lan1/1 address dhcp-prefix@pp2:1100::1/64
ipv6 lan1/1 rtadv send 1 o_flag=on

 

こんな感じで設定を書きましたが、

ipv6 prefix 2 dhcp-prefix@pp2:11::/64

とかでも動くのでは! と思う方、結構いると思うんです。でも動かないんです。。

 

今回のケースだと、プロバイダーから振ってくるアドレスは /56 でした。

IPv6 は 16ビット毎に “:” で区切って表現しますが、
今回の場合はすでに 56 ビット分指定されていますので、

xxxx:xxxx:xxxx:xxoo:oooo:oooo:oooo:oooo

こんな感じ ( o が指定できる場所 ) になります。
また、IPv6 のアドレスでは、高い位の 0 は省略できる事になっています。
(数学や算数での数字の表現と一緒です。)

つまり、 1234:56:7::1  は、 1234:0056:0007:0000:0000:0000:0000:0001 と同値です。

 

・・・たぶんヤマハルータ内の処理プログラムのバグだとは思うんですが・・。

ipv6 prefix 2 dhcp-prefix@pp2:11::/64

と書いた場合に一度、 dhcp-prefix@pp2:0011::/64 として展開されるようで、

:xxxx:xxoo:oooo::  の部分に  :xxxx:xx00:11oo:: として当てはめられて、
/64 ですから、 :xxxx:xx00:oooo::  として配信されてしまうようです。

(解析等はしていませんので、何とも言えませんが・・。

 

一方で、

ipv6 prefix 2 dhcp-prefix@pp2:1100::/64

と書きますと、

:xxxx:xxoo:oooo::  の部分に  :xxxx:xx11:00oo:: として当てはめられて、
/64 ですから、 :xxxx:xx11:oooo::  として配信される、と。そういう感じ。

 

・・・ちょっとヤマハさんの中の人に聞いてみようかなぁと思ったのですが、
どうやら明日から夏期休業らしく・・。どこかで聞いてみよう・・。

ヤマハルータと Hyper-V でネットワーク的な隔離環境を作ってみる


みむらです。

ルータを買ったのはこれがやりたかったから(
(とはいえ、出来るか確認は取っていなかったので今回良かったなとw)

 

作り方:

1. ヤマハルータ側で VLAN の設定をする
2. Hyper-V 側で VLAN の設定をする


1. ヤマハルータ側で VLAN の設定をする

このあたりが参考になります:
http://jp.yamaha.com/products/network/solution/switch-command-tag_vlan/

具体的には、

vlan lan1/1 802.1q vid=51 name=YUI_ICHII
ip lan1/1 address 192.168.51.1/24
dhcp scope 51 192.168.51.2-192.168.51.250/24

こんな感じのコマンドを叩きます。

vlan lan1/1 802.1q vid=51 name=YUI_ICHII

vlan (LANアダプタ名)/(番号) 802.1q vid=(VID, VLAN ID) name=(名前)
こんな感じで呼び出せます。
今回の例では LAN1 上に一つめの VLAN を設定して、 VLANID は 51, 名前は YUI_ICHII となります。

ip lan1/1 address 192.168.51.1/24

いつもの IP アドレス設定ですね。ただ lan1/1 となっている所が VLAN 感出てます。

dhcp scope 51 192.168.51.2-192.168.51.250/24

いつもの DHCP 設定。
ちなみに dhcp scope 51 の 51 は、別に VLAN ID とかとは合わせる必要はないので
自分のポリシーに合わせて下さい(

 

・・・一通り叩くと VLAN が設定されます。
後はインターネットに出られるように nat の設定をしたり ip masquerade の設定もしておくと
良い感じだと思います。

 

2. Hyper-V での設定

image

各仮想マシンの設定画面の「ネットワークアダプター」の部分を開くと、
VLAN ID という項目がありそこに設定します。

ここでの VLAN ID は先ほどルータ側で VID として設定した値を入力します。

 

3.後は楽しむ


設定はこんな感じでさくさくっと出来ます。

もし通信周りでこれと絡めて遊ぶ場合は、
image

高度な機能の中に「ポートミラーリング」の設定項目もありますので、
この辺と組み合わせるとかなり楽しい環境がくめるのでは無いかと思います。

 

ではではー。

YAMAHA NVR500 と OCN でひかり電話と IPv6


どうもみむらです。

夏です。夏と言ったら BIND そして、BIND といえばネットワーク。
そう、夏はネットワークの季節でもあるのです。

夏だ!ネットだ!ルーターだ! と某とある方が仰って(?)いたように
ルータを設置するには非常に最適な季節なんだそうです。

 

・・・嘘です。誰もこんなこと言ってません。

 

さてさて。

最近、東京エリアの気温が高くなっておりまして、
それ故にいろいろな問題が発生することも多々あるようです。

私の場合はこれですね。

IMG_0317

ノリで NVR500 を購入してしまいました。

 

いや、やっぱりヤマハさんのルータは触ってて楽しいです。

 

IMG_0320

(VAIO Z を WAN に、 VAIO Pro を LAN に繋いで遊ぶ、の図)

 

さてさて。そんなわけでいろいろとやっていた訳ですが、
どうも OCN が提供する IPv6 と ひかり電話を両立できない感じでして
いろいろといじりましたのでそれのメモ、を。



一応環境としては、
(ONU) – (NVR500) – (RT57i, PC, etc..)
というような。

また、コンソールケーブルには BUFFALO の BSUSRC06 を使いました。
Windows 8.1 x64 環境でしたが、接続したらすぐ使えるようになりました。 さすがっ。

 

 

ゴールとしては、

1. NVR500 を使って快適インターネット ( NTT レンタルのルータを取り外す )
2. ひかり電話を有効にする!
3. IPv6 !
4. RT57i での SIP クライアント!

という形です。

 

1. NVR500 を使ってインターネット接続を設定する

image

「プロバイダ情報の設定」にあるウィザードに従って設定すると、
ちゃんと設定が行われます。

・・私の場合はここで設定をした後、
config を出してきて不要と思われるところを消したりとかいろいろとやりました。

(自動でいろいろとフィルタを設定してくれるのはいいのですが、自分なりの番号の振り方がある場合などは結局コンソールでいじる事にはなります)

 

・・・・そもそもこういうルータを使う人なんだから・・という感がしますので細かいところはスキップします。

もし必要な場合は ヤマハ公式サイトにて :
http://jp.yamaha.com/products/network/solution/internet/telephony_nvr500/


 

2. ひかり電話を有効に

これも、「電話の設定」の「VoIPの設定」に
「フレッツ光ネクスト ひかり電話の設定」とありますので、こちらにて。

ただこの設定項目、プロバイダ情報として IPv6 PPPoE 接続をセットアップすると使えなくなります。

たぶんいろいろと大人の事情があるんだろうなと思いつつ。
今はさくっと IPv4 のプロバイダ設定だけした状態で、ひかり電話をセットアップします。

設定としては、こちらの設定データの「電話」の部分が参考になるかと思います:
http://jp.yamaha.com/products/network/solution/flets/flets_other_service/flets-next-ipv6_ipoe-nvr500/

 

 

3. IPv6 の設定

「プロバイダ情報の設定」から新規登録に進み、
一番上の「PPPoE を用いる端末型・・」を選択してウィザードを進めます。

image

 

IDやパスワードについては、
http://service.ocn.ne.jp/ipv6/access/flow/
このあたりを参考に。

設定が完了しましたら、コンソールからコマンドをカタカタと。

 

具体的には、 ( IPv6 が pp2 で、PC が LAN1, ONU が LAN2 に繋がっていると仮定)

pp select 2
 ppp ipv6cp use on
 ipv6 pp dhcp service client
 pp enable 2

no pp select

ipv6 route default gateway pp 2
ipv6 prefix 2 dhcp-prefix@pp2::/64
ipv6 lan1 address dhcp-prefix@pp2::1/64
ipv6 lan1 rtadv send 2 o_flag=on
ipv6 lan1 dhcp service server

こんな感じのことを。(そのまま貼り付けても設定可能です。

要は、DHCP で情報を取りに行ってプレフィックスを取得、
あとはそれをLAN 内に宣伝して、ルーティングの設定をすれば終わり、というような感じです。

 

もしフィルタ設定を書く場合は、通常の “ip filter” ではなく “ipv6 filter” にて。

ex)

ipv6 filter 200100 reject * * udp,tcp 135 *
ipv6 pp secure filter in 200100

 

あとは気づかないうちに宣伝されて、IPv6 ネットワークが使えるようになります。

 

4. RT57i で電話を繋ぐ

最近、秋葉原で安く売られてます。この子。

 

2D290831CCB64DA3ADB3FBD2CDBBFFC0_12001

(引用元: http://jp.yamaha.com/products/network/routers/rt57i/

この子、VoIP アダプタとしてもいろいろと遊べまして、
NTT から貸し出されるルータに対して SIP クライアントとして登録させることも出来ます。

 

今回は NVR500 との連携ということで。

 

4.1. カスケード接続を有効にする

NVR500 :
電話の設定 → TEL の共通設定 → カスケード接続(機器間アナログ通話)の設定 へ。
そこで、「切替」を「アナログ親機」にして「設定の確定」をクリック。

RT57i :
NVR500 の設定が完了したら同様に、
電話の設定 → カスケード接続(機器間アナログ通話)の設定 へ。
そこで、「切替」を「アナログ子機」にして「設定の確定」をクリック。

うまく行けばこの時点で、親機側から子機が、子機側から親機が見えるようになります。

 

4.2. あとはいろいろと設定を。

まずは着信・発信の設定を:
RT57i の 電話の設定 → VoIP の設定 → VoIPの基本設定 へ移動します。
電話ユーザ名を固定電話の番号に変更して完了です。
(着信させたくない場合は、「着信許可」の項目をいじると遊べます。)

マイナンバーの設定をする場合:
RT57i の 電話の設定 → ISDN 電話の設定 → (設定したいポート) →電話機対応機能設定 へ。


 


とてもざっくりですが、メモとして残しておきます。

あと詰みそうなところをいくつか:

 

・IPv6 アドレスが降ってこない

気長に待っていると降ってくることがあります。

 

・電話が繋がらない

一回 IPv6 と IPv4 を接続解除した後、IPv4 側だけを残して試行してみると繋がる可能性があります。
IPv6 側の接続は少し遅れてから行うと良い感じです。

接続に必要な情報を飛ばしている可能性や、
IPv4 側の接続ではなく IPv6 側に対して試行してるかも・・。

 

・RT57i が繋がらない

RT75i を一端 Cold start して初期設定にしてからやると、うまく行くかもしれません。

 


余談:

なんだかんだこのルータ、いろいろと機能を持っていまして、
VLAN とかはちゃんと切れるのはもちろん、USB 端子や Micro SD を使っていろいろと遊べそうです。

一番気になっているのはこの辺です。
http://www.rtpro.yamaha.co.jp/RT/manual/nvr500/logging/packetdump.html

パケットダンプ・・どういう形で出てくるんだろう。

 

何はともあれ、こんな感じでちゃんと PPPoE な IPv6 と ひかり電話は共存できるよ、と。

IMG_0323

・・ってなわけで、ステキなヤマハルータライフを!

 

・・最後に。私は N の人でも無く、Yのひとでもありませんので あしからず・・

windbg と gdb に関係した基本操作メモ。


毎回調べている気がするのでメモ。
(たぶんころころ書き加えていきます

 

作業内容 windbg gdb
実行 g r
ブレークポイント bp b
ブレークポイント
一覧
bl i b
(info breakpoint)
ブレークポイント
削除
bc d
ステップ実行
(Step over)
p n
ステップ実行
(Step Into)
t s
メモリ内容表示 d
d(a,b,c,d…)
d
x/(o,x,u,t,8xb..)
変数内容表示 dv (変数名) print (変数名)

p *0×000  みたいなのも可
レジスタの値 (レジスタウィンドウを見る)

dd eax..
i r

i r eax..
逆アセンブル結果 (Disassemble ウィンドウをみる) disas (関数名)
ソースコード (ウィンドウを見る) list (関数名)

 

・・とりあえず、良く忘れるので(

 

あといくつかメモ:

 

gcc でビルド時にデバッグ情報を入れる:
→ gcc –g でビルドしてやる

objdump で Intel 記法で眺められるようにする:
→ objdump –M intel  で眺める。
ex)  objdump –M intel –D a.out   .. のように。

VC コンパイラでデバッグ情報を入れる:
→ cl /Zi でビルドする。

VC コンパイラ環境で objdump っぽいことをする:
→ dumpbin a.exe /disasm  とかやると良い感じ。