🍊

JANOG55 NETCON Level 1-9 と Level 2-6 解説記事

2025/01/23に公開

はじめに

JANOG55 NETCONにご参加いただいた皆様ありがとうございました。

本記事ではJANOG55 NETCON にて出題した「Level 1-9」と「Level 2-6」について解説します。

Level 1-9

問題文

あなたはOSPFを使用してネットワークを構築しようとしています。

SR Linuxを扱うのが初めてだったため、https://containerlab.dev/lab-examples/srl-crpd/ を参考にしましたが、RT-01のLoopback 10.10.10.1 から RT-02の Loopback 10.10.10.2 に対してPingが通りません。
Pingが通るように設定を修正しましょう。

達成条件: RT-01のLoopback 10.10.10.1 から RT-02の Loopback 10.10.10.2 に対して通信ができること。
ping 10.10.10.2 network-instance default

制約: Static Routeを設定するのは禁止です。

topo_level1-9

解説

今回の問題は

  • RT-01
    • OSPFの設定はしているが Loopback 0 に関して設定が入っていない
  • RT-02
    • OSPFの設定はしているが Loopback 0 に関して設定が入っていない

という状態になってました。

今回の採点基準はシンプルにRT-01(Loopback 0)から RT-02(Loopback 0)に対してpingできるかどうかです。

ヒントは、元リンクを見ると隠されています。
参考例として記述されているcrpdにおいては、
set protocols ospf area 0.0.0.0 interface lo.0 interface-type nbma
が設定されていると思います。
OSPFの設定にIF(Loopback)が追加が必要ということがわかります。

元リンクを見て、srlinuxの部分だけでコピペして、OSPFのIF(Loopback)設定が抜けていることに気づけるかどうかがポイントになります。

また、多くの人が普段触っている機器以外を扱うとき、公式ドキュメントを読み解いて触り始めると思います。
その部分で読み違いがないかという確認を行いながら設定を行うことが第2のポイントになります。

今回、SR Linux を採用して問題作成しましたが
そもそも SR Linux をどう触って良いか戸惑った方が多かったと思います。
https://learn.srlinux.dev/get-started/cli/ を見て、手探りでも問題動かしていけるかどうかもトラシューの範囲に含めています。(ご了承ください)

次に、解答例を提示しておきます。

解答

config

RT-01_config
set / interface ethernet-1/1
set / interface ethernet-1/1 subinterface 0
set / interface ethernet-1/1 subinterface 0 ipv4
set / interface ethernet-1/1 subinterface 0 ipv4 admin-state enable
set / interface ethernet-1/1 subinterface 0 ipv4 address 192.168.1.1/24

set / interface lo0
set / interface lo0 subinterface 0
set / interface lo0 subinterface 0 ipv4
set / interface lo0 subinterface 0 ipv4 admin-state enable
set / interface lo0 subinterface 0 ipv4 address 10.10.10.1/32

set / network-instance default router-id 10.10.10.1
set / network-instance default interface ethernet-1/1.0
set / network-instance default interface lo0.0
set / network-instance default protocols ospf instance main admin-state enable
set / network-instance default protocols ospf instance main version ospf-v2
set / network-instance default protocols ospf instance main area 0.0.0.0 interface ethernet-1/1.0 interface-type point-to-point
set / network-instance default protocols ospf instance main area 0.0.0.0 interface ethernet-1/1.0
RT-01_config
set / interface ethernet-1/1
set / interface ethernet-1/1 subinterface 0
set / interface ethernet-1/1 subinterface 0 ipv4
set / interface ethernet-1/1 subinterface 0 ipv4 admin-state enable
set / interface ethernet-1/1 subinterface 0 ipv4 address 192.168.1.2/24

set / interface lo0
set / interface lo0 subinterface 0
set / interface lo0 subinterface 0 ipv4
set / interface lo0 subinterface 0 ipv4 admin-state enable
set / interface lo0 subinterface 0 ipv4 address 10.10.10.2/32

set / network-instance default router-id 10.10.10.2
set / network-instance default interface ethernet-1/1.0
set / network-instance default interface lo0.0
set / network-instance default protocols ospf instance main admin-state enable
set / network-instance default protocols ospf instance main version ospf-v2
set / network-instance default protocols ospf instance main area 0.0.0.0 interface ethernet-1/1.0 interface-type point-to-point
set / network-instance default protocols ospf instance main area 0.0.0.0 interface ethernet-1/1.0

config投入例

RT-01、RT-02双方に

enter candidate

set / network-instance default protocols ospf instance main area 0.0.0.0 interface lo0.0

commit now

RT-01, RT-02

info | as yaml

~snip~
      ospf:
        instance:
          - name: main
            admin-state: enable
            version: ospf-v2
            area:
              - area-id: 0.0.0.0
                interface:
                  - interface-name: ethernet-1/1.0
                    interface-type: point-to-point
+                 - interface-name: lo0.0
~snip~

Level 2-6

問題文

あなたは、Hyper NETCON Service という IaaS のL2閉域サービスを使った検証環境を作って欲しいと言わました。
Hyper NETCON Service (AS65111) には社内サービスが乗っており、RT-02 (AS65222) を利用してIaaSのRT-01へeBGP接続しています。
また、RT-03には社内の方が検証利用するようになっており、検証利用者の方でAS番号を自由に定めて、RT-03からRT-02にかけてeBGP接続します。
その際、PC-01からSV-01へのアクセスできるようにする必要があります。

1人目の検証(RT-03: AS65000)が終わり、2人目の利用者が RT-03でAS65333を利用してRT-02へ接続すると、PC-01からSV-01 に対してPingが通らなくなりました。

1人目の検証(RT-03: AS65000):PC-01から SV-01 に対して疎通可能

topology_before_2

2人目の利用(RT-03: AS65333):PC-01から SV-01 に対して疎通不可

topology_after_2

Pingが通るようにRT-02のBGPの設定を修正しましょう。

達成条件: 
PC-01から SV-01 に対して通信ができること。
ping 10.123.45.1

制約条件:
BGPの設定を変更して実現してください
RT-02のみ設定変更できます(RT-01,RT-03は設定不可)

解説

今回の問題は、RT-02で local-as 65333 を使ってしまい経路が広報されない問題となっています。

今回の採点基準は、BGPの経路が広報され、PC-01から SV-01 に対して通信ができることになります。

問題を整理すると

  • RT-01(AS65111)にHyper NETCON Service というサービスがある
  • RT-02(AS65222)を介した接続サービスによって接続できる
  • RT-03(AS65000)からRT-02(AS65222)で接続する準備をしていたが、RT-03(AS65333)となったときに、RT-02(AS65222)からRT-01(AS65111)へ経路広報ができなくなった
    というものです。

RT-02(AS65222)では、RT-01(AS65111)向けに local-as 65333 を使っており、同じAS番号を含むため経路を広報していません。

そのため、同じAS番号を使用していても経路を破棄しない設定を入れる必要があります。(AS番号を変えることでも解決しますが、ここでは説明を省略します)

具体的には、loops optionを使用することで問題を回避できます。

Number of loops option- ローカルAS機能では、AS_PATH属性でAS番号を検知したことにより、ルートを破棄または非表示にする回数の指定もサポートしています。たとえば、 loops 1を設定すると、AS番号がパス内で1回以上検知された場合に、ルートが非表示になります。これはデフォルトの動作です。loops 2を設定した場合、AS番号がパスで2回以上検知されると、ルートは非表示になります。
引用元: JUNOSさんのサイト

以下のリンクを見れば、junos での local-asでの動作がよくわかりますのでご参考にして下さい。
https://codeout.hatenablog.com/entry/2023/10/30/194931

解答例

config

RT-01_config
version 20230616.051920_builder.r1345402;
system {
    ~ snip ~
}
interfaces {
    eth1 {
        description To_SV-01;
        unit 0 {
            family inet {
                address 10.123.45.2/24;
            }
        }
    }
    eth2 {
        description To_RT-02;
        unit 0 {
            family inet {
                address 10.0.10.1/30;
            }
        }
    }
    lo0 {
        unit 0 {
            family inet {
                address 10.250.250.1/32;
            }
        }
    }
}
policy-options {
    policy-statement send-direct {
        term 1 {
            from {
                protocol direct;
                route-filter 10.123.45.0/24 exact;
            }
            then accept;
        }
    }
    policy-statement send-static {
        term 1 {
            from protocol static;
            then accept;
        }
    }
}
routing-options {
    router-id 10.250.250.1;
    autonomous-system 65111;
    static {
        route 10.123.45.0/24 next-hop 10.123.45.1;
        route 10.123.46.0/24 discard;
    }
}
protocols {
    bgp {
        group ext_RT-01 {
            type external;
            local-address 10.0.10.1;
            export [ send-static send-direct ];
            peer-as 65333;
            neighbor 10.0.10.2 {
                description RT-02;
            }
        }
    }
}
RT-02_config
version 20230616.051920_builder.r1345402;
system {
    ~ snip ~
}
interfaces {
    eth1 {
        description To_RT-01;
        unit 0 {
            family inet {
                address 10.0.10.2/30;
            }
        }
    }
    eth2 {
        description To_RT-03;
        unit 0 {
            family inet {
                address 10.0.20.1/30;
            }
        }
    }
    lo0 {
        unit 0 {
            family inet {
                address 10.250.250.2/32;
            }
        }
    }
}
routing-options {
    router-id 10.250.250.2;
    autonomous-system 65222;
}
protocols {
    bgp {
        group ext_RT-01 {
            type external;
            local-address 10.0.10.2;
            peer-as 65111;
            local-as 65333 private;
            neighbor 10.0.10.1 {
                description RT-01;
            }
        }
        group ext_RT-03 {
            type external;
            local-address 10.0.20.1;
            peer-as 65333;
            neighbor 10.0.20.2 {
                description RT-03;
            }
        }
    }
}
RT-03_config
version 20230616.051920_builder.r1345402;
system {
    ~ snip ~
}
interfaces {
    eth1 {
        description To_RT-02;
        unit 0 {
            family inet {
                address 10.0.20.2/30;
            }
        }
    }
    eth2 {
        description To_PC-01;
        unit 0 {
            family inet {
                address 192.168.0.1/24;
            }
        }
    }
    lo0 {
        unit 0 {
            family inet {
                address 10.250.250.6/32;
            }
        }
    }
}
policy-options {
    policy-statement send-direct {
        term 1 {
            from {
                protocol direct;
                route-filter 192.168.0.0/24 exact;
            }
            then accept;
        }
    }
}
routing-options {
    router-id 10.250.250.3;
    autonomous-system 65333;
}
protocols {
    bgp {
        group ext_RT-02 {
            type external;
            local-address 10.0.20.2;
            export send-direct;
            peer-as 65222;
            neighbor 10.0.20.1 {
                description RT-02;
            }
        }
    }
}

RT-02(config設定例)

set protocols bgp group ext_RT-01 type external
set protocols bgp group ext_RT-01 local-address 10.0.10.2
set protocols bgp group ext_RT-01 peer-as 65111
set protocols bgp group ext_RT-01 local-as 65333
+ set protocols bgp group ext_RT-01 local-as loops 2
set protocols bgp group ext_RT-01 local-as private
set protocols bgp group ext_RT-01 neighbor 10.0.10.1 description RT-01
set protocols bgp group ext_RT-03 type external
set protocols bgp group ext_RT-03 local-address 10.0.20.1
set protocols bgp group ext_RT-03 peer-as 65333
set protocols bgp group ext_RT-03 neighbor 10.0.20.2 description RT-03

まとめ

ネットワークでよく使用されるBGP、OSPFの設定を今一度確認したいと思い、問題作成いたしました。

今回のNETCON問題作成を通じて、検証をたくさんすることができ、楽しかったです。
うまく問題に落とし込めず、問題にできなかったのが2つほどあったので、またリベンジしたいと思います。
ここまで読んでいただきありがとうございました。

Discussion