ICTSC参戦総括(仮)

はじめに

この記事は、信州大学 kstm Advent Calendar 2018 - Qiitaの17日目となります。

一昨日、ICTSC2018の二次予選が開催され、私はサークルの名前を背負ったチーム名kstmの一員として参加しました。 二次予選が通過できたかもわかりませんが、いずれにせよこれが最後のICTSCなので、個人的に行うここまでの参戦総括、 加えて、技術トレンドと出題の兼ね合いのようなポエムを綴りたいと思います。

ICTSC2018 予選の章までかなりポエムなので、write upみたいなものを見たい人はそこまで飛ばしてください。

ICTSC(ICTSCトラブルシューティングコンテスト)って何?

ICTの多岐にわたるトラブルを最大5人チームで解決していくコンテストです。 守備範囲はインフラだけでなくサーバー、Webアプリ、セキュリティまで含まれます。

SECCONほどではないですが、ややIT雑技団なコンテストです。

公式の説明は下記URLをご参照ください。
ICTSC | ICT トラブルシューティングコンテスト ? 全国の専門学校生、高専生、大学生、大学院生を対象とした サーバー・ネットワークのトラブルシューティングや運用技術をチーム単位で競うコンテストであり、競技参加選手だけではなく、コンテストの企画、運営も学生が行う、学生の、学生による、学生のためのコンテストです。

ICTSC5

様子見で3人チームで突撃するところ、諸事情あって2人で突撃することになってしまい、コテンパンにされて帰った記憶があります。 トラブルシュートはとても時間がかかる作業ですし、5人を前提とされた分量、そして問題の質に圧倒されてしまいました。

サーバーはある程度触れるものの、スイッチやルータの経験値が圧倒的に足りない。 背景にある理論をわかっていようが、設定したことない人間がトラブルシュートできるわけがない。 本当に身をもって学んだ気がします。

今にして思えば、既存のサークル保有の機材も含め、顧問の先生や周辺の方々からの機材提供を受け、さらに経験を積んで行く良いきっかけになったと思っています。

ICTSC6

フルメンバーで初参加の回。チームをどう作るか、仲間をどう育てるかという点も考えて参戦したところ、2度目で入賞をせしめました。

サーバーとインフラの問題の配分が前回と特に変わらず、参加メンバーのスキルセットと出題形式に助けられて、広く浅くつまみ食いできたのも大きいです。

勝負は時の運、運も実力の内。人事を尽くして天命を待つ。といういうことです。これから一切受賞がありませんが、慢心とかそういうのではないです。

ICTSC7

ここで大きく出題形式が変わり、従来の「広く浅くつまみ食い」が不可能になったというのがあります。 確かに、トラブルシューティングは一番手元のトラブルが蓋をして、次のトラブルを隠していることがほとんどですので、より現実的になったというのはあります。 しかしながら、自腹で出場した代わりに、質の高い問題にその場で手を付け、体に入れた上で糧にして帰れるという利点が薄れてしまった気がします。

また、この回から計算機とネットワークの仮想化技術も出るようになりました。 当時から必須となりつつあるので、その出題傾向の変化は妥当だと思います。

加えて、前回出題されなかったIPv6問題も出題されるようになりました。 実際問題、NTTの光回線でもIPv6の運用が手軽になり、自宅でも簡単に運用できるようになっているので、対応できないと生き残れない状態になりつつあります。

多くの人がIPv6/IPoE(with DS-Lite)の参考にしたであろう下記の記事は、2016年4月。そして、ICTSC7は2017年3月なので、十分な余裕があると考えても良いでしょう。 てくろぐ: IIJmioひかりの混雑の理由とバイパス手段(IPoE・DS-Lite対応)

ICTSC8

私は、インターンの関係で参加できず、残りのメンバーもチームとして成立させることが出来ず欠場となりましたが、 あとで確認した所、がっつりコードを読むアプリケーション問題が出てきたという実感があります。

全体の構成をみてポンという感じではなく、言語仕様などいろいろと絡んでいる味わい深い問題です。

インフラエンジニアだからといってコードが読み書きできないのならば、IT系エンジニアではない。 そういう風潮です。クラウドにおけるオートスケール、情報モデル化、スクリプトによる制御、当たり前です。

ICTSC9

ICTSC8で覚悟した以上に難しい傾向になって、対策しきれなかった感があります。 育成も兼ねて、2人の新人を入れて戦い、やや上位に入れたので、頑張れたとは思います。

あと、この回でトポロジー図(ネットワーク図)をちゃんと書くこと、モデリング言語的な意味での強力さを知りました。 ホワイトボードが用意されない大会で、図を引かずに脳内でvrfなどのデバッグを行っても、 慣れである程度はできるようになりますが、やはり漏れがあります。

散々時間を溶かした挙げ句、ネットワーク図を書いて辿ったところ、あっさり原因を見つけ、 2日目には一発設定という展開がありました。

VRFには気をつけよう! 一生忘れないでしょう。

ICTSC2018 予選

そして、6,7,9と共に参加した後輩(以降、後輩Y)もいる中、新メンバーを2人(以降、後輩A、後輩N)迎え、4人で参加となった今回の大会。

一次予選では、高度化/高速化による低レイヤ回帰を印象づける問題が出てきました。 私はアセンブラをAVRマイコンで少しだけしか書かなかったので、とあるバイナリ問はセキュキャンに行った後輩Yに投げた記憶があります。

二次予選に関しては、記憶が新しいので詳細に書いていきます。

問題1

予選いつもの全レイヤ知識問といった感じです。ネットワークをあまり触ってこなかった新人にもためになる問題が多いです。

べた褒めに近いですが、上から下までのレイヤで理解のポイントとなる箇所を、着実に押さえていくので、教材として使えるレベルの問題だと思います。

問題2

クラウドの従量課金、確約利用割引等のお勘定、損益分岐タイミング計算です。
クラウドで従量課金に怯えたことがあり、ある程度立式ができる人なら計算できます。多分。

新人の後輩NはサクっとPythonのスクリプトを書いてミスを防いでいたので、やや感動しました。

問題3

VLANとルーティングと光の問題です。 前半はかなり知識問題だったのですが、後半がきつかったです。

  • OSPFのエッジケースな挙動(4問目)
    ルータ2つでわざとID衝突させることはまずない。一瞬慌てる。 厳密な制御フローがわかっているかという硬めの知識問という感じ。
  • 光ネットワークの問題(5問目)
    実際にテスターとか使って光ファイバネットワークを構築したことがなければひたすらググることになる。 100GBASE-LRというのは触る機会があるかも怪しい。でも規格のデータ読めばなんとかならなくもない。
  • 無線ネットワーク問題(6問目)
    普通に電波の拡散特性に関する問題。うーん!物理!

問題4

PC3台の所属するサブネットと、iptables、nginxの設定の兼ね合いの問題でした。

  • nginxでアクセス許可すべきネットワークをアクセス拒否
  • iptablesで443ポートを許可すべき個所を誤許可
  • nginxのlocationにおける~乱用よる意図しないマッチ

問題5

筆記

3以外は特に工夫しなくてもググれば分かる問題でしたので、3に関して書きます。

NW上の機器状態を把握する方法としてSNMPとSYSLOGを比較した場合について正しい説明の選択肢を答えてください(複数回答可)
a. SNMPとSYSLOGのどちらも管理対象機器の設定変更まで実施することが可能である
b. 標準機能でRSAなどの暗号化技術に対応したバージョンが存在するSNMPの方がセキュリティが高い
c. SYSLOGでは指定した優先度以上のメッセージのみ送信するように設定することが可能である
d. 回線エラー発生数やCPU状態などの性能監視をしたい場合にはSYSLOGが適している
e. SNMPの各バージョンは混在して設定することが出来ない
f. 上記の選択肢の中に正しい説明はない

回答: b,c

実技

1問目は普通にsnmpwalk使っておしまいです。

2問目が本当にわけがわかりませんでした。
ホスト名がTRAPで送られてくるのは良いのですが、root権限がないのでパケットキャプチャでトラップされたパケットが解析できないのに加え、ログにダンプを加える変更も出来なかったと思われます。 そして最終的にホスト名がUNKNOWNになっているのがいけないとかいうこじつけをして、下記のような意味不明な回答をしました。多分間違ってる。

cat > /etc/hosts
agentのIP agentのホスト名

問題6

ルーティング問題。OSPF/BGPとか、シンプルなところだとサブネットマスク不一致とか(だったっぽい)

後輩Yがちゃんと設定を読んで着実にやってくれて正直感動した(少々アシストした気がするが何だったか記憶にない)

問題7

mallocよって確保された領域を横断しまくってアクセスしている。これによってパフォーマンスが下がっていると指摘して終わり。 メモリアクセスは連続的にされたほうがみんなにやさしい。

おおよそ上記のように回答。正答かは分からない。我々のチームではこれをLinux問だと断言できなかった。 POSIX問?アーキテクチャ問?

問題8

Wordpressでどったんばったん大騒ぎ!

後輩Aが良いとこまで穴を塞いでいた。 しかし、最後の穴最終盤でアクセスログ読みに加勢したが間に合わなかった。 唯一、完答扱いできなかった問題になりました。

5人だったら……、とかそういうことは言わないお約束。

問題9

ローカルのDockerレジストリから建てたredmineを別のマシンから表示する問題。 初手着手した。

  • かなり序盤にfirewalldを殺してしまった
    問題終盤でredmineへのhttpアクセスに対して、StatefullPacketInspectionとかしなきゃいけなかった。問題には書いてないけど、減点されても文句は言えない。
  • docker-registy.localはhttpかつtcp/80でレジストリが立っている
    Dockerの起動オプションに--insecure-regitry 172.17.0.0/24を加えた
  • docker-compose172.17.0.0/24を使おうとしてくる
    スタティックルート追加して妨害することで対処した

最近、CentOSに関する訓練がおろそかになっていて、firewalld殺すとか、 けっこう荒業を使ってしまった上に、かなり時間を溶かしてしまった。個人的にはかなり悔しい問題になった。

まとめ

なんやかんやいって、苦しかったり悶たりしたけど、メンバーを育ててチームを維持するのも含めて、楽しかったと言える。 好きっていいね。

そして、本戦行けるといいね。