ICTSC2023 予選 問題解説: [ULG] なんか通信できない(´・ω・`)

問題文

概要

とある企業ではネットワーク機能を含めlinuxで構築しており、あなたはdepartment-A、及びrouterの管理者である。
ある日、電源トラブルによってサーバ群の再起動が発生したところ、department-Aからdepartment-Bに対して通信ができなくなってしまった。
過去のrouter管理者に確認すると、department-Aからdepartment-Bの通信は「IPアドレスを変換」して通信を行っていたようだ。
あなたにはdepartment-Aからdepartment-Bへ通信を出来るようにしてほしい。
また、今後このようなことが起きないように再起動しても通信できるとありがたい。

ネットワーク図

前提条件

  • 特になし

制約

  • department-A、及びrouterにログイン可能
  • department-Bにログイン不可
  • ネットワークを制御するプロトコルの一部または全ての機能に関する無効化の禁止

初期状態

  • department-Arouter間のpingによる通信が可能

    • 表示例 ※X.XXX、及びXXXXXには0~9の数字

      [user@department-A ~]$ ping 192.168.50.2 -I 192.168.50.1 -c 5
      PING 192.168.50.2 (192.168.50.2) from 192.168.50.1 : 56(84) bytes of data.
      64 bytes from 192.168.50.2: icmp_seq=1 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.2: icmp_seq=2 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.2: icmp_seq=3 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.2: icmp_seq=4 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.2: icmp_seq=5 ttl=64 time=X.XXX ms
      
      --- 192.168.50.2 ping statistics ---
      5 packets transmitted, 5 received, 0% packet loss, time XXXXms
      rtt min/avg/max/mdev = X.XXX/X.XXX/X.XXX/X.XXX ms
      
  • routerとdepartment-B間のpingによる通信が可能

    • 表示例 ※X.XXX、及びXXXXXには0~9の数字

      [user@router ~]$ ping 192.168.50.5 -I 192.168.50.6 -c 5
      PING 192.168.50.5 (192.168.50.5) from 192.168.50.6 : 56(84) bytes of data.
      64 bytes from 192.168.50.5: icmp_seq=1 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.5: icmp_seq=2 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.5: icmp_seq=3 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.5: icmp_seq=4 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.5: icmp_seq=5 ttl=64 time=X.XXX ms
      
      --- 192.168.50.5 ping statistics ---
      5 packets transmitted, 5 received, 0% packet loss, time XXXXms
      rtt min/avg/max/mdev = X.XXX/X.XXX/X.XXX/X.XXX ms
      

終了状態

department-Aからdepartment-Bへping通信が可能

  • 表示例 ※X.XXX、及びXXXXXには0~9の数字

    [user@department-A ~]$ ping 192.168.50.5 -I 192.168.50.1 -c 5
    PING 192.168.50.5 (192.168.50.5) from 192.168.50.1 : 56(84) bytes of data.
    64 bytes from 192.168.50.5: icmp_seq=1 ttl=63 time=X.XXX ms
    64 bytes from 192.168.50.5: icmp_seq=2 ttl=63 time=X.XXX ms
    64 bytes from 192.168.50.5: icmp_seq=3 ttl=63 time=X.XXX ms
    64 bytes from 192.168.50.5: icmp_seq=4 ttl=63 time=X.XXX ms
    64 bytes from 192.168.50.5: icmp_seq=5 ttl=63 time=X.XXX ms
    
    --- 192.168.50.5 ping statistics ---
    5 packets transmitted, 5 received, 0% packet loss, time XXXXms
    rtt min/avg/max/mdev = X.XXX/X.XXX/X.XXX/X.XXX ms
    

解説

トラブルの原因

本問題ではdepartment-Arouter内の設定が抜けており、department-Aからdepartment-Bへping通信ができない状態になっていました。

抜けている設定は下記のとおりです。

  1. department-Aのルート情報
  2. routerのアドレス変換設定(NAPT or NAT)

以下が初期状態となります。

  • department-Arouter間のpingによる通信が可能

    • 表示例 ※X.XXX、及びXXXXXには0~9の数字
      [user@department-A ~]$ ping 192.168.50.2 -I 192.168.50.1 -c 5
      PING 192.168.50.2 (192.168.50.2) from 192.168.50.1 : 56(84) bytes of data.
      64 bytes from 192.168.50.2: icmp_seq=1 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.2: icmp_seq=2 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.2: icmp_seq=3 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.2: icmp_seq=4 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.2: icmp_seq=5 ttl=64 time=X.XXX ms
      
      --- 192.168.50.2 ping statistics ---
      5 packets transmitted, 5 received, 0% packet loss, time XXXXms
      rtt min/avg/max/mdev = X.XXX/X.XXX/X.XXX/X.XXX ms
      
  • routerdepartment-B間のpingによる通信が可能

    • 表示例 ※X.XXX、及びXXXXXには0~9の数字
      [user@router ~]$ ping 192.168.50.5 -I 192.168.50.6 -c 5
      PING 192.168.50.5 (192.168.50.5) from 192.168.50.6 : 56(84) bytes of data.
      64 bytes from 192.168.50.5: icmp_seq=1 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.5: icmp_seq=2 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.5: icmp_seq=3 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.5: icmp_seq=4 ttl=64 time=X.XXX ms
      64 bytes from 192.168.50.5: icmp_seq=5 ttl=64 time=X.XXX ms
      
      --- 192.168.50.5 ping statistics ---
      5 packets transmitted, 5 received, 0% packet loss, time XXXXms
      rtt min/avg/max/mdev = X.XXX/X.XXX/X.XXX/X.XXX ms
      
  • 問題参加者から確認できないdepartment-Bを含めたルート情報

    • department-A

      [user@department-A ~]$ ip route show
      192.168.50.0/30 dev eth1 proto kernel scope link src 192.168.50.1 metric 101
      192.168.100.0/24 via 192.168.255.254 dev eth0 proto static metric 100
      192.168.255.0/24 dev eth0 proto kernel scope link src 192.168.255.50 metric 100
      
    • router

      [user@router ~]$ ip route show
      192.168.50.0/30 dev eth1 proto kernel scope link src 192.168.50.2 metric 101
      192.168.50.4/30 dev eth2 proto kernel scope link src 192.168.50.6 metric 102
      192.168.100.0/24 via 192.168.255.254 dev eth0 proto static metric 100
      192.168.255.0/24 dev eth0 proto kernel scope link src 192.168.255.51 metric 100
      
    • department-B

      [user@department-B ~]$ ip route show
      192.168.50.4/30 dev eth0 proto kernel scope link src 192.168.50.5 metric 100
      
  • routerのNAPT設定に関する情報

    • コマンド
      [user@router ~]$ sudo firewall-cmd --list-all --zone=develop-external | grep masquerade
        masquerade: no
      

原因の解決策

ここでは下記の2つの設定変更での解決策を紹介します。

  1. department-Aのルート情報の追加
  2. routerのNAPT機能の有効化

department-Aのルート情報の追加は下記のように実施します。

 [user@department-A ~]$ sudo ip route add 192.168.50.4/30 via 192.168.50.2

routerのNAPT機能の有効化は下記のように実施します。

[user@router ~]$ sudo firewall-cmd --zone=develop-external --add-masquerade

上記により、基準点となるdepartment-Aからdepartment-Bへping通信が可能となります。
また、満点をとるためには問題文にある通り、「再起動しても通信できる」必要があります。
再起動を考慮する場合、ルート情報の追加は「mntui」等を用い、static経路の設定が有効となります。
加えて、routerのNAPT機能の有効化はsudo firewall-cmd --zone=develop-external --permanent を追加する必要があります。
もちろん、上記コマンドと前述したNAPT設定を組み合わせsudo firewall-cmd --zone=develop-external --add-masquerade --permanentとしても問題ありません。

本問題は再起動前の経路確認及びpingの結果、
再起動後のpingによる結果のみで採点しているため、iptablesなどを使う方法など様々な解決方法があります。

解決後の状態確認コマンド・結果

  • department-A のip route show
    [user@department-A ~]$ ip route show
    192.168.50.0/30 dev eth1 proto kernel scope link src 192.168.50.1 metric 101
    192.168.50.4/30 via 192.168.50.2 dev eth1
    192.168.100.0/24 via 192.168.255.254 dev eth0 proto static metric 100
    192.168.255.0/24 dev eth0 proto kernel scope link src 192.168.255.50 metric 100
    
  • routerのNAPT設定に関する
    [user@router ~]$ sudo firewall-cmd --list-all --zone=develop-external | grep masquerade
      masquerade: yes
    

採点基準

  • 再起動前にdepartment-Aの経路を追加していること: 10点
  • 再起動前にping送信用のdepartment-Aから宛先のdepartment-Bにpingが飛ぶこと:+30点
  • 再起動後にも設定が保持できており、 department-A から department-B へping通信可能:+10点
    • 想定: nmtuiによるネットワーク設定, firewall-cmdの--permanent など