ネットワークの「追跡調査」を極める:tcptracerouteでファイアウォールの壁を突破せよ!
ネットワークエンジニアの皆さん、こんにちは。深夜のデータセンターで、冷たい空調の音を聞きながら障害調査に没頭した経験はありますか?
インフラの世界に入ると、最初に教わるのが ping や traceroute ですよね。「どこまで通信が届いているか」「どの地点でパケットが消えたか」を調べるための、まさにエンジニアの「目」となるツールです。
しかし、現場でバリバリ働いていると必ず直面する壁があります。それが「ファイアウォール」です。セキュリティのために通信を厳しく制限している環境では、通常の traceroute が使っている仕組みが遮断され、宛先までたどり着けないことが多々あります。「あれ? 経路は正しいはずなのに、途中で全部タイムアウトになる……」そんな経験、ありますよね。
今回は、そんな絶望的な状況を打破するための最強の武器、tcptraceroute について、現場の視点で噛み砕いて解説します。
—
なぜ、いつもの traceroute はファイアウォールに拒絶されるのか?
まずは、なぜいつもの traceroute がうまくいかないのか、その仕組みを整理しましょう。
普通の traceroute は、「宛先に対して、わざと返事が来やすいような手紙(UDPパケットなど)を投げ、途中のルーターから『届きませんよ!』という拒絶通知をもらうことで経路を特定する」という方法をとっています。
しかし、セキュリティの堅いファイアウォールは、こうした「見知らぬUDPパケット」を「怪しい!」と判断して、容赦なくゴミ箱に直行させます。これでは、経路の先がどうなっているのかサッパリ分かりませんよね。
tcptraceroute は「正当な通行証」を持っている
ここで登場するのが tcptraceroute です。
このツールの賢いところは、パケットを送りつける際に「ウェブサイトを見るための通信(TCP 80番ポートなど)」のフリをする点です。
郵便配達で例えると……
- 普通のtraceroute: 宛先不明の怪しい小包を送りつけて、反応を見て場所を特定する(→怪しいので警備員に没収される)。
- tcptraceroute: 「Web閲覧のお問い合わせです」という名札をつけた、正当なビジネスレターを送りつける(→ファイアウォールも「あ、Web閲覧なら通していいや」と通過させる)。
つまり、tcptraceroute は、ファイアウォールが「許可しているポート」を狙い撃ちすることで、壁をすり抜けて経路情報を取得するのです。
—
早速使ってみよう:実戦的なコマンド
まずはインストールから。多くのLinux環境では以下のコマンドで入ります。
# Ubuntu/Debian系の場合
sudo apt install tcptraceroute
# RHEL/CentOS系の場合
sudo yum install tcptraceroute
準備ができたら、さっそく診断してみましょう。例えば、Webサーバー(80番ポート)への経路を調べたい場合はこう打ちます。
# 80番ポートを指定して、google.comまでの経路を確認する
sudo tcptraceroute google.com 80
コマンドの読み解き方
実行すると、以下のような結果が返ってきます。
Selected device eth0, address 192.168.1.5, port 54321 for outgoing packets
Tracing the path to google.com (142.250.207.78) on TCP port 80, 30 hops max
1 192.168.1.1 0.500 ms 0.450 ms 0.480 ms
2 10.0.0.1 1.200 ms 1.150 ms 1.220 ms
3 * * * (ここでパケットが止まっているように見えるが……)
4 142.250.207.78 15.300 ms 15.100 ms 15.200 ms
注目すべきは「なぜか途中で * * * (タイムアウト)」があるのに、最終目的地 142.250.207.78 には到達できている点です。これは、途中の機器が「自分宛てじゃないパケットは返事しないよ!」と沈黙を守っているだけで、通信自体はしっかり通っているという証明になります。これこそが、現場でのトラブルシュートで最も重要な「パケットは届いているのか?」という問いへの答えです。
—
現場で役立つ応用テクニック
1. ポート番号を指定する
Webサーバーが特殊なポート(例えば 8080 や 443)を使っている場合は、迷わず指定しましょう。
# https(443番ポート)への経路を確認
sudo tcptraceroute example.com 443
2. タイムアウト時間を調整する
回線が重い環境や、海外拠点への診断では、デフォルトの待ち時間だと「タイムアウト」と誤判定されることがあります。その場合は -w オプションで待ち時間を延ばします。
# 待ち時間を3秒(3000ms)に設定してじっくり診断
sudo tcptraceroute -w 3 example.com 80
—
最後に:ネットワークを「視る」力を養おう
tcptraceroute は、単なるデバッグツール以上の存在です。ファイアウォールの向こう側を透視するようなこのツールを使えるようになると、障害対応のスピードが劇的に変わります。
「繋がらない」と言われたとき、ただ ping を打つだけでなく、「どのポートが、どの経路で遮断されているのか?」を自分の手で突き止める。その泥臭い積み重ねこそが、シニアエンジニアへの第一歩です。
皆さんのネットワーク運用ライフが、今日から少しだけ楽になりますように。また現場でお会いしましょう!
コメント