セキュリティ・キャンプ全国大会2022 オンライン 開発コース Z4【BGPを実装して学ぶIPルーティング / ネットワークを自動制御して学ぶSDNゼミ】応募課題 課題は以下でも確認することが出来ます. https://gist.github.com/slankdev/7a68426e3c92aaab2414b85d22834bb1 以下の問題は完答することが通過条件ではありません.いかに応募者のみなさんが 技術に興味があるか, 手を動かしているか. (もしくは手を動かしてくれそうか)を 判断する基準で見させていただきます. また演習課題は難易度を極めて高く設定しているため 基本的に完答できないくらいを目安に作問しています. みなさんがどれだけ この問題に挑戦し, 熱意を持って手を動かしてくれるかを測っています. 以下から自由に課題を選択して答えてください.全てをまんべんなく解いてもよく, もちろん一つだけをものすごく深掘りして取り組むのでも構いません. しかし基本的に調査課題は取り組んでいただきたいです. また, これまでのキャンプの応募課題の回答がインターネット上に複数公開されていますが, わからなければそれを参考にすることをおすすめします. しかし回答は自分の言葉で言い換えたり より詳細に回答しているものをより高評価します ## 調査課題: 動機や経験 ### プログラミング ネットワークや, パケットに関するプログラミングの経験がある場合(入門中も可), どのようなプログラミング言語を使って, どのようなものを作ったのか(作っているか) 説明してください. それらのプログラムがどの程度の分量なのか,行数や規模感も説明してください. 特にそれらがGitHubで公開されている場合はリンクを添付してください. すくなくともGitHubのUser名を応募課題に添付してください. 本講義ではC/C++, Golang, Rust, Pythonを想定していますが, もし実際に本講義で利用したいプログラミング言語があれば記述してください. (もちろん上記以外でもOK) また,本講義を通して取り組んでみたいテーマや技術などが暫定的に記述してください. 実際に選考を通過したあとに細かく講師とはヒアリングを行いますが, 現時点でイメージがある 場合はできるだけ具体的に記述してください. ### ネットワーク 今まで何かしらのネットワークの設計構築や運用の経験があれば, どのようなことをやっていたかを教えてください. (**注意**: この設問に関しては多くの方は経験しにくい内容なため, もし該当しない場合は積極的にスキップし, 他の調査課題に注力することがおすすめです.) ## 調査課題: ネットワーク技術の基本 (ルーティングプロトコルとSDN) インターネット上ではたくさんの計算インスタンスがネットワークに接続しています. ここでの計算インスタンスとはVMや物理サーバ, コンテナ等を示します. これらはIPを利用して相互に接続されていますが, 特定のインスタンスに対する経路 を全て静的に設定するのではなく, いくつかの動的ルーティングプロトコルやSDN コントローラを利用して経路設定をソフトウェアによって行なっています. ルーティングプロトコルやSDNコントローラについて調べてあなたの知識を説明 してください. どのようなルーティングプロトコルやSDNコントローラがあるのか. それぞれどのような特徴があるのか, メリット/デメリット等の考察があるとさらに 良いと思います. ## 調査課題: ルーティング技術1 ### Static Routing v.s. Dynamic Routing Static RoutingとDynamic Routingの違いを説明してください. それぞれどのような利点と欠点があって, インターネット上のどのような場所で どちらが活用されているかを調査して説明してください. 可能であればBGPとはOSPFやIS-ISと比べてどのような特徴があり, どのようなネットワークで利用される物かを説明してください. また, RIPに関しては一切調べたり記述しなくて結構です. BGP, OSPF, IS-ISに注目して 調査を行ってください. 可能であればBGPのAddress Familyに関しても整理してみてください. ### RIB v.s. FIB Routing Information Base と Forwarding Information Base に関して調査して説明してください. この単語は主にBGPやOSPFを用いた時に頻出する単語ですので, Routing Protocolとセットで調査することがおすすめです. また, 関連するBest path selectionやAdministrative Distance に関しても調査して説明してください. もし可能であれば, 実際に BGPやOSPFを用いた具体的なルータの RIBの状態やFIBの状態を"想像"で良いので具体的に提示して説明してください. ### L3 Forwarding and Nexthop Nexthopとはなにかを説明してください. 例えば以下のようなネットワークで, C1で以下のコマンドを実行した時, C1から送信されたパケットが実際にC3に到達するまでにどのような 処理が行われるかをできるだけ詳細に説明してください. ``` C1# ping -c1 10.3.0.2 ``` ![](https://gist.githubusercontent.com/slankdev/97f818b267ebec89a6d2a68574124523/raw/a60e2ad2937bca4dae7db2f562716cbce40c7543/topo2.png) ヒント1: それぞれのルータにどのようなテーブルが存在していて, パケットのどのフィールドを見て転送を行うかに注目して説明するとよいです. ヒント2: C1-4,R1-2ではそれぞれ以下のような設定がされていると仮定しましょう. そして Longest Prefix Matchを意識しましょう. ``` C1# ip addr add 10.1.0.2/24 dev net0 C1# ip route add default via 10.1.0.1 --- C2# ip addr add 10.2.0.2/24 dev net0 C2# ip route add default via 10.2.0.1 --- C3# ip addr add 10.3.0.2/24 dev net0 C3# ip route add default via 10.3.0.1 --- C4# ip addr add 10.4.0.2/24 dev net0 C4# ip route add default via 10.4.0.1 --- R1# ip addr add 10.255.1.1/24 dev net0 R1# ip addr add 10.1.0.1/24 dev net1 R1# ip addr add 10.2.0.1/24 dev net2 R1# ip route add default via 10.255.1.2 R1# ip route add 10.3.0.0/24 via 10.255.1.2 R1# ip route add 10.4.0.0/24 via 10.255.1.2 --- R2# ip addr add 10.255.1.2/24 dev net0 R2# ip addr add 10.3.0.1/24 dev net1 R2# ip addr add 10.4.0.1/24 dev net2 R2# ip route add default via 10.255.1.1 R2# ip route add 10.1.0.0/24 via 10.255.1.1 R2# ip route add 10.2.0.0/24 via 10.255.1.1 ``` ### Multipath Routing Multipath Routingに関して説明してください. 特にMultipath Routingを導入するメリットや, 主要な適用範囲に関して調査して説明してください. 可能であれば LinuxでMultipath Routingをどのように設定するか sample console logなどを用いて説明してください. ヒント: ``` ip route add 1.1.1.1/32 \ nexthop via 10.1.0.1 dev eth0 weight 10 \ nexthop via 10.2.0.1 dev eth1 weight 10 ``` ## 演習課題: Virtual Network Playground 1 LinuxにはNetwork Namespace (netns)というネットワークスタックを仮想的に 複数生成する機能があります.コンテナ型の仮想化技術の多くはそれぞれの コンテナに対して一つのnetnsを作成し, それらをVethで接続してコンテナを 外部ネットワークに接続させています. ここでは6つのnetnsを作成し, 添付の図のように接続して C1からC3に対して通信を 行うような仮想ネットワークを構築し, その方法を説明してください. 利用するアドレスに関しては図中のものを利用してください. ヒント: 昨年度のseccampでも上記に似たような課題や演習を行いました. インターネット上に良い参考資料があるかもしれません. ![](https://gist.githubusercontent.com/slankdev/7a68426e3c92aaab2414b85d22834bb1/raw/1645e683689f130bd7eaa574442b2b0576533bc3/topo2.png) ## 演習課題: Virtual Network Playground 2 前の問題と同じように以下のネットワークを構築し, C1とC3を行うようにして それを説明してください. また, それに加え, C1 <-> R3の通信, C3 <-> R3の通信も 行えるようにRoutingの設定をして, 動作確認を行い, 説明してください. ![](https://gist.githubusercontent.com/slankdev/7a68426e3c92aaab2414b85d22834bb1/raw/1645e683689f130bd7eaa574442b2b0576533bc3/topo3.png) ## 演習課題: Virtual Network Playground 3 前の問題と同じように以下のネットワークを構築し, 必要なRouting設定を行ってください. その後, C1 <-> C3の通信の動作確認をしてください. Routingの方針としてはもっともHop数が 少なくなるように設定を行ってください. また, 余裕があれば, 以下の構成をFRRoutingを用いて構築し, BGPやOSPFを用いて Routingを行うように設定してみてください. ![](https://gist.githubusercontent.com/slankdev/7a68426e3c92aaab2414b85d22834bb1/raw/1645e683689f130bd7eaa574442b2b0576533bc3/topo5.png)