ICTSC2025 本戦 問題解説: [8354)] のび~~~~~るL2
概要
あなたはVPNの設定を任されたネットワークエンジニアです。今回、本社と支店を繋ぐL2VPNの設定を任されました。設定完了後にSV-01からSV-02へのpingが通るのかを確かめたところ、通信できませんでした。SV-01とSV-02でL2VPNで通信ができるようにしてください。

制約
- 繋がらない原因を解答に明記すること
- 再起動しても設定が保存されていること
初期状態
- SV-01からSV-02へL2VPNを介してpingが届かない
user@SV-01:~$ ping 10.200.0.2
PING 10.200.0.2 (10.200.0.2) from 10.200.0.1 : 56(84) bytes of data.
^C
--- 10.200.0.2 ping statistics ---
13 packets transmitted, 0 received, 100% packet loss, time 12316ms
終了状態
- SV-01からSV-02へL2VPNを介してpingが届く
user@SV-01#ping 10.200.0.2
PING 10.200.0.2 (10.200.0.2) from 10.200.0.1 : 56(84) bytes of data.
64 bytes from 10.200.0.2: icmp_seq=1 ttl=64 time=1.08 ms
64 bytes from 10.200.0.2: icmp_seq=2 ttl=64 time=0.970 ms
64 bytes from 10.200.0.2: icmp_seq=3 ttl=64 time=1.36 ms
64 bytes from 10.200.0.2: icmp_seq=4 ttl=64 time=0.946 ms
^C
--- 10.200.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 0.946/1.090/1.363/0.165 ms
解説
今回の問題では、RT-01/RT-02(VyOS)の設定に3つの誤りがあり、それらが重なることでL2VPN経由の通信が一切できない状態になっていました。それぞれの原因を順に見ていきます。
原因1: ファイアウォールルールのsource/destinationアドレスが逆
RT-01/RT-02のファイアウォール(ipv4 name 100)はWANインターフェースのinputフィルタとして適用されています。inputフィルタとは、外部から自分宛に入ってくるパケットに対して適用されるフィルタです。そのため、sourceには通信相手のアドレス、destinationには自分自身のアドレスを設定する必要があります。
しかし初期状態ではsource addressとdestination addressが逆になっており、相手から来るパケットが自分自身のアドレスから来たものとしてマッチせず、ルールが意図通りに機能していませんでした。
RT-01の誤った設定(RT-02も同様に逆):
- rule 10 source address: 192.168.254.1(自分) → 相手(192.168.254.2)であるべき
- rule 10 destination address: 192.168.254.2(相手) → 自分(192.168.254.1)であるべき
原因2: L2TPv3(UDP 5000)およびESP(プロトコル50)がファイアウォールで許可されていない
今回のL2VPNはL2TPv3をIPsecで暗号化した構成になっています。この構成では、鍵交換のためのIKE(UDP 500)、暗号化されたデータを運ぶESP(プロトコル番号50)、L2TPv3のデータプレーン(UDP 5000)の3種類の通信が必要です。
しかし初期設定ではIKE(UDP 500)を許可するルールしか存在しておらず、ESPとUDP 5000のルールが抜けていました。ファイアウォールのdefault actionがdropのため、これらのパケットはすべて破棄されており、IPsecのトンネル確立もL2TPv3のセッション確立もできない状態でした。
原因3: L2TPv3のpeer-tunnel-id / peer-session-idのミスマッチ
L2TPv3ではトンネルを識別するtunnel-idとセッションを識別するsession-idを使用します。自分側のtunnel-id/session-idと、相手側が期待するpeer-tunnel-id/peer-session-idが一致していなければトンネルは確立しません。
初期状態ではRT-01/RT-02ともにpeer-tunnel-idとpeer-session-idが自分自身のIDと同じ値に設定されており、相手側のIDと一致していませんでした。
修正内容
RT-01での修正
configure
# 原因1: ファイアウォールのsrc/dst修正
set firewall ipv4 name 100 rule 10 source address 192.168.254.2
set firewall ipv4 name 100 rule 10 destination address 192.168.254.1
# 原因2: L2TPv3 (UDP 5000) 許可ルール追加
set firewall ipv4 name 100 rule 20 action accept
set firewall ipv4 name 100 rule 20 protocol udp
set firewall ipv4 name 100 rule 20 destination port 5000
set firewall ipv4 name 100 rule 20 source address 192.168.254.2
set firewall ipv4 name 100 rule 20 destination address 192.168.254.1
# 原因2: ESP (プロトコル50) 許可ルール追加
set firewall ipv4 name 100 rule 30 action accept
set firewall ipv4 name 100 rule 30 protocol esp
set firewall ipv4 name 100 rule 30 source address 192.168.254.2
set firewall ipv4 name 100 rule 30 destination address 192.168.254.1
# 原因3: L2TPv3 peer ID修正
set interfaces l2tpv3 l2tpeth0 peer-tunnel-id 220
set interfaces l2tpv3 l2tpeth0 peer-session-id 120
commit
save
RT-02にも同様の修正を行います。
以上の修正を行うことでL2VPNのトンネルとセッションが正しく確立され、必要な通信もファイアウォールで許可されるようになるため、SV-01からSV-02へのpingが通るようになります。
採点基準
- L2TPのpeer-<session | tunnel>-idが正しいものになっている。 100点
- ファイアウォールの設定について、必要な通信が許可されている。 50点
- L2TPで必要な通信なポートが塞がれていたことが明記されている。50点
講評
今回の解答の中にも、いずいと同様にAIによって報告書が作成されていると思われるケースや、VyOSのconfigureモードを使わずに設定を投入しているケースが見受けられました。このような解法を制約として明示できなかった点は作問者の考慮不足ではありますが、報告書は最終的に人間が読むものです。AIが生成した内容をそのまま提出するのではなく、内容を自分の言葉で確認・整理した上で提出していただきたかったというのが正直な感想になります。
ただ、全てのチームから解答をいただけたことは非常に嬉しく思います。ありがとうございました。