第20章 ネットワークの基礎とトラブルシューティング

LPIC-1 109.1〜109.4 相当

サーバーはネットワークにつながって初めて価値を発揮します。ここではネットワークの基礎用語と、接続確認・調査に使うコマンドを扱います。

TCP/IPの基礎用語

用語意味
IPアドレスネットワーク上の機器を識別する番号(例: 192.168.1.10)
サブネットマスクIPアドレスのうち、どこまでがネットワーク部かを示す(例: /24)
ポート番号同じIPアドレス内で、どのサービス宛かを識別する番号(例: HTTPは80、SSHは22)
デフォルトゲートウェイ異なるネットワーク宛の通信を中継するルーター
プライベートIPアドレスインターネットには直接ルーティングされない、組織内などで自由に使えるアドレス範囲(例: 10.0.0.0/8、192.168.0.0/16)

サブネットマスク/24は「先頭24ビットがネットワーク部」という意味で、10進数表記では255.255.255.0に相当します。同じネットワーク部を持つ機器同士は、ルーターを経由せず直接通信できます。逆にネットワーク部が異なる相手と通信する場合は、必ずデフォルトゲートウェイを経由することになります。

TCP/IPの層 対応するOSI参照モデル 代表的なプロトコル / コマンド アプリケーション層 アプリケーション/ プレゼンテーション/セッション層 HTTP, DNS, SSH curl, dig, ssh トランスポート層 トランスポート層 TCP, UDP ss, netstat インターネット層 ネットワーク層 IP, ICMP ip addr, ping, traceroute ネットワーク インターフェース層 データリンク層/物理層 Ethernet, Wi-Fi ip link, ethtool 送信時は上(アプリ)から下(物理)へカプセル化し、受信時は下から上へ剥がしながら渡していきます。
TCP/IPの階層モデルとOSI参照モデル・代表的なコマンドの対応。TCP/IPの4層はOSI参照モデルの7層をまとめたものにあたります。障害調査では、どの層のコマンドで切り分けているかを意識すると原因を絞り込みやすくなります。

ネットワーク設定の確認・変更

近年のディストリビューションでは、古い ifconfig / route の代わりに ip コマンドを使うのが標準です。これらの旧コマンドはnet-toolsパッケージに含まれており、多くのディストリビューションでは既定でインストールされなくなっています。

試験対策: LPIC試験では、歴史的経緯からifconfig/netstat/routeの基本的な使い方が今も出題されることがあります。実務では現行標準のip/ssを使いつつ、試験対策としては両方の対応関係(ifconfig→ip addr、route→ip route、netstat→ss)を押さえておくとよいでしょう。
$ ip addr show          # IPアドレスの確認(旧: ifconfig)
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:15:5d:01:ca:01 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
$ ip a                  # ip addr show の省略形(出力は同じ)
$ ip route show         # ルーティングテーブルの確認(旧: route)
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.10 metric 100
$ ip link set eth0 up   # インターフェースを有効化(正常時は無出力)
$ sudo ip addr add 192.168.1.20/24 dev eth0   # IPアドレスを一時的に追加(正常時は無出力。再起動で消える一時設定)
$ ip neigh show         # ARPテーブル(IPとMACアドレスの対応)を確認(旧: arp -a)
192.168.1.1 dev eth0 lladdr 00:11:22:33:44:55 REACHABLE
192.168.1.30 dev eth0 lladdr aa:bb:cc:dd:ee:ff STALE

この行のこの値に注目: ip addr showのinet行にあるIPアドレスとプレフィックス(/24)が実際に割り当てられている設定です。ip route showのdefault via行がデフォルトゲートウェイで、これが無い・誤っている場合は外部ネットワークに到達できません。ip neigh showのREACHABLEは直近で応答があったことを示し、STALEは一定時間応答確認をしていない状態を示します。

接続確認・トラブルシューティング

コマンド用途
ping ホスト名相手に到達できるかを確認(ICMP)
traceroute ホスト名相手までの経路(経由するルーター)を確認
mtr ホスト名tracerouteとpingを組み合わせ、経路上の各ルーターの応答状況を継続的に表示
ss -tulnp待ち受け中のポートとプロセスを確認(旧: netstat)
curl URLWebサーバーなどに実際にリクエストを送って応答を確認
wget URLURLからファイルをダウンロード

ss -tulnpのオプションはそれぞれ意味を持ちます。-t(TCP)、-u(UDP)、-l(待ち受け中=LISTENのソケットのみ)、-n(名前解決をせず数値のまま表示。応答が速くなる)、-p(プロセス名とPIDも表示。多くはroot権限が必要)という組み合わせです。「特定のポートが誰にどう使われているか」を調べる際の定番コマンドなので、オプションの意味ごと覚えておくと実務でも役立ちます。

$ ss -tulnp | grep :80
LISTEN 0  128  0.0.0.0:80  0.0.0.0:*  users:(("nginx",pid=1200,fd=6))

クライアント側のDNS設定

DNSは、example.com のような名前をIPアドレスに変換する仕組みです。クライアント側でどのDNSサーバーに問い合わせるかは /etc/resolv.conf で設定されます。

$ cat /etc/resolv.conf
nameserver 8.8.8.8
$ dig example.com          # 詳細な名前解決情報を確認
; <<>> DiG 9.18.30-0ubuntu0.24.04.2-Ubuntu <<>> example.com
;; ANSWER SECTION:
example.com.        86400   IN      A       93.184.216.34
;; Query time: 24 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
$ nslookup example.com     # 簡易的な名前解決確認
Server:  192.168.1.1
Address: 192.168.1.1#53

Name:  example.com
Address: 93.184.216.34

この行のこの値に注目: digのANSWER SECTIONにあるレコードが実際の名前解決結果で、86400はこのレコードのTTL(秒)です。SERVER:行でどの名前解決サーバーに問い合わせたかを確認できます。nslookupも同じ結果を簡潔な形式で表示しますが、近年はdigの使用が推奨されています。

主要なポート番号

ポート番号プロトコル・サービス
22SSH
25SMTP(メール送信)
53DNS
80HTTP
443HTTPS
3306MySQL/MariaDB

これらの対応関係は/etc/servicesファイルにも記載されています。1〜1023番は「well-knownポート」と呼ばれ、割り当てには特別な意味があります。

永続的なネットワーク設定

ip addr addで設定したIPアドレスは、mountと同様に再起動すると消えてしまう一時的な設定です。恒久的に設定するための方法はディストリビューションによって異なります。

方式特徴
NetworkManager(nmcli)多くのデスクトップ系・近年のディストリで標準。nmcli con showで接続一覧を確認
netplan(Ubuntu)YAML形式(/etc/netplan/*.yaml)で設定を記述し、netplan applyで反映
/etc/network/interfaces(Debian系旧方式)設定ファイルに直接IPアドレスなどを記述する伝統的な方式
$ nmcli con show                 # NetworkManagerが管理する接続の一覧
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  8f2b1a3e-6c4d-4a2f-9e1b-0c5d3f7a2b91  ethernet  eth0
$ nmcli device status            # 各インターフェースの状態
DEVICE  TYPE      STATE      CONNECTION
eth0    ethernet  connected  Wired connection 1
lo      loopback  unmanaged  --

この行のこの値に注目: nmcli device statusのSTATE列がconnectedになっていればNetworkManager側では正常に接続を認識しています。connectingやunavailableのままの場合は、ケーブル未接続やドライバの問題を疑います。

IPv4とIPv6

近年のシステムではIPv6にも対応していることが一般的です。IPv4のアドレスが「192.168.1.10」のような10進数4組(32ビット)であるのに対し、IPv6は「2001:db8::1」のように16進数8組(128ビット)で表現されます。IPv4の枯渇問題を解決するために設計されただけあってアドレス空間は桁違いに広く、理論上はほぼ無尽蔵にアドレスを割り当てられます。

$ ping -6 example.com    # IPv6でpingを送信
PING example.com(2606:2800:21f:cb07:6820:80da:af6b:8b2c (2606:2800:...)) 56 data bytes
64 bytes from 2606:2800:21f:cb07:6820:80da:af6b:8b2c: icmp_seq=1 ttl=52 time=112 ms
--- example.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
$ ip -6 addr show         # IPv6アドレスの確認
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    inet6 2001:db8:1::10/64 scope global dynamic
       valid_lft 2591994sec preferred_lft 604794sec
    inet6 fe80::215:5dff:fe01:ca01/64 scope link

この行のこの値に注目: ping -6で応答が返れば、IPv6での疎通性がある証拠です。ip -6 addr showでは、scope globalのアドレスが外部と通信可能なグローバルアドレス、scope linkのfe80::で始まるアドレスは同一リンク内でのみ有効なリンクローカルアドレスです。

IPv6アドレス表記では、連続する0000のブロックを::で1回だけ省略できます。例えば2001:0db8:0000:0000:0000:0000:0000:0001は2001:db8::1と省略でき、各ブロックの先頭の0も省略可能です(0db8→db8)。

よくあるネットワークトラブルの切り分け

「Webサイトに繋がらない」といったトラブルが起きたとき、どこに問題があるかを順序立てて切り分けることが重要です。代表的な手順の例を示します。

手順確認内容使うコマンド
1. 自分のネットワーク設定を確認IPアドレス・ゲートウェイが正しく設定されているかip addr show、ip route show
2. 同一ネットワーク内への疎通確認デフォルトゲートウェイまで届くかping ゲートウェイのIP
3. 名前解決の確認ホスト名がIPアドレスに変換できるかdig、nslookup
4. 外部への疎通確認インターネット上の既知のIP(DNSサーバーなど)に届くかping 8.8.8.8
5. サービスの応答確認目的のポートで実際に応答が返るかcurl、ss -tulnp(サーバー側で確認)

この手順のように「近い範囲」から「遠い範囲」へと順番に確認していくことで、問題が自分のマシン側にあるのか、途中の経路にあるのか、それとも相手のサーバー側にあるのかを効率よく絞り込めます。特にping 8.8.8.8のようにIPアドレス直打ちで疎通が確認できるのに、ホスト名を指定すると失敗する場合は、DNS(名前解決)まわりに問題があると強く推測できます。

試験対策: LPIC-1では、pingやdig・ip・ssといったコマンドの基本的なオプションの意味に加え、「どのレイヤーの問題かを切り分けるにはどのコマンドを使うべきか」という実践的な視点で出題されることがあります。単なる暗記ではなく、それぞれのコマンドが何を確認するためのものかを理解しておきましょう。

traceroute — 経路上のどこで詰まっているかを調べる

pingが「最終的に相手に届くかどうか」だけを教えてくれるのに対し、traceroute(Windowsのtracertに相当)は、目的地まで経由するルーター1台1台の応答時間を順番に表示してくれます。

$ traceroute example.com
 1  192.168.1.1 (192.168.1.1)  1.2 ms
 2  10.0.0.1 (10.0.0.1)  5.4 ms
 3  * * *
 4  203.0.113.1 (203.0.113.1)  40.1 ms

途中の行が* * *(応答なし)になっている場合、必ずしもそこで通信が完全に途切れているとは限らず、単にそのルーターがtracerouteの問い合わせに応答しない設定になっているだけのこともあります。それでも「どのあたりから急に応答時間が悪化しているか」を見ることで、社内ネットワークの問題か、ISP(プロバイダ)側の問題か、相手サーバー側の問題かをおおまかに切り分ける手がかりになります。

MTUとパケットサイズにまつわるトラブル

ネットワーク機器には、一度に送信できるパケットの最大サイズを表すMTU(Maximum Transmission Unit)という設定値があります。経路上のどこかの機器のMTUが小さいと、大きなパケットが分割(フラグメンテーション)されたり、設定によっては黙って破棄されたりすることがあります。「小さなデータのやり取りは正常なのに、大きなファイルの転送だけが途中で止まる」という一見不可解な症状は、MTUの不一致が原因であることが少なくありません。実機ではping -M do -s サイズ 宛先のように、フラグメンテーションを禁止した状態で送信サイズを変えながら確認することで、経路上の実効MTUを調べられます。

確認クイズ

Q1. 現在のディストリビューションで、IPアドレスやルーティングを確認・設定する標準的なコマンドはどれですか?

解説: ip コマンドが、旧来のifconfigやrouteに代わる現在の標準ツールです(ip addr、ip routeなど)。

Q2. 相手のサーバーに到達できるかどうかをICMPパケットで確認するコマンドはどれですか?

解説: ping はICMPパケットを送って相手ホストに到達できるかを確認する基本的なコマンドです。

Q3. 待ち受け中(LISTEN)のポートとそれを使用しているプロセスを確認する現在の標準コマンドはどれですか?

解説: ss は旧来のnetstatに代わる、ソケットの状態を確認するコマンドです。ss -tulnpのようにオプションを組み合わせて使います。

Q4. ホスト名からIPアドレスを調べる名前解決の際に参照される、クライアント側の設定ファイルはどれですか?

解説: /etc/resolv.conf には、名前解決の際に問い合わせるDNSサーバーのアドレスが記述されています。