TT Lab
はじめる
学ぶ 学習パス コース

LFCS — Linux Foundation認定システム管理者

アドレス・名前・経路を設定して読む

TT Labで続きを見る

目標

静的アドレスの設定ファイルを書き、名前解決の経路を区間ごとに確認し、ソケットとルーティングを読んで要約を作ります。

なぜ重要なのか

このラボのステップ1–2は、筆者のホームラボで実際にクラスターを停止させた事故の、再発防止手順そのものです。DHCPのリース更新でコントロールプレーンのアドレスが変わると、証明書のSANとずれて、apiserverが起動できなくなりました。そのとき学んだのは、dhcp4: falseだけでは固定にならないことです。cloud-initが起動のたびにネットワーク設定を再生成するので、その生成も一緒に止める必要があり、ルーター側のDHCP予約までセットで行って、初めてアドレスが固定されます。

残りのステップは、診断の順序を身につける過程です。getentとdigの結果が分かれるところが、そのまま問題の区間で、ssのソケットの状態とip routeのデフォルトルートは、「ここまでは正常」を確定してくれる根拠です。この環境では、pingとiptablesが塞がれているので、到達性の確認の代わりに、設定ファイルと観察ツールだけで判断する訓練をします。

ステップ

  1. /root/lfcs-net/01-static.yamlに、netplanの設定を書いてください。network.versionは2、インターフェースはenp3s0、dhcp4: false、アドレスは10.0.0.120/24、デフォルトルートはto: defaultとvia: 10.0.0.1、ネームサーバーは10.0.0.1と1.1.1.1です。
  2. /root/lfcs-net/99-disable-network-config.cfgに、cloud-initのネットワーク設定の生成をオフにする内容を書いてください。実際のサーバーなら、このファイルは/etc/cloud/cloud.cfg.d/の下に置きます。
  3. /etc/hostsに、アドレス10.0.0.120、正規名cp-1.homelab.internal、エイリアスcp-1のエントリを追加し、getent hosts cp-1の出力を/root/lfcs-net/getent.txtに保存してください。
  4. /root/lfcs-net/resolv-summary.txtに、nameservers=<nameserver 줄 개수>とndots=<옵션 값 또는 none>の2行を、/etc/resolv.confを基準に書いてください(プレースホルダーは順に、nameserver行の数、オプションの値またはnoneです)。
  5. 127.0.0.1:8087で待ち受けるTCPリスナーを1つ起動し、現在LISTEN中のソケットのローカルアドレスを、/root/lfcs-net/listen.txtに1行ずつ入れてください。
  6. /root/lfcs-net/route.txtに、default_via=<기본 경로의 게이트웨이 또는 none>とprimary_iface=<기본 경로가 나가는 장치>の2行を書いてください(プレースホルダーは順に、デフォルトルートのゲートウェイまたはnone、デフォルトルートが出ていくデバイスです)。
  7. /root/lfcs-net/nsswitch.txtに、hosts=<'/etc/nsswitch.conf' 의 hosts 행 값들>の1行を書いてください。値の間は、空白1つで区切ります(プレースホルダーは、'/etc/nsswitch.conf'のhosts行の値です)。
  8. /root/lfcs-net/firewall-plan.txtに、ルール5行を<동작> <프로토콜> <포트> <출발지>の形式で、下の順序のとおりに書いてください(プレースホルダーは順に、動作、プロトコル、ポート、送信元です)。
allow tcp 22 10.0.0.0/24
allow tcp 6443 10.0.0.0/24
allow tcp 80 0.0.0.0/0
allow tcp 443 0.0.0.0/0
deny any any 0.0.0.0/0

参考

netplanの静的アドレス設定

/root/lfcs-net/01-static.yamlに、netplanの設定を書いてください。network.versionは2、インターフェースはenp3s0、dhcp4: false、アドレスは10.0.0.120/24、デフォルトルートはto: defaultとvia: 10.0.0.1、ネームサーバーは10.0.0.1と1.1.1.1です。

netplanはYAMLで、最上位のキーはnetworkです。インターフェースの下に、DHCPをオフにするキーとアドレスの一覧、ルートの一覧、ネームサーバーが入ります。アドレスには、プレフィックス長も一緒に書きます。

cloud-initのネットワーク設定をオフにする

/root/lfcs-net/99-disable-network-config.cfgに、cloud-initのネットワーク設定の生成をオフにする内容を書いてください。実際のサーバーなら、このファイルは/etc/cloud/cloud.cfg.d/の下に置きます。

1行で十分です。cloud-initがネットワーク設定を再び作れないようにするキーを、無効の値にしてください。

hostsのエントリとgetentの確認

/etc/hostsに、アドレス10.0.0.120、正規名cp-1.homelab.internal、エイリアスcp-1のエントリを追加し、getent hosts cp-1の出力を/root/lfcs-net/getent.txtに保存してください。

hostsファイルの1行は、アドレス、正規名、そしてエイリアスの順です。確認は、DNSだけを見るツールではなく、ネームサービススイッチの全経路を通るツールで行ってください。

リゾルバー設定の要約

/root/lfcs-net/resolv-summary.txtに、nameservers=<nameserver 줄 개수>とndots=<옵션 값 또는 none>の2行を、/etc/resolv.confを基準に書いてください(プレースホルダーは順に、nameserver行の数、オプションの値またはnoneです)。

nameserverで始まる行の数を数え、options行からドットの数のしきい値を探します。その項目がなければ、noneと書いてください。

リスナーを起動してソケット一覧を作る

127.0.0.1:8087で待ち受けるTCPリスナーを1つ起動し、現在LISTEN中のソケットのローカルアドレスを、/root/lfcs-net/listen.txtに1行ずつ入れてください。

Pythonの組み込みモジュールで簡単なサーバーを起動でき、アドレスをループバックに縛るオプションがあります。ソケット一覧は、ヘッダーなしで取り出すオプションを使うと、加工が楽です。

デフォルトルートのパース

/root/lfcs-net/route.txtに、default_via=<기본 경로의 게이트웨이 또는 none>とprimary_iface=<기본 경로가 나가는 장치>の2行を書いてください(プレースホルダーは順に、デフォルトルートのゲートウェイまたはnone、デフォルトルートが出ていくデバイスです)。

デフォルトルートだけを選んで見るサブコマンドがあります。出力から、次のホップと出ていくデバイスを示すキーワードの後ろの値を取り出してください。

名前解決の順序の記録

/root/lfcs-net/nsswitch.txtに、hosts=<'/etc/nsswitch.conf' 의 hosts 행 값들>の1行を書いてください。値の間は、空白1つで区切ります(プレースホルダーは、'/etc/nsswitch.conf'のhosts行の値です)。

hostsで始まる行の値を、空白1つで区切って、そのまま書き写します。この並びの順序が、そのまま問い合わせの順序です。

ファイアウォールルールの設計文書

/root/lfcs-net/firewall-plan.txtに、ルール5行を<동작> <프로토콜> <포트> <출발지>の形式で、下の順序のとおりに書いてください(プレースホルダーは順に、動作、プロトコル、ポート、送信元です)。

ルールは上から評価されます。管理用の接続ポートを先に開けて、デフォルトの遮断は一番最後に置かないと、リモートから自分自身を締め出してしまいます。