Star Wars Traceroute 徹底解説

Twitter で回ってきたのが VRF 応用ネタとして面白かったので読んでみた。時事ネタはすぐ風化しちゃうし、せっかく整理したのが勿体ないので書いておく。

某ネタフリがあったけど、暇だったので書いちゃいました。

元ネタ

リンク先を見て欲しいんだけど、実行結果とスクリプトがないとわかりにくいのでここにもコピーしておきます。

$BASE="206.214.251.";
$NUMBER=1;
while ($NUMBER<250) {
$VLAN=$NUMBER+199;
$VLAN2=$NUMBER+203;
$NH = $NUMBER+5;
$SRCIP = $NUMBER+4;
$ASIDE="
vrf definition  FOO$NUMBER
rd 10:$NUMBER
address-family ipv4

int fa0/0.$VLAN
encap dot1q $VLAN
vrf forwarding FOO$NUMBER
ip addr $BASE$NUMBER 255.255.255.252
ip route vrf FOO$NUMBER 216.81.59.173 255.255.255.255 $BASE$NH
ip route vrf FOO$NUMBER 0.0.0.0 0.0.0.0 216.81.59.175 global
int fa0/0.$VLAN2
encap dot1q $VLAN2
vrf forwarding FOO$NUMBER
ip addr $BASE$SRCIP 255.255.255.252
";
$DSTNUMBER=$SRCIP+1;
$DSTIP2=$SRCIP+5;
$VLAN3=$VLAN2+4;
$OUTIP=$DSTIP2-1;
echo "VLAN2 is $VLAN2 VLAN3 is $VLAN3\n";
$BSIDE="
vrf definition  FOO$NUMBER
rd 10:$NUMBER
address-family ipv4

int fa0/0.$VLAN2
encap dot1q $VLAN2
vrf forwarding FOO$NUMBER
ip addr $BASE$DSTNUMBER 255.255.255.252
ip route vrf FOO$NUMBER 216.81.59.173 255.255.255.255 $BASE$OUTIP
ip route vrf FOO$NUMBER 0.0.0.0 0.0.0.0 216.81.59.175 global
int fa0/0.$VLAN3
encap dot1q $VLAN3
vrf forwarding FOO$NUMBER
ip addr $BASE$DSTIP2 255.255.255.252
";

$tmp = `echo "$ASIDE" >> OUT1.TXT`;
$tmp = `echo "$BSIDE" >> OUT2.TXT`;
$NUMBER=$NUMBER+8;
}
  • BeagleNetworks
    • 実行結果
    • traceroute のデフォルトだと最大30ホップまでになっているけど、日本からだと 30 ホップ以上かかっちゃうと思うので実行時は注意。( traceroute -m 70 216.81.59.173 とか。自宅からだと 67 hop あった)
This is what you should see!
 6  Episode.IV (206.214.251.1)  68.642 ms  67.307 ms  67.005 ms
 7  A.NEW.HOPE (206.214.251.6)  65.986 ms  68.502 ms  68.708 ms
 8  It.is.a.period.of.civil.war (206.214.251.9)  67.067 ms  70.139 ms  66.522 ms
 9  Rebel.spaceships (206.214.251.14)  70.214 ms  70.192 ms  71.622 ms
10  striking.from.a.hidden.base (206.214.251.17)  71.427 ms  74.206 ms  71.787 ms
11  have.won.their.first.victory (206.214.251.22)  71.665 ms  70.434 ms  70.322 ms
12  against.the.evil.Galactic.Empire (206.214.251.25)  69.218 ms  70.621 ms  72.856 ms
13  During.the.battle (206.214.251.30)  69.059 ms  68.931 ms  69.981 ms
14  Rebel.spies.managed (206.214.251.33)  77.247 ms  72.757 ms  77.614 ms
15  to.steal.secret.plans (206.214.251.38)  71.224 ms  71.164 ms  69.543 ms
16  to.the.Empires.ultimate.weapon (206.214.251.41)  68.744 ms  68.824 ms  70.111 ms
17  the.DEATH.STAR (206.214.251.46)  72.316 ms  74.551 ms  66.354 ms
18  an.armored.space.station (206.214.251.49)  69.413 ms  70.334 ms  68.469 ms
19  with.enough.power.to (206.214.251.54)  66.182 ms  66.627 ms  71.231 ms
20  destroy.an.entire.planet (206.214.251.57)  71.926 ms  71.266 ms  70.702 ms
21  Pursued.by.the.Empires (206.214.251.62)  67.298 ms  65.956 ms  66.212 ms
22  sinister.agents (206.214.251.65)  65.020 ms  67.806 ms  70.508 ms
23  Princess.Leia.races.home (206.214.251.70)  68.894 ms  71.147 ms  71.195 ms
24  aboard.her.starship (206.214.251.73)  72.130 ms  71.093 ms  74.026 ms
25  custodian.of.the.stolen.plans (206.214.251.78)  68.568 ms  67.939 ms  68.284 ms
26  that.can.save.her (206.214.251.81)  67.063 ms  69.874 ms  68.889 ms
27  people.and.restore (206.214.251.86)  70.395 ms  70.144 ms  68.078 ms
28  freedom.to.the.galaxy (206.214.251.89)  66.098 ms  65.432 ms  68.118 ms
29  0-------------------0 (206.214.251.94)  75.931 ms  74.159 ms  80.012 ms
30  0------------------0 (206.214.251.97)  73.026 ms  73.403 ms  73.256 ms
31  0-----------------0 (206.214.251.102)  83.602 ms  82.079 ms  70.743 ms
32  0----------------0 (206.214.251.105)  70.459 ms  69.403 ms  68.782 ms
33  0---------------0 (206.214.251.110)  68.516 ms  72.472 ms  71.811 ms
34  0--------------0 (206.214.251.113)  69.056 ms  65.981 ms  68.202 ms
35  0-------------0 (206.214.251.118)  66.790 ms  71.556 ms  74.292 ms
36  0------------0 (206.214.251.121)  68.286 ms  71.042 ms  71.587 ms
37  0-----------0 (206.214.251.126)  72.702 ms  71.785 ms  72.442 ms
38  0----------0 (206.214.251.129)  78.143 ms  74.411 ms  72.828 ms
39  0---------0 (206.214.251.134)  69.692 ms  66.187 ms  67.369 ms
40  0--------0 (206.214.251.137)  69.184 ms  70.678 ms  67.445 ms
41  0-------0 (206.214.251.142)  70.383 ms  68.220 ms  67.543 ms
42  0------0 (206.214.251.145)  67.593 ms  72.970 ms  73.220 ms
43  0-----0 (206.214.251.150)  70.964 ms  69.082 ms  70.831 ms
44  0----0 (206.214.251.153)  73.856 ms  71.848 ms  70.311 ms
45  0---0 (206.214.251.158)  71.517 ms  69.204 ms  69.538 ms
46  0--0 (206.214.251.161)  68.076 ms  68.179 ms  67.620 ms
47  0-0 (206.214.251.166)  68.738 ms  70.518 ms  68.757 ms
48  00 (206.214.251.169)  68.281 ms  70.225 ms  74.811 ms
49  I (206.214.251.174)  70.203 ms  71.668 ms  71.672 ms
50  By.Ryan.Werber (206.214.251.177)  68.900 ms  71.461 ms  72.297 ms
51  When.CCIEs.Get.Bored (206.214.251.182)  75.816 ms  73.957 ms  71.333 ms
52  read.more.at.beaglenetworks.net (206.214.251.185)  70.254 ms  73.799 ms 

やってること

VRF を大量に生成してホップを稼いでいます。実際には、2台のルータ(ルータA/B)を行ったり来たり行ったり来たりさせて多段セグメントを作っているだけ。物理デバイスでまともにこんなの組んでられないので、VRF で論理的に実現している。あとは、各 VRF の traceroute に表示されるIPアドレスについて、DNS逆引き登録してやれば良い、と。

Traceroute Target Address: 216.81.59.173/32 については、次の VRF を連鎖的に Next Hop (NH) に指定してやる。それ以外 (default) については GRT (Global Routing Table) 経由で返すようになってる。

All packets are returned using a default route pointing at the global routing table. This was by design so the packets TTL expiration did not have to return fully through the VRF Maze.

http://rwerber.tumblr.com/post/42707829171/star-wars-traceroute

こんな機能あったんだっけ…これはあとでちょっと調べる。

問題になるのは、頭とおしりのセグメントだけかな。コンフィグ生成スクリプトでは、最大31段まで作れるようになっているけど、実行結果を見ると実際には 206.214.251.185 (24段目) で終わってるのでこの辺 (vrf:FOO185) に Target Address (216.81.59.173) 持たせてたりするんじゃないかな。

それにしても、

Epik Networks who let me use the Reverse DNS for an unused /24

http://rwerber.tumblr.com/post/42707829171/star-wars-traceroute

とかいいなあ。うらやましいわ。