コース一覧
LinuC レベル1 102試験対策(LPIC-1対応)
疎通トラブルシュート

LinuC レベル1 102試験対策(LPIC-1対応)

LinuC レベル1/LPIC-1の102範囲を、シェル、ユーザーとセキュリティ、ネットワーク、システム管理の実機演習と章末問題で固めます。Linuxを安全に運用するための知識とコマンド操作を体系的に身につける25レッスンのコースです。

1
102 シェルとスクリプト
01. シェル環境18分
02. testと条件式18分
03. スクリプトの制御18分
04. cronとat15分
05. systemdタイマー18分
06. 過去問 シェル15分
2
102 ユーザーとセキュリティ
01. passwdとshadow18分
02. ユーザー管理コマンド18分
03. suとsudo18分
04. 特殊パーミッション18分
05. ホストのセキュリティ18分
06. SSHとGPG18分
07. 過去問 ユーザーとセキュリティ15分
3
102 ネットワーク
01. TCP/IPとウェルノウンポート18分
02. アドレス設定18分
03. ルーティング18分
04. 名前解決の設定18分
05. 疎通トラブルシュート18分
06. 過去問 ネットワーク15分
4
102 システム管理
01. 時刻とNTP15分
02. ロケールと文字コード18分
03. ログ管理18分
04. サービス管理の試験形式18分
05. メールと印刷のきほん15分
06. 過去問 システム管理15分

疎通トラブルシュート

「繋がりません」と言われて、いきなり curl を叩いても何も分かりません。通信は下の層が成り立って初めて上の層が動くので、調べる順番も下から上です。この順番そのものが出題されます。

下の層から順に7段

段確かめること使うコマンド
1リンクは上がっているかip link show
2アドレスは付いているかip addr show
3経路はあるかip route show
4相手まで届くかping / traceroute
5名前は引けるかgetent hosts / dig
6ポートは開いているかss -tuln
7サービスは応答するかcurl / systemctl status

リンクが下りているのに curl を何度叩いても、返ってくるのは同じエラーだけです。逆に1から3までが正常だと分かっていれば、疑う範囲は一気に狭まります。

ip link show の出力に NO-CARRIER が出ていたら、設定ではなく物理層、つまりケーブルやスイッチを疑います。state DOWN だけなら ip link set <名前> up で上がる可能性があります。アドレスがまったく付いていないなら、DHCP で取得する設定なのに応答が無い、という筋を疑います。169.254 で始まるリンクローカルアドレスが付いていたら、それが DHCP に失敗した証拠です。

ping が通らないことは、相手が落ちている証拠にならない

ping は ICMP を使います。ICMP をファイアウォールで落としている相手には届かないので、応答が無いことと相手が停止していることは別です。この誤解は試験でも狙われます。

ターミナル

ping -c 4 192.168.1.1        # 4回だけ送る
traceroute 192.168.1.1       # 経路上のルーターを順に表示
tracepath 192.168.1.1        # traceroute の権限不要版

順番としては、まず自分のアドレス、次にデフォルトゲートウェイ、そして外部、と近いところから遠くへ広げます。どこで止まるかで故障箇所が絞れます。なお、この学習環境には ping も traceroute も入っていません。

アドレス指定なら通るのに名前だと通らない場合は名前解決の問題です。/etc/resolv.conf の nameserver 行、/etc/nsswitch.conf の hosts 行、/etc/hosts の中身を順に確かめます。

外から繋がらないのに、ローカルからは通る

オプション意味
-tTCP のソケット
-uUDP のソケット
-lLISTEN 状態のものだけ
-nポート番号を名前に変換せず数値のまま表示
-pソケットを使っているプロセスを表示。-a はすべての状態

最もよく使う組み合わせが ss -tuln で、TCP と UDP の待ち受けを数値で一覧します。-l を付けないと確立済みの接続も混ざり、-n を付けないと名前解決に時間がかかることがあります。プロセス名まで知りたければ -p を足します。

出力の Local Address と Port の列を見てください。全インターフェースで待ち受けているなら 0.0.0.0 から始まり、ループバックだけなら 127.0.0.1 から始まります。外から繋がらないのにローカルからは通る、という症状なら、この待ち受けアドレスがループバックに限定されていないかを疑います。

ポートが開いていないなら、サービスを見る

ポートが開いていない場合、そもそもサービスが起動していない可能性が高くなります。systemctl status <unit> で状態と直近のログが見え、journalctl -u <unit> でログを追えます。停止していれば systemctl start、次回起動時にも上げたいなら systemctl enable です。

ポートが開いているなら、正しい応答を返すかを確かめます。curl の -s は進捗表示を消すオプション、-f は HTTP エラー時に終了ステータスを 0 以外にするオプションで、この2つの組み合わせがスクリプトから疎通を確かめるときの定番です。-I ならヘッダだけ、-v なら通信の詳細が見られます。

サービスが動いていてポートも開いているのに外から繋がらない場合は、ufw status verbose や iptables -L -n -v でファイアウォールの現在のルールを確認します。ローカルからは通るという切り分けができていれば、原因はファイアウォールかバインドアドレスのどちらかです。

試験で狙われるところ

調べる順番は下の層からです。ping が通らないことは相手が落ちている証拠になりません。ss の -l は LISTEN だけで、付けないと確立済みの接続も混ざります。169.254 で始まるアドレスは DHCP に失敗した印です。そして netstat は非推奨で、現行は ss です。

ヒント

順番が大事です。いきなり curl を叩かず、まず ss -tuln で 80 番が開いているかを見てください。開いていなければサービス側の問題です

サービスの状態は systemctl status <名前> で分かります。inactive (dead) と出ていれば止まっています。起動は systemctl start <名前> です

systemctl start nginx のあと `ss -tuln | grep ':80'` で確認し、curl -sf http://localhost/ を打ちます。記録は `echo 'ss -tuln で 80 番が閉じていた。nginx が停止していたので起動した' > /root/triage.txt` のように書けます

  • 1. ip -br addr で lo が UP で 127.0.0.1 が付いていることを確かめる
  • 2. ss -tuln で 80 番が待ち受けているかを見る
  • 3. systemctl status nginx でサービスの状態を確かめる
  • 4. systemctl start nginx で起動する
  • 5. ss -tuln で 80 番が開いたことを確かめる
  • 6. curl -sf http://localhost/ で応答を確認する
  • 7. 調べた過程を /root/triage.txt に書き残す

Linux は使うときに起動します(初回は約102MB通信します)

4 項目で採点します