ICTSC8に参加したおはなし

はじめに

今回は、ICTトラブルシューティングコンテスト第8回(以下、ICTSC8)に参加してきた(記事を書いてる今は真っ最中)ので、備忘録、そして戒めの記録としてこの記事を書きます。

ICTSC8にはEagleJumpというチーム名で参加させていただきました。

ちなみに、こういうWrite-Up的なものを書くのは初めてなので、ログなどの取り忘れが多いです。。

1日目

1日目終了時点では500点で8位/15位でした。
ちなみに1位のチームは1960点、2位920点、3位890点って感じでした。
1位圧倒的ですね。。2位3位もぉっょぃ。。

ちなみに1日目は1問も解けませんでした。。
チームメンバーにめちゃくちゃ自虐キツイって言われたんですが、自戒の念も含め、ですね。

伝統の国 第二のトラブル (ipv6環境構築)

1日目に解こうとした問題を2日目には完全に解けるように、ipv6の基礎を理解するためにおうちに帰って簡単に、思い出せる限りで同じ環境を構築してみました。

構成

時間が無かったので(帰宅22時スタート)、端末はMacBook Pro(MacOS Sierra)とRaspberryPi3(CentOS 7, 問題ではUbuntu)を使用して、ルーターは実機で892j(問題では1941?)を使用しました。
パケトレでもいいかなって思ったのですが、時間もなかったので(重要)、なんか途中までやって機能制限されてたら嫌だなって思って実機にしました。

問題は892jから1941にconfigそのまんま移植しちゃったてへぺろな的な感じだったので、完全には再現できていませんが、ipv6とNAT-PTの勉強も兼ねて、前日(当日)夜の悪あがきです。

ネットワーク図は以下のとおりです(ipv6のネットワーク図の書き方わからない)。。 f:id:ush1ken:20170830213546p:plain

fa0 設定

まず892jにRaspberryPi3(以下、rpi)に繋いでいるインターフェイスの設定を行いました。(ちょろいちょろい)

2分後…

Router(config-if)#ip address 192.168.140.2 255.255.255.0
% IP addresses may not be configured on L2 links FastEthernet0.

インターフェイスIPアドレスが割り振れない。。
どうやら892jでは(?)、LANポートはL2スイッチなので直では割り振れないよう。。

jianlan.hatenablog.com

ということで、VLAN。

Router(config)#vlan 10
Router(config-vlan)#exit
Router(config)#int vlan 10
Router(config-if)#
*Aug 26 14:12:14.083: %LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan10, changed state to down
Router(config-if)#ip address 192.168.140.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#int fa0 
Router(config-if)#switchport access vlan 10
Router(config-if)#end

Vlan10の設定と、インタフェースへの割当が出来たので、つぎは疎通確認。

Router#ping 192.168.140.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.140.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms

できた。

gi0 設定

次はMacBookPro(macだとmacアドレスと分かりづらいので以下、mbp)に繋いでいるインターフェイスの設定を行いました。

Router(config)#ipv6 unicast-routing
Router(config)#int gi0
Router(config-if)#ipv6 address 2001:DB8:3002::9/64
Router(config-if)#no shutdown
Router(config-if)#end

これでmbp側のインターフェイスの設定が終わりましたので、あとは疎通確認。

Router#ping ipv6 <mbp ipv6 address>
Output Interface: GigabitEthernet0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to FE80::82C:2547:BBA2:48FA, timeout is 2 seconds:
Packet sent with a source address of <mbp ipv6 address>%GigabitEthernet0
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/0 ms

できた。
gi0の場合はVLAN振らなくていいらしい。

NAT-PT 設定?

さあここからが勝負。
以下のサイトを参考にNAT-PTの設定を行っていきます。
changineer.info

まずはipv6 natのプレフィクスの設定と、vlan10とgi0のnatの設定。

Router(config)#ipv6 nat prefix 2017::/96
Router(config)#int vlan 10
Router(config-if)#ipv6 nat
Router(config-if)#exit
Router(config)#int gi0
Router(config-if)#ipv6 nat
Router(config-if)#exit
Router(config)#!ここのexitって要るのだろうか、、

つぎに、v4からv6への変換?とv6からv4への変換?
基本的に問題の(一部だけ)持ち帰ったconfigの通りに写経しただけなので、あんまり意味がわかっていない。。

Router(config)#ipv6 nat v4v6 source 192.168.140.1 2017::192.168.140.1
Router(config)#ipv6 nat v4v6 source 192.168.140.2 2017::192.168.140.2
Router(config)#ipv6 nat v6v4 source list v6-src pool v4-pool overload
Router(config)#ipv6 nat v6v4 pool v4-pool 192.168.130.1 192.168.130.1 prefix-length 24

そして、ipv6のルーティングプロトコルの設定?と、各インタフェースへの割当。
この辺も正直必要なのか必要でないのかよくわかっていない。。
今回、問題のconfigをなぜか一部しか持って返っていなかったのでルーティングプロトコルの設定とか何すれば良いんだろうみたいな感じでした。
そもそもNAT-PTだとルーティングプロトコルとか要らないんでしょうか。。

Router(config)#ipv6 router rip P1
Router(config-rtr)#exit
Router(config)#int fa0
Router(config-if)#exit
Router(config)#ipv6 router rip P1
Router(config-rtr)#exit
Router(config)#int vlan 10
Router(config-if)#ipv6 rip P1 enable
Router(config-if)#exit
Router(config)#int gi0
Router(config-if)#ipv6 rip P1 enable
Router(config-if)#exit

最後になんかaccess-listを作って割当。

Router(config)#ipv6 access-list nat_traffic
Router(config-ipv6-acl)#permit ipv6 any 2017::/96
Router(config-ipv6-acl)#exit
Router(config)#int vlan 10
Router(config-if)#ipv6 nat prefix 2017::/96 v4-mapped nat_traffic
Router(config-ipv6-acl)#exit

これで設定は終わり。。
ping等で疎通確認が出来て安心できたのかこの日は、ろくにログも取らずに午前3時に作業を終えました。

ログが取れた際のVlan10(rpi側インタフェース)と、gi0(mbp側インタフェース)、アクセスリストまわりのコンフィグと、"show ipv6 route connected"コマンドの結果を以下に載せます。

interface GigabitEthernet0
 no ip address
 duplex auto
 speed auto
 ipv6 address 2001:DB8:3002::9/64
 ipv6 nat
!
interface Vlan10
 ip address 192.168.140.1 255.255.255.0
 ipv6 enable
 ipv6 nat prefix 2017::/96 v4-mapped nat_traffic
 ipv6 nat
!
ip forward-protocol nd
!
no ip http server
no ip http secure-server
!
logging esm config
ipv6 nat v4v6 source 192.168.140.1 2017::C0A8:8C01
ipv6 nat v4v6 source 192.168.140.2 2017::C0A8:8C02
ipv6 nat v6v4 source list v6-src pool v4-pool overload
ipv6 nat v6v4 pool v4-pool 192.168.140.1 192.168.140.1 prefix-length 24
ipv6 nat prefix 2017::/96
!
ipv6 access-list nat_traffic
 permit ipv6 any 2017::/96
Router#show ipv6 route connected
IPv6 Routing Table - default - 4 entries
Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
       B - BGP, HA - Home Agent, MR - Mobile Router, R - RIP
       D - EIGRP, EX - EIGRP external, ND - Neighbor Discovery
       O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
C   2001:DB8:3002::/64 [0/0]
     via GigabitEthernet0, directly connected
C   2017::/96 [0/0]
     via NVI0, directly connected
     via Vlan10, directly connected

2日目

2日目、まあ気持ち悪い。 ねむい。 それでもこの日に1問でも解かなければ人権が無さそうだったので、頑張りました。

結果、前日(当日早朝)にやった問題再現が功を奏したか、伝統の国 第二のトラブルを無事満点(300点)で解くことができました。
ありがとうございました。

伝統の国 第二のトラブル (Write-Up的なもの)

以下、1問だけWrite-Up的なものです。
詳しい解説とかはまた時間があるときにでも、、()

問題

ちょっと見にくいですが、当日のUIも兼ねて、こんな感じでしたというご紹介。

f:id:ush1ken:20170830215457j:plain

初めて見る方は問題文の設定が意味不明すぎると思うのでちょっとうろ覚え解説。

我々、参加者は謎の世界に飛ばされたらしく、謎の世界の謎の国々でトラブルを解決するストーリーらしいです(かなりざっくり)。

問題は、環境構築でもあったとおり、ipv4ipv6の変換をnat-ptで行おうと思ったけど、config移植したらぶっ壊れたみたいなお話でした。

解答

以下に、実際の解答をほぼ原文でペーストします。

お疲れ様です。EagleJumpの***です。 問題14の回答を送らせていただきます。

この問題では、"ipv6 access-list v6-src"の設定ミスが原因で、IPv6からIPv4への変換が出来ず、疎通ができないというトラブルが発生していたと考えられました。

また、"ip cef"および"ipv6 cef"が有効になっていたため、パケットDropが発生していました。

以上のトラブルを解消すべく、以下のように設定を変更し、「1941のgi0/0ポートに繋いだIPv6アドレスのみを持つPCから192.168.140.1にping」が正しく通ることを確認いたしました。 ご確認のほど、よろしくお願いいたします。

v6-srcアクセスリストの編集

1941(config)#ipv6 access-list v6-src
1941(config-ipv6-acl)#no permit ipv6 1::/64 any 
1941(config-ipv6-acl)#permit ipv6 2001:db8:3002::/64 any
"ip cef"および"ipv6 cef"の無効化

1941(config)#no ip cef
1941(config)#no ipv6 cef
以上の修正を行った上で、「1941のgi0/0ポートに繋いだIPv6アドレスのみを持つPCから192.168.140.1にping」が通ったので、その結果を以下に示します。

$ ping6 2017::192.168.140.1
PING6(56=40+8+8 bytes) 2001:db8:3002::442b:59a3:1c29:e83f --> 2017::c0a8:8c01
16 bytes from 2017::c0a8:8c01, icmp_seq=0 hlim=254 time=1.686 ms
16 bytes from 2017::c0a8:8c01, icmp_seq=1 hlim=254 time=1.337 ms
16 bytes from 2017::c0a8:8c01, icmp_seq=2 hlim=254 time=1.580 ms
^C
--- 2017::192.168.140.1 ping6 statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 1.337/1.534/1.686/0.146 ms
解答は以上です。 採点のほど、よろしくお願いいたします。

この問題のキモは、アクセスリストの設定ミスだったようなので、アクセスリストを変更しました。
また、NAT-PT使用環境ではcef(Cisco Express Forwarding)はサポートされていないので、無効化する必要がある、という点が満点に繋がったのかなと思います。

まとめ

最終的なチームとしての結果は1310点?とかで、何位ぐらいなんでしょうね。。
もしこれを見てくださっているICTSC8運営の方いらっしゃいましたら、ランキングの公開ぜひお願いしたいです。。

次回は関西で開催されるのが決定されているそうですが、別のイベントで忙しそうなので出れるかは微妙ですが、日程が合えば予選参加したいです。

次はこのぐらいの問題は1日目の午前の1/2ぐらいでちゃちゃっと解いてみたいものです。。