LPIC Level1 復習ラジオ 16:ネットワークコマンド
音声
目次
ネットワーク確認の基本順序
ネットワーク障害では、手元から外側へ順番に確認すると原因を絞り込みやすくなります。
- インターフェースが存在し、有効か
- IPアドレスとプレフィックスが正しいか
- ルーティング、特にデフォルトルートがあるか
- 同一ネットワークやゲートウェイへ到達できるか
- 目的のサービスが待ち受けているか
- 途中経路のどこまで到達しているか
- DNSで名前解決できるか
- HTTPなど目的のアプリケーション通信が成功するか
ip link
ip addr
ip route
ping -c 4 192.0.2.1
ss -lnt
traceroute 198.51.100.10
dig example.com
curl -I https://example.com/
| コマンド | 主な確認対象 |
|---|---|
ip | インターフェース、IPアドレス、ルート、近隣キャッシュ |
ping | ICMP Echoによる到達性と応答時間 |
ss | 待受ソケット、通信中の接続、TCP状態 |
traceroute | 宛先までの経路上のホップ |
dig・host | DNS問い合わせ |
curl・wget | HTTP・HTTPSなどを使ったデータ転送 |
ip
ipは、ネットワークデバイス、IPアドレス、ルーティング、近隣情報などを表示・設定するiproute2の中心的なコマンドです。
ip [オプション] オブジェクト コマンド
| オブジェクト | 省略形 | 対象 |
|---|---|---|
link | l | ネットワークインターフェース |
address | addr、a | IPv4・IPv6アドレス |
route | r | ルーティングテーブル |
neighbour | neigh、n | ARP・IPv6近隣キャッシュ |
インターフェース
ip link show
ip -br link
ip link show dev enp0s3
sudo ip link set dev enp0s3 up
sudo ip link set dev enp0s3 down
-brは簡潔な一行表示です。リモート接続中のインターフェースをdownにすると接続が切れるため注意します。
IPアドレス
ip address show
ip -br address
ip -4 addr show
ip -6 addr show
ip addr show dev enp0s3
192.0.2.10/24の/24はプレフィックス長です。
sudo ip addr add 192.0.2.10/24 dev enp0s3
sudo ip addr del 192.0.2.10/24 dev enp0s3
ipで直接行った設定は通常、再起動後に残りません。永続設定はNetworkManager、systemd-networkd、Netplanなど環境に合った方法で行います。
ルーティング
ip route show
ip -4 route
ip -6 route
ip route get 203.0.113.10
default via 192.0.2.1 dev enp0s3
192.0.2.0/24 dev enp0s3 proto kernel scope link src 192.0.2.10
default:より具体的な経路がない宛先に使うvia:次に渡すゲートウェイdev:送信インターフェースsrc:選択される送信元アドレス
ip route getは、特定宛先へ実際に選ばれる経路、ゲートウェイ、送信元アドレスを確認します。
sudo ip route add default via 192.0.2.1 dev enp0s3
sudo ip route del default via 192.0.2.1 dev enp0s3
sudo ip route add 198.51.100.0/24 via 192.0.2.254
近隣キャッシュ
ip neighbour show
ip neigh show dev enp0s3
ip neigh show 192.0.2.1
| 状態 | 意味 |
|---|---|
REACHABLE | 最近到達できることを確認した |
STALE | 情報はあるが最近の到達確認はない |
PROBE | 到達確認を試行している |
FAILED | 近隣解決に失敗した |
INCOMPLETE | リンク層アドレスが未確定 |
ip monitor
ip monitor link address route
ip monitorは、リンク、アドレス、ルートなどの変化を継続表示します。
ping
pingは、ICMP Echo Requestを送り、Echo Replyを受け取ることで、宛先への到達性や往復時間を確認します。
ping [オプション] 宛先
基本操作
ping -c 4 192.0.2.1
ping -4 -c 4 example.com
ping -6 -c 4 example.com
ping -n -c 4 192.0.2.1
-c 回数:指定回数で終了する-4・-6:IPv4・IPv6を指定する-n:表示時の名前解決を行わない
送信元、間隔、待ち時間
ping -I enp0s3 -c 4 192.0.2.1
ping -I 192.0.2.10 -c 4 198.51.100.10
ping -i 2 -c 4 192.0.2.1
ping -W 2 -c 4 192.0.2.1
ping -w 10 192.0.2.1
| オプション | 意味 |
|---|---|
-I | 送信インターフェースまたは送信元アドレス |
-i 秒 | 送信間隔 |
-W 秒 | 各応答を待つ時間 |
-w 秒 | コマンド全体の締め切り時間 |
パケットサイズ
ping -s 1400 -c 4 192.0.2.1
ping -M do -s 1472 -c 4 192.0.2.1
-sはICMPデータ部分のサイズです。IPv4でMTUが1500の場合、IPヘッダー20バイトとICMPヘッダー8バイトを引いた1472バイトが一つの目安ですが、トンネルなどで条件は変わります。
結果と注意点
4 packets transmitted, 4 received, 0% packet loss
rtt min/avg/max/mdev = 1.100/1.250/1.400/0.120 ms
packet lossと、最小・平均・最大の往復時間を確認します。
pingが失敗しても、ホストやファイアウォールがICMP Echoへ応答しないだけの場合があります。反対にpingが成功しても、目的のTCP・UDPポートが利用できるとは限りません。
ss
ssは、ソケット統計を表示し、待受ポート、通信中の接続、TCP状態、関連プロセスなどを確認します。
ss [オプション] [フィルター]
| オプション | 意味 |
|---|---|
-t | TCP |
-u | UDP |
-l | 待受ソケット |
-a | 待受と非待受を含むすべて |
-n | アドレスやポートを名前へ変換しない |
-p | 関連プロセスを表示する |
-4・-6 | IPv4・IPv6に限定する |
-s | ソケット使用状況の概要 |
代表的な確認
ss -lnt
sudo ss -lntp
sudo ss -tulnp
ss -ant
ss -s
TCP状態で絞り込む
ss -tn state established
ss -tn state time-wait
| 状態 | 意味 |
|---|---|
LISTEN | 接続要求を待っている |
ESTABLISHED | 接続が確立している |
SYN-SENT | 接続要求を送り、応答待ち |
SYN-RECV | 接続要求を受け、確立処理中 |
TIME-WAIT | 終了後、遅延パケットの影響を避けるため待っている |
CLOSE-WAIT | 相手の終了後、ローカルアプリケーションのclose待ち |
フィルター
ss -lnt 'sport = :22'
ss -lnt 'sport = :80 or sport = :443'
ss -tn 'dport = :443'
ss -tn 'src 192.0.2.10'
sportは送信元ポート、dportは宛先ポートです。
待受アドレス
127.0.0.1:8080
0.0.0.0:22
[::]:22
127.0.0.1:8080:通常はローカルホストだけ0.0.0.0:22:IPv4の全ローカルアドレス[::]:22:IPv6の未指定アドレス
IPv6ソケットがIPv4も受け付けるかは、アプリケーションとシステム設定により異なります。
traceroute
tracerouteは、パケットのTTLを段階的に増やし、宛先までの経路上にあるルーターからの応答を表示します。
traceroute [オプション] 宛先
基本操作
traceroute example.com
traceroute -n 198.51.100.10
traceroute -4 example.com
traceroute -6 example.com
-nは各ホップを名前へ変換せず、IPアドレスで表示します。
プローブ方式
sudo traceroute -I example.com
sudo traceroute -T -p 443 example.com
sudo traceroute -T -p 22 198.51.100.10
-I:ICMP Echoプローブ-T:TCP SYNプローブ-p:宛先ポート
標準方式が遮断される環境でも、目的サービスに近い条件で確認できる場合があります。
最大ホップ数と待ち時間
traceroute -m 15 -w 2 example.com
traceroute -i enp0s3 example.com
-m:最大ホップ数-w:応答待ち時間-i:送信インターフェース
アスタリスク
5 * * *
6 203.0.113.1 20.1 ms 19.8 ms 20.0 ms
*は、そのプローブへの応答を待ち時間内に受け取れなかったことを表します。ルーターが応答しない、ICMPを制限しているなどの可能性があります。
その後のホップや最終宛先へ到達しているなら、アスタリスクの位置で通信が必ず途絶えたとは断定できません。また、往路と復路が異なる場合もあります。
dig
digは、DNSサーバーへ問い合わせを送り、返されたDNS応答を詳しく表示します。
dig [@DNSサーバー] 名前 [タイプ] [オプション]
基本とレコードタイプ
dig example.com
dig example.com A
dig example.com AAAA
dig example.com MX
dig example.com NS
dig example.com TXT
dig example.com SOA
| タイプ | 用途 |
|---|---|
A | IPv4アドレス |
AAAA | IPv6アドレス |
MX | メール配送先 |
NS | 権威DNSサーバー |
CNAME | 別名 |
TXT | 文字列情報 |
SOA | ゾーン管理情報 |
PTR | 逆引き |
問い合わせ先を指定する
dig @192.0.2.53 example.com A
dig @1.1.1.1 example.com A
@サーバーを省略すると、通常はシステムのリゾルバー設定に基づくDNSサーバーへ問い合わせます。
出力を絞る
dig +short example.com A
dig +noall +answer example.com A
dig -x 192.0.2.10
+short:簡潔な結果+noall +answer:ANSWERセクションだけ-x:PTRレコードによる逆引き
TCPと委任経路
dig +tcp example.com A
dig +trace example.com
DNSは通常UDPを使いますが、応答が切り詰められた場合などはTCPが使われます。+traceはルートDNSから委任をたどります。
主要な出力
| 項目 | 確認内容 |
|---|---|
status | NOERROR、NXDOMAIN、SERVFAIL、REFUSEDなど |
QUESTION SECTION | 問い合わせた名前とタイプ |
ANSWER SECTION | 回答 |
AUTHORITY SECTION | 権威情報 |
SERVER | 応答したDNSサーバー |
Query time | 問い合わせ時間 |
NOERRORでも、指定タイプの回答が空の場合があります。statusだけでなくANSWERも確認します。
host
hostは、DNS問い合わせを簡潔に実行するコマンドです。短い確認にはhost、詳細な調査にはdigが向いています。
host [オプション] 名前 [DNSサーバー]
基本操作
host example.com
host -t A example.com
host -t AAAA example.com
host -t MX example.com
host -t NS example.com
host 192.0.2.10
-tはレコードタイプを指定します。IPアドレスを指定すると通常は逆引きを行います。
DNSサーバーを指定する
host example.com 192.0.2.53
host -t MX example.com 192.0.2.53
host -v example.com
hostでは問い合わせ先を末尾へ指定します。dig @サーバー 名前とは書き方が異なります。
| コマンド | 向いている用途 |
|---|---|
host | 名前やIPアドレスを短く確認する |
dig | 問い合わせ先、応答セクション、ステータスを詳しく確認する |
curl
curlは、URLで指定したサーバーとの間でデータを転送します。HTTP・HTTPSの動作確認、API、ファイル取得などに使われます。
curl [オプション] URL
本文、ヘッダー、詳細
curl https://example.com/
curl -I https://example.com/
curl -v https://example.com/
curl -L http://example.com/
-I:HTTPでHEADリクエストを行いヘッダーを取得する-v:名前解決、接続、TLS、HTTPヘッダーなどを詳しく表示する-L:3xxリダイレクトをたどる
-vの出力には認証情報やCookieが含まれる場合があるため、ログ共有時に注意します。
保存
curl -o page.html https://example.com/
curl -O https://example.com/files/archive.tar.gz
curl -sS https://example.com/ -o page.html
-o 名前:指定名で保存する-O:URL末尾の名前で保存する-sS:進捗を抑え、失敗時のエラーは表示する
時間制限とIPバージョン
curl --connect-timeout 5 --max-time 15 https://example.com/
curl -4 https://example.com/
curl -6 https://example.com/
ステータスとヘッダー
curl -sS -o /dev/null -w 'code=%{http_code} connect=%{time_connect} total=%{time_total}
' https://example.com/
curl -H 'Accept: application/json' https://api.example.com/data
-wは転送後にHTTPステータスや時間を表示し、-Hは送信ヘッダーを追加します。認証情報を履歴やログへ残さないよう注意します。
データ送信
curl -d 'name=alice&role=user' https://example.com/form
curl -H 'Content-Type: application/json' -d '{"name":"alice"}' https://api.example.com/users
-dを指定すると通常POSTになるため、単純なPOSTでは-X POSTは必須ではありません。
証明書検証
curl -k https://example.com/
-kはTLS証明書の検証を無効にします。通常運用では使用せず、CA証明書、ホスト名、システム時刻、証明書チェーンを修正します。
wget
wgetは、Webからファイルを非対話的に取得します。単一ファイル、再開、再帰取得、ミラーリングなどに向いています。
wget [オプション] URL...
取得、保存名、再開
wget https://example.com/files/archive.tar.gz
wget -O archive.tar.gz 'https://example.com/download?id=123'
wget -c https://example.com/files/large.iso
-O 名前:指定ファイルへ書き出す-c:既存の部分ファイルから再開を試みる
-Oへ複数URLを指定すると一つの出力へ連結されるため注意します。
表示と存在確認
wget -q https://example.com/file.txt
wget -nv https://example.com/file.txt
wget -S https://example.com/file.txt
wget --spider https://example.com/file.txt
wget -N https://example.com/file.txt
-q:出力を抑える-nv:必要最低限の情報を表示する-S:サーバー応答を表示する--spider:保存せず存在を確認する-N:タイムスタンプを基に更新取得する
再帰取得
wget -r https://example.com/docs/
wget -r -np https://example.com/docs/
wget --mirror --convert-links --page-requisites --no-parent https://example.com/docs/
-rは再帰取得、-npは上位ディレクトリへ移動しない指定です。多数のリクエストと容量を発生させる可能性があるため、範囲、負荷、利用規約、著作権を確認します。
IPバージョンと標準出力
wget -4 https://example.com/file.txt
wget -6 https://example.com/file.txt
wget -qO- https://example.com/data.txt | grep 'ERROR'
-O -は標準出力へ送ります。
証明書検証
wget --no-check-certificate https://example.com/file.txt
証明書検証の無効化を恒久対応にせず、CA証明書、ホスト名、時刻、サーバー設定を修正します。
| コマンド | 向いている用途 |
|---|---|
curl | HTTPヘッダー、API、詳細な通信確認、標準出力への転送 |
wget | ファイル保存、再開、再帰取得、非対話的なダウンロード |
実践的な切り分け手順
接続できない
ip -br link
ip -br addr
ip route
ip route get 198.51.100.10
ping -c 4 127.0.0.1
ping -c 4 192.0.2.10
ping -c 4 192.0.2.1
ping -c 4 198.51.100.10
ip neigh show
ループバック、自分のIP、ゲートウェイ、外部IPの順に確認します。ゲートウェイだけ失敗する場合は、リンク、VLAN、プレフィックス、ARPなどを確認します。
IPでは成功するが名前では失敗する
ping -c 4 198.51.100.10
ping -c 4 example.com
dig example.com
dig @192.0.2.53 example.com A
host example.com
cat /etc/resolv.conf
DNSサーバー設定、DNSサーバーへの到達性、回答、検索ドメインなどを確認します。
pingは通るがSSHへ接続できない
sudo ss -lntp 'sport = :22'
systemctl status ssh
systemctl status sshd
ip route get 198.51.100.10
sudo traceroute -T -p 22 -n 198.51.100.10
ssh -vvv user@198.51.100.10
待受、サービス、ファイアウォール、アクセス制御、経路、NAT、SSH設定を確認します。
Webへ接続できない
dig example.com A
dig example.com AAAA
curl -4 -v --connect-timeout 5 https://example.com/
curl -6 -v --connect-timeout 5 https://example.com/
curl -I -L https://example.com/
curl -vで、名前解決、TCP接続、TLS、HTTPのどの段階で失敗するかを確認します。
途中経路が怪しい
traceroute -n 198.51.100.10
sudo traceroute -I -n 198.51.100.10
sudo traceroute -T -p 443 -n 198.51.100.10
複数方式を比較し、途中のアスタリスクだけで障害箇所を断定しません。
よくある間違い
| 間違いやすい点 | 確認すること |
|---|---|
| ping失敗だけで相手停止と断定する | ICMP遮断の場合がある。目的のTCP・UDPも確認する |
| ping成功だけでサービス正常と判断する | ssやcurlでポートとアプリケーションを確認する |
| IPだけ見てプレフィックスを確認しない | ip addrで/24なども確認する |
| デフォルトルートの有無だけを見る | ip route get 宛先で実際の経路を確認する |
| 待受があれば外部接続できると思う | 待受アドレス、ファイアウォール、経路も確認する |
tracerouteの*を障害箇所と断定する | その後のホップと最終到達性も確認する |
dig +shortだけで調査する | 通常出力でstatus、SERVER、ANSWERも確認する |
| hostとdigのサーバー指定を混同する | dig @サーバー 名前、host 名前 サーバー |
| 証明書検証無効化を恒久対応にする | 証明書、CA、ホスト名、時刻を修正する |
wget -rを無制限に実行する | 範囲、負荷、容量、利用規約を確認する |
manページ
man ip
man ip-address
man ip-link
man ip-route
man ip-neighbour
man ping
man ss
man traceroute
man dig
man host
man curl
man wget
30秒チェック
ipでインターフェース、アドレス、ルート、近隣情報を表示するオブジェクトは何でしょうか。- 特定宛先へ使われる経路を確認するコマンドは何でしょうか。
ping -c 4、-W 2、-w 10は何を指定するでしょうか。- ping失敗だけで相手ホストの停止と断定できない理由は何でしょうか。
- TCPとUDPの待受ポートとプロセスを数値表示する代表的な
ssコマンドは何でしょうか。 127.0.0.1:8080で待ち受けるサービスへ、別PCから通常接続できるでしょうか。tracerouteの*は、必ずそこで通信が切れたことを意味するでしょうか。digでDNSサーバーを指定する書き方は何でしょうか。dig -xは何を問い合わせるでしょうか。curl -I、-L、-o、-Oの用途は何でしょうか。wget -c、--spider、-rの用途は何でしょうか。- IPでは通信でき、名前では失敗するときに疑う機能は何でしょうか。
答えを表示
link、address、route、neighbourip route get 宛先-cは回数、-Wは各応答の待ち時間、-wは全体の締め切り- ICMP Echoがファイアウォールなどで遮断される場合があるため
sudo ss -tulnp- 通常できない。ループバックアドレスだけで待ち受けているため
- 意味しない。応答制限でも
*になる dig @DNSサーバー 名前 タイプ- PTRレコードによる逆引き
-Iはヘッダー、-Lはリダイレクト、-oは指定名保存、-OはURL側の名前で保存-cは再開、--spiderは存在確認、-rは再帰取得- DNSによる名前解決
要約
ip linkはインターフェース、ip addrはIPアドレス、ip routeはルート、ip neighは近隣キャッシュを表示します。ip route get 宛先は、実際に選ばれる経路と送信元アドレスを確認します。pingはICMP Echoによる到達性と往復時間を確認し、-cで回数を指定します。- ping失敗はICMP遮断でも起こり、ping成功でも目的サービスの利用可否は分かりません。
ss -lntpはTCPの待受、ss -tulnpはTCP・UDPの待受を確認する代表例です。127.0.0.1での待受は通常ローカルだけ、0.0.0.0はIPv4の全ローカルアドレスです。tracerouteはTTLを利用して経路上のホップを調べ、-nで数値表示します。- 途中の
*は応答がなかったことを示しますが、必ずそこで通信が途絶えたとは限りません。 digはDNS応答を詳しく表示し、@サーバー、+short、-xなどを使えます。hostは簡潔なDNS確認に向き、問い合わせ先サーバーは末尾へ指定します。curlはHTTPヘッダー、API、詳細な通信確認に向き、wgetは保存、再開、再帰取得に向きます。- TLS証明書検証の無効化を恒久対応にせず、証明書やCA設定を修正します。
参考資料
- ip(8) — Linux manual page
- ip-address(8) — Linux manual page
- ip-link(8) — Linux manual page
- ip-route(8) — Linux manual page
- ip-neighbour(8) — Linux manual page
- ping(8) — Linux manual page
- ss(8) — Linux manual page
- traceroute(8) — Linux manual page
- BIND 9 Manual Pages:dig・host
- curl man page
- GNU Wget Manual
- curl(1) — Linux manual page
- wget(1) — Linux manual page