IPv6(prefix=96)にIPv4を埋め込むためのtips

お久しぶりです.進数変換が苦手な tsu です,こんばんわ.

今回は あくまで,私の備忘録的なものなので,嘘がまじってるかもしれないです.

信用はしないでね!

 

IPv4枯渇が叫ばれる昨今,本当にIPv6なんて使うのかよ?と思っていましたが,

意外にその需要は多く,10進数,16進数の変換が苦手(あとマスク計算も)なので

結構ネットワークエンジニアとしては致命的です…

というわけで,自分の作業効率揚げるようにスクリプトを書いたお話です.

 

あんまり難しい話はおいておいて,自分はIPv6しかもってない,でも相手はIPv4しか持ってない.現状,そういうケースがわりと多い気がします.

#というか,現実IPv4もv6もふって,dualStackで動かしてるところは少ないんじゃないかなぁ…

そんなときに,よろしく変換する方法としてNAT64があります.

こいつが私の中で曲者なんですけど,難しいことは,Google先生にきいてください!ね!

 

結構長くなるので,Continue.

 

というわけでNAT64つかいます


概要図を作ってみました.(見づらい…)

2014-11-16-01.26

送信元は,IPv6Onlyです.(図,左側のエラが6本うぱ)

宛先は,IPv4Onlyです.(図,右側のエラが4本うぱ)

送信元:2001:0d08:bd05:01d2::1

 宛先:2002:3b8:3::7b2d:0602

ここから,IPv6world -> NAT64してくれる機器 -> IPv4world にHOPします.

そのときの変換イメージはこんな感じ.

◎ 宛先をNAT64します

送信元:2001:0d08:bd05:01d2::1

 宛先:2002:3b8:3::7b2d:0602

    < あぁ,このネットワークね!実際は, 123.45.6.0/24 だよ! )

    -> 123.45.6.2

◎ 送信元を v4アドレスに変換します

送信元:2001:0d08:bd05:01d2::1

    < 送信元,v6だと v4 world では生きれないので変換するよ!)

-> 123.45.6.250

 宛先:123.45.6.2

◎ 最終的に相手に届くときには

送信元:123.45.6.250

 宛先:123.45.6.2

あくまでイメージです.

とまぁ,こんなかんじでよろしく通信してくれます.

 

IPv4に対して割り当てるIPv6


じゃあ,そのアドレス変換ってどうやるの?適当でいいの?好きに決めれるの?

一例ですけど,こんな感じに.

1)  1対1で自由に決める

123.45.6.2  <–>  2002:3b8:3:2001:2002:2003:2004:2

123.45.6.3  <–> 2002:3b8:3:2001:2002:2003:2004:3

123.45.6.4  <–> 2002:3b8:3:2001:2002:2003:2004:a  ☆なんて変則的にもできます

自由度高いけど,1行1行管理するのがクソなので舌打ち運用になりがち

2) /64 で埋め込む

123.45.6.2  <–>  2002:3b8:3:2001:123:45:6:2

123.45.6.3  <–>  2002:3b8:3:2001:123:45:6:3

123.45.6.4  <–>  2002:3b8:3:2001:123:45:6:4

アドレスの無駄遣い感が半端ないけど,ひと目でわかりやすくて好き

3) /96 で埋め込む

IPv4(32bit)を16進数に変えて後ろに埋め込む方式.

dec(123) -> 7b ,  dec(45) -> 2d ,  dec(6) -> hex (06) … といった具合です.

最初の2オクテットをがっちゃんこして 1セクションにします.

123.45.6.2  <–>  2002:3b8:3:2001::7b2d:0602

123.45.6.3  <–>  2002:3b8:3:2001::7b2d:0603

123.45.6.4  <–>  2002:3b8:3:2001::7b2d:0604

/64 に比べて狭く使ってるのでアドレスの利用効率はよさそうだけど,

なにより16進数計算をしないと,宛先がわからない.ここが嫌いな点…

 

やっと,本題です.スクリプト書きました.


長々と書きましたが,3)でのアドレス割り当てをしてしまうと,

計算しないと対応がわからないんですよね.

単純にWindowsのプログラム計算機やエクセルの関数を使ってもいいと思います.

ただ,罠として 頭の0とか省略されてでてくるので,アドレスとして使うときは

注意しなきゃいけないです.

というので,いろいろ苦戦した結果自分で書くのがはやかったので…

今回は,初の perl で挑戦してみました.

perl のお作法もわからず,ぐぐりながらなのでそのへんは許してください.

 

こんな感じにで使います

$ ./v4tov6.pl 123.45.6.2
octetHex[0] = 7b
octetHex[1] = 2d
octetHex[2] = 06
octetHex[3] = 02
translated    —->  7b2d:0602  <- うしろ32bit ぶんだけだしてます
Original    —->  123.45.6.2

 

長くなりましたが,なんかすみません.

ちょっと温めすぎました.

カテゴリー: it

コメントを残す

メールアドレスが公開されることはありません。