Linuxサーバーの運用において、ネットワーク関連のトラブルシューティングは避けて通れません。「サーバーに接続できない」「Webサイトが表示されない」「レスポンスが遅い」――こうした問題に対処するには、ネットワークコマンドの正確な知識が必要です。
本記事では、ip・ss・curl・ping・dig・tracerouteなど、実務で頻繁に使用するLinuxネットワークコマンドを体系的に解説します。Linuxの基礎と基本コマンドを理解した方が、ネットワーク管理スキルを身につけるための実践ガイドです。
ネットワーク設定を確認する:ipコマンド
以前はifconfigが広く使われていましたが、現在のLinuxではipコマンドが標準です。ifconfigはnet-toolsパッケージに含まれ、多くの最新ディストリビューションではデフォルトでインストールされていません。
IPアドレスの確認
# すべてのネットワークインターフェースのIPアドレスを表示
$ ip addr show
# 短縮形
$ ip a
# 特定のインターフェースだけ表示
$ ip addr show eth0
# IPv4アドレスだけを表示
$ ip -4 addr show
# 出力例
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
link/ether 00:16:3e:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::216:3eff:fexx:xxxx/64 scope link
valid_lft forever preferred_lft forever
出力の中で注目すべきポイントは以下のとおりです。
- state UP/DOWN:インターフェースの有効・無効状態
- inet:IPv4アドレスとサブネットマスク(CIDR表記)
- inet6:IPv6アドレス
- link/ether:MACアドレス
ルーティングテーブルの確認
# ルーティングテーブルを表示
$ ip route show
# 短縮形
$ ip r
# 出力例
default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 100
# 特定の宛先への経路を確認
$ ip route get 8.8.8.8
8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.100 uid 1000
インターフェースの操作
# インターフェースを無効化
$ sudo ip link set eth0 down
# インターフェースを有効化
$ sudo ip link set eth0 up
# IPアドレスを追加
$ sudo ip addr add 192.168.1.200/24 dev eth0
# IPアドレスを削除
$ sudo ip addr del 192.168.1.200/24 dev eth0
なお、ipコマンドで行った設定はサーバーを再起動すると消えます。永続的な設定は、ディストリビューションのネットワーク設定ファイル(Netplan、NetworkManagerなど)を編集する必要があります。
ネットワーク接続を確認する:ss・netstatコマンド
サーバーがどのポートで待ち受けているか、どのクライアントが接続しているかを確認するのがssコマンドです。旧来のnetstatに代わる高速なコマンドです。
ssコマンドの基本的な使い方
# リッスン中のTCPポートを表示
$ ss -tlnp
# リッスン中のTCP/UDPポートを表示
$ ss -tulnp
# すべてのTCP接続(確立済み含む)を表示
$ ss -tanp
# 出力例
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=890,fd=3))
LISTEN 0 70 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=5678,fd=22))
ESTAB 0 0 192.168.1.100:22 192.168.1.50:54321 users:(("sshd",pid=9012,fd=4))
ssコマンドの主要オプションは以下のとおりです。
| オプション | 説明 |
|---|---|
| -t | TCP接続のみ表示 |
| -u | UDP接続のみ表示 |
| -l | リッスン中のソケットのみ表示 |
| -n | 名前解決せず数値で表示 |
| -p | プロセス情報を表示 |
| -a | すべての状態のソケットを表示 |
| -s | 統計サマリーを表示 |
実務でよく使うssの活用パターン
# 特定ポートが使用中か確認
$ ss -tlnp | grep :80
# 特定IPからの接続数を確認
$ ss -tn | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head
# 接続状態ごとの数を集計
$ ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn
# MySQLへの接続数を確認
$ ss -tn dst :3306 | wc -l
サーバーのパフォーマンス監視においても、接続数の監視は重要な指標の一つです。異常な接続数の増加はDDoS攻撃やアプリケーションの不具合を示唆している場合があります。
疎通確認を行う:ping・traceroute
ネットワークトラブルの初動調査として、まず通信先への到達性を確認するのが基本です。
pingコマンドで接続性を確認する
# 基本的なping(Ctrl+Cで停止)
$ ping 192.168.1.1
# 回数を指定(4回だけ送信)
$ ping -c 4 192.168.1.1
# タイムアウトを指定(5秒)
$ ping -W 5 -c 4 example.com
# 出力例
PING example.com (93.184.216.34) 56(84) bytes of data.
64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=12.3 ms
64 bytes from 93.184.216.34: icmp_seq=2 ttl=56 time=11.8 ms
64 bytes from 93.184.216.34: icmp_seq=3 ttl=56 time=12.1 ms
64 bytes from 93.184.216.34: icmp_seq=4 ttl=56 time=11.9 ms
--- example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 11.800/12.025/12.300/0.183 ms
確認すべきポイントは次の3つです。
- packet loss:パケットロス率(0%が正常)
- time(RTT):応答時間(ミリ秒)
- TTL:パケットの生存時間
ただし、最近のサーバーやクラウド環境ではICMPがファイアウォールでブロックされていることも多いため、pingが通らないからといって必ずしもサーバーがダウンしているとは限りません。
tracerouteでネットワーク経路を調査する
# 経路を調査(UDPベース)
$ traceroute example.com
# TCPベースで調査(ICMPがブロックされている場合に有効)
$ sudo traceroute -T -p 80 example.com
# 出力例
traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
1 gateway (192.168.1.1) 0.523 ms 0.497 ms 0.475 ms
2 isp-router (203.0.113.1) 5.234 ms 5.198 ms 5.167 ms
3 * * *
4 core-router (198.51.100.1) 10.456 ms 10.423 ms 10.389 ms
* * *が表示される箇所は、そのルーターがICMP応答を返さないことを意味します。ネットワーク障害の場合は、どの地点から応答が途切れているかで問題箇所を特定できます。
HTTPリクエストを送信する:curlコマンド
Webサーバーやアプリケーションの動作確認、APIのテストに欠かせないのがcurlコマンドです。
curlの基本的な使い方
# GETリクエスト(HTMLを取得)
$ curl https://example.com
# レスポンスヘッダーだけを表示
$ curl -I https://example.com
# レスポンスヘッダーとボディを表示
$ curl -i https://example.com
# リダイレクトを自動追従
$ curl -L https://example.com
# ファイルをダウンロード
$ curl -O https://example.com/file.zip
# 出力をファイルに保存
$ curl -o output.html https://example.com
APIテストでの活用
# POSTリクエスト(JSON送信)
$ curl -X POST \
-H "Content-Type: application/json" \
-d '{"name":"tanaka","email":"tanaka@example.com"}' \
https://api.example.com/users
# PUTリクエスト
$ curl -X PUT \
-H "Content-Type: application/json" \
-d '{"name":"tanaka_updated"}' \
https://api.example.com/users/1
# Authorizationヘッダーを付与
$ curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.example.com/protected
# レスポンスタイムの計測
$ curl -o /dev/null -s -w "HTTP Code: %{http_code}\nTime Total: %{time_total}s\nTime Connect: %{time_connect}s\n" https://example.com
HTTP Code: 200
Time Total: 0.234567s
Time Connect: 0.012345s
トラブルシューティングでの活用
# SSL証明書の詳細を確認
$ curl -vI https://example.com 2>&1 | grep -A 5 "Server certificate"
# 特定のIPアドレスに対してHostヘッダーを指定してリクエスト
$ curl -H "Host: example.com" http://192.168.1.100/
# DNSを無視して特定IPに接続(名前解決の問題切り分け)
$ curl --resolve example.com:443:192.168.1.100 https://example.com
# タイムアウトを設定
$ curl --connect-timeout 5 --max-time 10 https://example.com
curlはWebサーバーのNginx設定の確認や、トラブルシューティングで特に頻繁に使われます。
DNS関連のコマンド:dig・nslookup・host
ドメイン名からIPアドレスを調べる名前解決の確認は、ネットワークトラブルシューティングの基本です。
digコマンドで詳細なDNS情報を取得する
# 基本的な名前解決
$ dig example.com
# Aレコード(IPv4アドレス)を取得
$ dig example.com A +short
93.184.216.34
# MXレコード(メールサーバー)を取得
$ dig example.com MX +short
10 mail.example.com.
# NSレコード(ネームサーバー)を取得
$ dig example.com NS +short
# 特定のDNSサーバーを使って問い合わせ
$ dig @8.8.8.8 example.com
# 逆引き(IPアドレスからドメイン名)
$ dig -x 93.184.216.34
# TXTレコードを取得(SPF、DKIM確認など)
$ dig example.com TXT +short
# 権威DNSサーバーからの回答を追跡
$ dig example.com +trace
nslookupとhostコマンド
digが最も詳細な情報を提供しますが、簡易的な確認にはnslookupやhostも便利です。
# nslookupで名前解決
$ nslookup example.com
# 特定のDNSサーバーを指定
$ nslookup example.com 8.8.8.8
# hostコマンド(シンプルな出力)
$ host example.com
example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946
example.com mail is handled by 10 mail.example.com.
DNS関連のトラブルシューティング手順
「サイトにアクセスできない」という問題が発生した場合のDNS調査手順を紹介します。
- まず
dig example.com +shortで名前解決できるか確認する - 解決できない場合は
dig @8.8.8.8 example.comで別のDNSサーバーを試す - DNSサーバーの設定を
cat /etc/resolv.confで確認する /etc/hostsファイルにローカルのオーバーライドがないか確認するdig example.com +traceで名前解決の経路を追跡する
その他の便利なネットワークコマンド
ここまで紹介したコマンド以外にも、実務で役立つネットワークコマンドを紹介します。
wgetでファイルをダウンロードする
# ファイルのダウンロード
$ wget https://example.com/file.tar.gz
# ダウンロード先を指定
$ wget -O /tmp/file.tar.gz https://example.com/file.tar.gz
# バックグラウンドでダウンロード
$ wget -b https://example.com/large-file.iso
# 再帰的にWebサイトをダウンロード(ミラーリング)
$ wget -r -l 2 -np https://example.com/docs/
ncatで接続テストを行う
# 特定ポートへの接続テスト
$ nc -zv example.com 80
Connection to example.com 80 port [tcp/http] succeeded!
# ポートスキャン(範囲指定)
$ nc -zv example.com 80-443
# 簡易的なサーバーとして待ち受け
$ nc -l 8080
tcpdumpでパケットキャプチャを行う
ネットワーク上を流れるパケットを直接キャプチャして調査する高度なコマンドです。
# 特定インターフェースのパケットをキャプチャ
$ sudo tcpdump -i eth0
# 特定ポート(80番)のパケットのみキャプチャ
$ sudo tcpdump -i eth0 port 80
# 特定ホストとの通信をキャプチャ
$ sudo tcpdump -i eth0 host 192.168.1.50
# キャプチャ結果をファイルに保存(Wiresharkで分析可能)
$ sudo tcpdump -i eth0 -w /tmp/capture.pcap -c 1000
# 保存したファイルを読み込んで表示
$ tcpdump -r /tmp/capture.pcap
mtrで継続的な経路品質を確認する
mtrはpingとtracerouteを統合したようなツールで、経路上の各ホップのパケットロスや遅延を継続的に監視できます。
# mtrでネットワーク経路の品質を確認
$ mtr example.com
# レポート形式で出力(10回の結果をまとめて表示)
$ mtr -r -c 10 example.com
ネットワークトラブルシューティングの基本フロー
ネットワーク障害が発生した際の調査手順を体系的にまとめます。問題の切り分けを効率的に行うための基本フローです。
ステップ1:ローカルの接続状態を確認
# IPアドレスが設定されているか確認
$ ip addr show
# デフォルトゲートウェイが設定されているか確認
$ ip route show
# ゲートウェイへの疎通を確認
$ ping -c 3 $(ip route | grep default | awk '{print $3}')
ステップ2:DNS名前解決を確認
# 名前解決が正常か確認
$ dig example.com +short
# 別のDNSサーバーで試す
$ dig @8.8.8.8 example.com +short
ステップ3:宛先への到達性を確認
# pingで疎通確認
$ ping -c 4 example.com
# tracerouteで経路を確認
$ traceroute example.com
# 特定ポートへの接続を確認
$ nc -zv example.com 443
ステップ4:アプリケーション層を確認
# HTTPレスポンスを確認
$ curl -I https://example.com
# ローカルのリッスンポートを確認
$ ss -tlnp
このフローに沿って調査することで、問題がネットワーク層にあるのか、DNS設定にあるのか、アプリケーションにあるのかを効率的に切り分けられます。詳細なトラブルシューティング手法についてはLinuxトラブルシューティングガイドも参考にしてください。
まとめ:ネットワークコマンドの習得でサーバー運用力を強化する
本記事では、Linuxの主要なネットワークコマンドを実例付きで解説しました。重要なポイントを振り返ります。
- ip:ネットワーク設定の確認・変更(ifconfigの後継)
- ss:ポートの使用状況と接続状態の確認(netstatの後継)
- ping / traceroute / mtr:ネットワーク疎通確認と経路調査
- curl / wget:HTTP通信の確認とファイルダウンロード
- dig / nslookup / host:DNS名前解決の確認
- tcpdump:パケットキャプチャによる詳細な通信解析
ネットワークコマンドの知識は、SSH接続によるリモート管理やファイアウォール設定、クラウドサーバーの運用でも直接役立ちます。まずは開発環境で各コマンドを試し、出力の読み方に慣れることから始めましょう。
また、サーバーの安定運用にはログ管理とネットワーク監視を組み合わせることが重要です。パフォーマンス監視の手法も合わせて学ぶことで、より包括的なサーバー管理スキルが身につきます。
関連記事
AWS CloudFrontでサイト高速化|CDN設定からキャッシュ戦略まで実践解説
AWS CloudWatchで監視・アラート設定|運用担当者のための実践ガイド
AWS CodePipelineでCI/CD構築|コード変更から本番デプロイまでの自動化
AWS Cost Explorerでコスト可視化|ムダを見つけて月額費用を削減する実践術
AWS ECS/Fargateでコンテナ運用|Docker→本番デプロイの実践ガイド
AWS IAMのベストプラクティス|最小権限の原則を実務で実装する方法
AWS RDSの実務ガイド|データベース構築・バックアップ・パフォーマンスチューニング
AWS S3の実務活用ガイド|バケット設計・アクセス制御・コスト最適化の実践