Network Configuration and Troubleshooting
Linux ネットワーク設定とトラブルシューティング 包括ガイド
目次
- はじめに
- ip コマンド体系
- 2.1 ip addr - アドレス管理
- 2.2 ip route - ルーティング管理
- 2.3 ip link - リンク管理
- 2.4 ip neigh - 近隣キャッシュ管理
- NetworkManager (nmcli / nmtui)
- 3.1 nmcli コマンド
- 3.2 nmtui テキストUI
- 3.3 接続プロファイル管理
- systemd-networkd
- /etc/network/interfaces (Debian系)
- ホスト名管理 (hostnamectl)
- DNS 設定
- ルーティングテーブル
- ネットワークボンディングとチーミング
- 9.1 Linux Bonding
- 9.2 NetworkManager Teaming
- VLAN 設定
- トラブルシューティングツール
- 11.1 ping / ping6
- 11.2 traceroute / tracepath
- 11.3 mtr
- 11.4 ss / netstat
- 11.5 nmap
- 11.6 tcpdump
- 11.7 dig / nslookup
- ネットワークパフォーマンスチューニング
- ネットワーク管理ツール比較表
- トラブルシューティングフローチャート
- ベストプラクティス
- 参考資料
1. はじめに
Linux のネットワーク設定は、サーバー運用やインフラ管理の中核を担う技術領域である。物理サーバー、仮想マシン、コンテナ環境のいずれにおいても、IPアドレスの割り当て、ルーティング、DNS解決、インターフェース管理を正確に理解し運用できることが求められる。
本記事では、ip コマンド体系、NetworkManager、systemd-networkd、従来の /etc/network/interfaces による設定手法から、ボンディング/チーミング、VLAN設定、さらにはトラブルシューティングツールとパフォーマンスチューニングまでを体系的に解説する。
2. ip コマンド体系
ip コマンド(iproute2 パッケージ)は、従来の ifconfig、route、arp を統合・置換する現代的なネットワーク管理ツールである。
2.1 ip addr - アドレス管理
全インターフェースの情報表示
$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:ab:cd:ef brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 86350sec preferred_lft 86350sec
inet6 fe80::5054:ff:feab:cdef/64 scope link
valid_lft forever preferred_lft forever
特定インターフェースの表示
$ ip addr show dev eth0
IPアドレスの追加・削除
# アドレス追加
$ sudo ip addr add 192.168.1.200/24 dev eth0
# セカンダリアドレスの追加(ラベル付き)
$ sudo ip addr add 10.0.0.50/24 dev eth0 label eth0:1
# アドレス削除
$ sudo ip addr del 192.168.1.200/24 dev eth0
# インターフェースの全アドレスを削除
$ sudo ip addr flush dev eth0
注意:
ip addrで追加した設定は一時的であり、再起動後は消失する。永続化には NetworkManager や systemd-networkd の設定ファイルを使用する。
2.2 ip route - ルーティング管理
ルーティングテーブルの表示
$ ip route show
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
10.0.0.0/8 via 192.168.1.254 dev eth0
ルートの追加・削除
# デフォルトゲートウェイの追加
$ sudo ip route add default via 192.168.1.1 dev eth0
# スタティックルートの追加
$ sudo ip route add 10.10.0.0/16 via 192.168.1.254 dev eth0
# メトリック付きルート
$ sudo ip route add 172.16.0.0/12 via 192.168.1.254 dev eth0 metric 200
# ルートの削除
$ sudo ip route del 10.10.0.0/16
# 特定の宛先へのルート確認
$ 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
cache
2.3 ip link - リンク管理
# インターフェース一覧の表示
$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT
link/ether 52:54:00:ab:cd:ef brd ff:ff:ff:ff:ff:ff
# インターフェースの有効化 / 無効化
$ sudo ip link set eth0 up
$ sudo ip link set eth0 down
# MTU の変更
$ sudo ip link set eth0 mtu 9000
# MACアドレスの変更
$ sudo ip link set eth0 address 00:11:22:33:44:55
# VLANインターフェースの作成
$ sudo ip link add link eth0 name eth0.100 type vlan id 100
2.4 ip neigh - 近隣キャッシュ管理
ARPテーブル(IPv4)およびNDPテーブル(IPv6)の管理を行う。
# ARPキャッシュの表示
$ ip neigh show
192.168.1.1 dev eth0 lladdr 00:0c:29:xx:yy:zz REACHABLE
192.168.1.50 dev eth0 lladdr 52:54:00:11:22:33 STALE
# スタティックエントリの追加
$ sudo ip neigh add 192.168.1.200 lladdr 00:11:22:33:44:55 dev eth0
# エントリの削除
$ sudo ip neigh del 192.168.1.200 dev eth0
# キャッシュの全消去
$ sudo ip neigh flush all
ip コマンドと旧コマンドの対応表
| 旧コマンド | ip コマンド | 説明 |
|---|---|---|
ifconfig | ip addr | IPアドレス管理 |
ifconfig eth0 up/down | ip link set eth0 up/down | インターフェース有効化/無効化 |
route | ip route | ルーティング管理 |
arp | ip neigh | ARPキャッシュ管理 |
netstat | ss | ソケット情報表示 |
ifconfig -a | ip link show | 全インターフェース表示 |
3. NetworkManager (nmcli / nmtui)
NetworkManager は、最も広く使われている Linux ネットワーク管理デーモンである。デスクトップ環境だけでなく、RHEL/CentOS/Fedora 系のサーバーでもデフォルトで採用されている。
3.1 nmcli コマンド
デバイスと接続の確認
# デバイス一覧
$ nmcli device status
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected Wired connection 1
lo loopback unmanaged --
# 接続プロファイル一覧
$ nmcli connection show
NAME UUID TYPE DEVICE
Wired connection 1 a1b2c3d4-e5f6-7890-abcd-ef1234567890 ethernet eth0
# 接続の詳細表示
$ nmcli connection show "Wired connection 1"
接続の作成と設定
# 静的IPアドレスで新規接続を作成
$ sudo nmcli connection add \
con-name "static-eth0" \
type ethernet \
ifname eth0 \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8 8.8.4.4" \
ipv4.method manual
# DHCP 接続の作成
$ sudo nmcli connection add \
con-name "dhcp-eth0" \
type ethernet \
ifname eth0 \
ipv4.method auto
# 接続の変更
$ sudo nmcli connection modify "static-eth0" \
ipv4.dns-search "example.com" \
ipv4.never-default no
# 接続の有効化 / 無効化
$ sudo nmcli connection up "static-eth0"
$ sudo nmcli connection down "static-eth0"
# 接続の削除
$ sudo nmcli connection delete "static-eth0"
Wi-Fi 管理
# Wi-Fiの有効化
$ nmcli radio wifi on
# 利用可能なアクセスポイントの検索
$ nmcli device wifi list
# Wi-Fi接続
$ sudo nmcli device wifi connect "SSID名" password "パスワード"
3.2 nmtui テキストUI
nmtui はターミナルベースの対話的ネットワーク設定ツールである。
$ sudo nmtui
主なメニュー:
- Edit a connection - 接続プロファイルの編集
- Activate a connection - 接続の有効化/無効化
- Set system hostname - ホスト名の設定
GUI が使えないサーバー環境でも直感的に操作できるため便利である。
3.3 接続プロファイル管理
NetworkManager の接続プロファイルは以下に保存される。
# キーファイル形式 (新しいデフォルト)
/etc/NetworkManager/system-connections/*.nmconnection
# 旧ifcfg形式 (RHEL/CentOS 7 系)
/etc/sysconfig/network-scripts/ifcfg-*
キーファイル形式の例
# /etc/NetworkManager/system-connections/static-eth0.nmconnection
[connection]
id=static-eth0
type=ethernet
interface-name=eth0
autoconnect=true
[ipv4]
method=manual
addresses=192.168.1.100/24
gateway=192.168.1.1
dns=8.8.8.8;8.8.4.4;
dns-search=example.com;
[ipv6]
method=auto
設定の再読込
$ sudo nmcli connection reload
$ sudo nmcli connection up "static-eth0"
4. systemd-networkd
systemd-networkd は systemd に統合されたネットワーク管理デーモンであり、サーバーやコンテナ環境で採用されることが増えている。設定ファイルは宣言的で冪等性が高い。
設定ファイルの配置
/etc/systemd/network/ # システム設定(ユーザ定義)
/run/systemd/network/ # ランタイム設定
/lib/systemd/network/ # パッケージ提供のデフォルト設定
ファイル名はソート順で処理される(例: 10-eth0.network)。
.network ファイル - アドレスとルーティング
# /etc/systemd/network/10-eth0.network
[Match]
Name=eth0
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4
Domains=example.com
DHCP=no
NTP=ntp.example.com
[Route]
Destination=10.0.0.0/8
Gateway=192.168.1.254
Metric=200
.netdev ファイル - 仮想デバイス定義
# /etc/systemd/network/05-bond0.netdev
[NetDev]
Name=bond0
Kind=bond
[Bond]
Mode=802.3ad
MIIMonitorSec=100ms
LACPTransmitRate=fast
.link ファイル - リンク設定
# /etc/systemd/network/10-eth0.link
[Match]
MACAddress=52:54:00:ab:cd:ef
[Link]
Name=eth0
MTUBytes=9000
WakeOnLan=magic
DHCP 設定
# /etc/systemd/network/20-dhcp.network
[Match]
Name=eth0
[Network]
DHCP=yes
[DHCPv4]
UseDNS=yes
UseNTP=yes
UseDomains=yes
RouteMetric=100
サービスの有効化
$ sudo systemctl enable --now systemd-networkd
$ sudo systemctl enable --now systemd-resolved
# 状態確認
$ networkctl status
$ networkctl list
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 eth0 ether routable configured
5. /etc/network/interfaces (Debian系)
Debian/Ubuntu の従来のネットワーク設定方式である。ifupdown パッケージが提供する。
静的IP設定
# /etc/network/interfaces
auto lo
iface lo inet loopback
# 静的IP設定
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
dns-search example.com
mtu 1500
# DHCP設定
auto eth1
iface eth1 inet dhcp
VLAN設定
auto eth0.100
iface eth0.100 inet static
address 10.100.0.10
netmask 255.255.255.0
vlan-raw-device eth0
インターフェースの操作
$ sudo ifup eth0
$ sudo ifdown eth0
$ sudo ifup -a # 全インターフェースを起動
$ sudo systemctl restart networking
注意: Ubuntu 18.04 以降は Netplan が推奨されており、
/etc/netplan/*.yamlで設定を行い、バックエンドとして NetworkManager または systemd-networkd を使用する。
Netplan 設定例
# /etc/netplan/01-config.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
search:
- example.com
$ sudo netplan apply
$ sudo netplan try # 120秒後に自動ロールバック
6. ホスト名管理 (hostnamectl)
ホスト名の種類
| 種類 | 説明 | 用途 |
|---|---|---|
| Static | 永続的ホスト名 | /etc/hostname に保存 |
| Transient | 一時的ホスト名 | カーネルが管理、DHCPで変更可能 |
| Pretty | 自由形式の表示名 | UTF-8文字使用可能 |
hostnamectl の使用
# 現在のホスト名情報の表示
$ hostnamectl
Static hostname: webserver01.example.com
Icon name: computer-vm
Chassis: vm
Machine ID: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4
Boot ID: 12345678-1234-1234-1234-123456789abc
Virtualization: kvm
Operating System: Ubuntu 22.04.3 LTS
Kernel: Linux 5.15.0-91-generic
Architecture: x86-64
# ホスト名の設定
$ sudo hostnamectl set-hostname webserver01.example.com
# Pretty ホスト名の設定
$ sudo hostnamectl set-hostname "Web Server 01" --pretty
# 一時ホスト名の設定
$ sudo hostnamectl set-hostname temp-name --transient
関連ファイル
# /etc/hostname - 静的ホスト名
webserver01.example.com
# /etc/hosts - ローカル名前解決
127.0.0.1 localhost
127.0.1.1 webserver01.example.com webserver01
192.168.1.100 webserver01.example.com webserver01
7. DNS 設定
7.1 /etc/resolv.conf
従来のDNSリゾルバ設定ファイルである。
# /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 2001:4860:4860::8888
search example.com internal.example.com
domain example.com
options timeout:2 attempts:3 rotate
| ディレクティブ | 説明 |
|---|---|
nameserver | DNSサーバーのIP(最大3つ) |
search | ドメイン検索リスト(最大6つ、合計256文字) |
domain | デフォルトドメイン |
options | リゾルバオプション |
7.2 systemd-resolved
systemd-resolved は、ローカルDNSスタブリゾルバおよびキャッシュ機能を提供する。
# 状態確認
$ resolvectl status
Global
Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Link 2 (eth0)
Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 8.8.8.8
DNS Servers: 8.8.8.8 8.8.4.4
DNS Domain: example.com
# DNS統計の表示
$ resolvectl statistics
# DNSキャッシュのフラッシュ
$ sudo resolvectl flush-caches
# 特定ドメインの名前解決テスト
$ resolvectl query www.example.com
設定ファイル
# /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8 8.8.4.4
FallbackDNS=1.1.1.1 9.9.9.9
Domains=example.com
DNSSEC=allow-downgrade
DNSOverTLS=opportunistic
Cache=yes
DNSStubListener=yes
resolv.conf のシンボリックリンク
# systemd-resolved のスタブリゾルバを使用
$ sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
# systemd-resolved が設定した実際のDNSサーバーを直接使用
$ sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
7.3 /etc/hosts と /etc/nsswitch.conf
# /etc/nsswitch.conf - 名前解決の優先順位
hosts: files dns mymachines myhostname
| ソース | 説明 |
|---|---|
files | /etc/hosts を参照 |
dns | DNSリゾルバを使用 |
mymachines | systemd-machined のコンテナ名 |
myhostname | ローカルホスト名 |
8. ルーティングテーブル
ポリシールーティング
Linux は複数のルーティングテーブルを持ち、ルールベースで使い分けることができる。
# ルーティングルールの表示
$ ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
# カスタムルーティングテーブルの定義
$ echo "200 custom" | sudo tee -a /etc/iproute2/rt_tables
# カスタムテーブルにルートを追加
$ sudo ip route add default via 10.0.0.1 table custom
$ sudo ip route add 10.0.0.0/24 dev eth1 table custom
# ルールの追加(送信元ベース)
$ sudo ip rule add from 10.0.0.0/24 table custom priority 100
# ルールの追加(送信先ベース)
$ sudo ip rule add to 172.16.0.0/12 table custom priority 200
# マーキングベースのルール
$ sudo ip rule add fwmark 1 table custom priority 300
# カスタムテーブルの確認
$ ip route show table custom
IPフォワーディングの有効化
# 一時的な有効化
$ sudo sysctl -w net.ipv4.ip_forward=1
$ sudo sysctl -w net.ipv6.conf.all.forwarding=1
# 永続設定
$ echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/90-ip-forward.conf
$ echo "net.ipv6.conf.all.forwarding = 1" | sudo tee -a /etc/sysctl.d/90-ip-forward.conf
$ sudo sysctl -p /etc/sysctl.d/90-ip-forward.conf
9. ネットワークボンディングとチーミング
9.1 Linux Bonding
ボンディング(Linux kernel bonding driver)は、複数の物理NICを一つの論理インターフェースに束ねる技術である。
ボンディングモード
| モード | 名称 | 説明 | スイッチ要件 |
|---|---|---|---|
| 0 | balance-rr | ラウンドロビン | なし |
| 1 | active-backup | アクティブ/バックアップ | なし |
| 2 | balance-xor | XORハッシュ | 静的EtherChannel |
| 3 | broadcast | ブロードキャスト | なし |
| 4 | 802.3ad | LACP | LACP対応必須 |
| 5 | balance-tlb | 送信負荷分散 | なし |
| 6 | balance-alb | 適応型負荷分散 | なし |
nmcli によるボンディング設定
# ボンドマスターの作成(LACP)
$ sudo nmcli connection add \
con-name bond0 \
type bond \
ifname bond0 \
bond.options "mode=802.3ad,miimon=100,lacp_rate=fast,xmit_hash_policy=layer3+4"
# スレーブインターフェースの追加
$ sudo nmcli connection add \
con-name bond0-slave1 \
type ethernet \
ifname eth0 \
master bond0
$ sudo nmcli connection add \
con-name bond0-slave2 \
type ethernet \
ifname eth1 \
master bond0
# IPアドレスの設定
$ sudo nmcli connection modify bond0 \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.method manual
# ボンドの有効化
$ sudo nmcli connection up bond0
ボンディング状態の確認
$ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v5.15.0
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
MII Status: up
MII Polling Interval (ms): 100
LACP rate: fast
Slave Interface: eth0
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Slave Interface: eth1
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
9.2 NetworkManager Teaming
チーミングは、teamd デーモンを使用するより新しいリンクアグリゲーション方式である。JSON ベースの柔軟な設定が特徴。
# チームマスターの作成
$ sudo nmcli connection add \
con-name team0 \
type team \
ifname team0 \
team.config '{"runner": {"name": "lacp", "active": true, "fast_rate": true, "tx_hash": ["eth", "ipv4", "ipv6"]}}'
# スレーブの追加
$ sudo nmcli connection add \
con-name team0-port1 \
type ethernet \
ifname eth0 \
master team0
$ sudo nmcli connection add \
con-name team0-port2 \
type ethernet \
ifname eth1 \
master team0
# チームの状態確認
$ teamdctl team0 state
ボンディング vs チーミング比較
| 項目 | Bonding | Teaming |
|---|---|---|
| カーネルモジュール | bonding (カーネル内) | team (カーネル) + teamd (ユーザ空間) |
| 設定形式 | カーネルパラメータ | JSON |
| 最大ポート数 | 制限なし | 制限なし (実質) |
| LACP対応 | あり (mode=4) | あり (lacp runner) |
| ハッシュポリシー | 限定的 | 柔軟(カスタム可能) |
| D-Bus制御 | なし | あり |
| 監視方法 | MII / ARP | ethtool / ARP / nsna_ping |
| 推奨用途 | 幅広い互換性 | 高度なカスタマイズ |
10. VLAN 設定
nmcli による VLAN 設定
# VLAN インターフェースの作成
$ sudo nmcli connection add \
con-name vlan100 \
type vlan \
ifname eth0.100 \
dev eth0 \
id 100 \
ipv4.addresses 10.100.0.10/24 \
ipv4.method manual
# VLAN の確認
$ nmcli connection show vlan100
systemd-networkd による VLAN 設定
# /etc/systemd/network/10-eth0.network
[Match]
Name=eth0
[Network]
VLAN=eth0.100
VLAN=eth0.200
# /etc/systemd/network/20-vlan100.netdev
[NetDev]
Name=eth0.100
Kind=vlan
[VLAN]
Id=100
# /etc/systemd/network/20-vlan100.network
[Match]
Name=eth0.100
[Network]
Address=10.100.0.10/24
Gateway=10.100.0.1
ip コマンドによる VLAN 設定
# VLANの作成
$ sudo ip link add link eth0 name eth0.100 type vlan id 100
$ sudo ip addr add 10.100.0.10/24 dev eth0.100
$ sudo ip link set eth0.100 up
# VLANの確認
$ cat /proc/net/vlan/config
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.100 | 100 | eth0
# VLANの削除
$ sudo ip link delete eth0.100
11. トラブルシューティングツール
11.1 ping / ping6
基本的な到達性テストツール。ICMPエコー要求/応答を使用する。
# 基本的な ping
$ ping -c 4 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.523 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.418 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.456 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.431 ms
--- 192.168.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 0.418/0.457/0.523/0.040 ms
# 特定インターフェースを使用
$ ping -I eth0 -c 4 8.8.8.8
# パケットサイズ指定(MTU テスト: DF ビットを設定)
$ ping -M do -s 1472 -c 1 192.168.1.1
# IPv6 ping
$ ping6 -c 4 fe80::1%eth0
# フラッド ping(root 権限必要)
$ sudo ping -f -c 1000 192.168.1.1
11.2 traceroute / tracepath
パケットが宛先に到達するまでの経路を表示する。
# traceroute(UDP / ICMP / TCP)
$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 gateway (192.168.1.1) 0.512 ms 0.398 ms 0.362 ms
2 10.0.0.1 (10.0.0.1) 1.234 ms 1.198 ms 1.167 ms
3 isp-router.example.net (203.0.113.1) 5.678 ms 5.612 ms 5.589 ms
4 dns.google (8.8.8.8) 10.234 ms 10.198 ms 10.167 ms
# TCP を使用(ファイアウォール回避)
$ sudo traceroute -T -p 443 8.8.8.8
# tracepath(root不要、PMTU検出対応)
$ tracepath 8.8.8.8
1?: [LOCALHOST] pmtu 1500
1: gateway 0.512ms
2: 10.0.0.1 1.234ms
3: dns.google 10.234ms reached
Resume: pmtu 1500 hops 3 back 3
11.3 mtr
ping と traceroute を統合したリアルタイムネットワーク診断ツール。
# リアルタイム表示
$ mtr 8.8.8.8
# レポートモード(非対話型)
$ mtr -r -c 100 8.8.8.8
Start: 2026-04-10T09:00:00+0900
HOST: webserver01 Loss% Snt Last Avg Best Wrst StDev
1.|-- gateway 0.0% 100 0.5 0.5 0.3 1.2 0.1
2.|-- 10.0.0.1 0.0% 100 1.2 1.3 0.9 3.4 0.3
3.|-- isp-router 0.0% 100 5.6 5.8 5.1 8.9 0.5
4.|-- dns.google 0.0% 100 10.2 10.4 9.8 15.6 0.8
# TCP モード(特定ポート)
$ sudo mtr -T -P 443 -r -c 50 8.8.8.8
# JSON 出力
$ mtr -j -c 10 8.8.8.8
11.4 ss / netstat
ss(Socket Statistics)- 推奨
# リッスン中のTCPソケット
$ ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=5678,fd=6))
LISTEN 0 128 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=5678,fd=7))
# 確立済みの接続
$ ss -tnp state established
Recv-Q Send-Q Local Address:Port Peer Address:Port Process
0 0 192.168.1.100:22 192.168.1.50:54321 users:(("sshd",pid=2345,fd=4))
# ソケットのメモリ使用量表示
$ ss -tm
# ソケットの統計情報
$ ss -s
Total: 185
TCP: 12 (estab 3, closed 2, orphaned 0, timewait 1)
Transport Total IP IPv6
RAW 0 0 0
UDP 5 3 2
TCP 10 6 4
INET 15 9 6
FRAG 0 0 0
# 特定ポートのフィルタリング
$ ss -tlnp sport = :80 or sport = :443
# タイマー情報の表示
$ ss -to state established
netstat(レガシー)
# リッスン中のソケット
$ netstat -tlnp
# 全接続
$ netstat -anp
# ルーティングテーブル
$ netstat -rn
# インターフェース統計
$ netstat -i
11.5 nmap
ネットワークスキャンおよびセキュリティ監査ツール。
# 基本的なポートスキャン
$ nmap 192.168.1.1
Starting Nmap 7.93 ( https://nmap.org ) at 2026-04-10 09:00 JST
Nmap scan report for 192.168.1.1
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
# サービスバージョン検出
$ nmap -sV 192.168.1.1
# OS検出
$ sudo nmap -O 192.168.1.1
# サブネット全体のスキャン(ping sweep)
$ nmap -sn 192.168.1.0/24
# 特定ポート範囲のスキャン
$ nmap -p 1-1000 192.168.1.1
# UDPスキャン
$ sudo nmap -sU -p 53,67,68,123,161 192.168.1.1
# 高速スキャン(上位100ポート)
$ nmap -F 192.168.1.0/24
# スクリプトスキャン
$ nmap --script=vuln 192.168.1.1
注意: nmap の使用は自身が管理するネットワークでのみ行うこと。許可なく他者のネットワークをスキャンすることは不正アクセスに該当する可能性がある。
11.6 tcpdump
パケットキャプチャおよび解析ツール。
# 特定インターフェースでキャプチャ
$ sudo tcpdump -i eth0
# 特定ホストのトラフィック
$ sudo tcpdump -i eth0 host 192.168.1.50
# 特定ポートのトラフィック
$ sudo tcpdump -i eth0 port 80
# 複合フィルタ
$ sudo tcpdump -i eth0 'host 192.168.1.50 and (port 80 or port 443)'
# DNS クエリのキャプチャ
$ sudo tcpdump -i eth0 port 53 -vv
# TCPフラグのフィルタ(SYN パケットのみ)
$ sudo tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0'
# pcap ファイルへの保存
$ sudo tcpdump -i eth0 -w /tmp/capture.pcap -c 1000
# pcap ファイルの読み込み
$ tcpdump -r /tmp/capture.pcap
# ASCII / HEX 表示
$ sudo tcpdump -i eth0 -A port 80
$ sudo tcpdump -i eth0 -XX port 80
# パケットサイズ制限なしでキャプチャ
$ sudo tcpdump -i eth0 -s 0 -w /tmp/full_capture.pcap
11.7 dig / nslookup
DNS の名前解決テストツール。
dig
# 基本的なDNS問い合わせ
$ dig www.example.com
;; ANSWER SECTION:
www.example.com. 300 IN A 93.184.216.34
;; Query time: 12 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; MSG SIZE rcvd: 58
# 特定のレコードタイプ
$ dig www.example.com AAAA # IPv6
$ dig example.com MX # メール
$ dig example.com NS # ネームサーバー
$ dig example.com TXT # テキストレコード
$ dig example.com SOA # SOAレコード
# 特定のDNSサーバーに問い合わせ
$ dig @1.1.1.1 www.example.com
# 逆引き
$ dig -x 93.184.216.34
# トレース(再帰解決の過程を表示)
$ dig +trace www.example.com
# 簡潔出力
$ dig +short www.example.com
93.184.216.34
# DNSSEC 検証
$ dig +dnssec example.com
# 全レコード
$ dig example.com ANY
nslookup
# 基本的な名前解決
$ nslookup www.example.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: www.example.com
Address: 93.184.216.34
# 特定のDNSサーバーを使用
$ nslookup www.example.com 1.1.1.1
# レコードタイプの指定
$ nslookup -type=MX example.com
12. ネットワークパフォーマンスチューニング
カーネルパラメータの調整
# /etc/sysctl.d/99-network-tuning.conf
# --- TCP バッファサイズ ---
# デフォルト受信バッファ(バイト)
net.core.rmem_default = 262144
# 最大受信バッファ
net.core.rmem_max = 16777216
# デフォルト送信バッファ
net.core.wmem_default = 262144
# 最大送信バッファ
net.core.wmem_max = 16777216
# TCP バッファ自動調整(min, default, max)
net.ipv4.tcp_rmem = 4096 262144 16777216
net.ipv4.tcp_wmem = 4096 262144 16777216
# --- TCP 接続管理 ---
# TCP キープアライブ
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 5
# TIME_WAIT ソケットの再利用
net.ipv4.tcp_tw_reuse = 1
# SYN バックログ
net.ipv4.tcp_max_syn_backlog = 65536
net.core.somaxconn = 65536
# --- ネットワークキュー ---
# ネットワークデバイスのバックログ
net.core.netdev_max_backlog = 65536
# --- 接続追跡 ---
net.netfilter.nf_conntrack_max = 1048576
# --- BBR 輻輳制御 ---
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
# 適用
$ sudo sysctl -p /etc/sysctl.d/99-network-tuning.conf
# 現在値の確認
$ sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = bbr
NIC の最適化
# リングバッファの確認と調整
$ ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX: 4096
TX: 4096
Current hardware settings:
RX: 256
TX: 256
$ sudo ethtool -G eth0 rx 4096 tx 4096
# オフロード機能の確認
$ ethtool -k eth0
tcp-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
# GRO の有効化
$ sudo ethtool -K eth0 gro on
# 割り込み合体(Interrupt Coalescing)
$ sudo ethtool -C eth0 rx-usecs 100 tx-usecs 100
# NIC の速度とデュプレックスの確認
$ ethtool eth0
Settings for eth0:
Speed: 10000Mb/s
Duplex: Full
Auto-negotiation: on
Link detected: yes
IRQ アフィニティ
# 割り込みの分布確認
$ cat /proc/interrupts | grep eth0
# CPU アフィニティの設定
$ echo 2 | sudo tee /proc/irq/XX/smp_affinity
# irqbalance サービスの使用(自動分散)
$ sudo systemctl enable --now irqbalance
ネットワーク帯域テスト
# iperf3 によるスループットテスト
# サーバー側
$ iperf3 -s
# クライアント側
$ iperf3 -c 192.168.1.100 -t 30 -P 4
[ ID] Interval Transfer Bitrate
[ 5] 0.00-30.00 sec 3.27 GBytes 937 Mbits/sec
[ 7] 0.00-30.00 sec 3.25 GBytes 932 Mbits/sec
[ 9] 0.00-30.00 sec 3.26 GBytes 934 Mbits/sec
[ 11] 0.00-30.00 sec 3.24 GBytes 930 Mbits/sec
[SUM] 0.00-30.00 sec 13.0 GBytes 3.73 Gbits/sec
13. ネットワーク管理ツール比較表
| 特性 | NetworkManager | systemd-networkd | ifupdown | Netplan |
|---|---|---|---|---|
| デフォルトの採用 | RHEL/Fedora/Desktop | 一部サーバー/コンテナ | Debian (旧) | Ubuntu (新) |
| デーモン | NetworkManager | systemd-networkd | なし | なし (バックエンド委譲) |
| CLI ツール | nmcli | networkctl | ifup/ifdown | netplan |
| TUI ツール | nmtui | なし | なし | なし |
| GUI | nm-applet等 | なし | なし | なし |
| 設定形式 | INI (keyfile) | INI (.network等) | 独自構文 | YAML |
| Wi-Fi対応 | 完全 | wpa_supplicant 併用 | wpa_supplicant 併用 | バックエンド依存 |
| VPN対応 | プラグイン | なし | なし | バックエンド依存 |
| VLAN | 対応 | 対応 | 対応 | 対応 |
| ボンディング | 対応 | 対応 | 対応 | 対応 |
| D-Bus API | あり | あり | なし | なし |
| コンテナ向け | 不向き | 最適 | 可能 | 可能 |
| 設定の複雑さ | 中 | 低 | 低 | 低 |
14. トラブルシューティングフローチャート
ネットワーク障害を段階的に切り分けるための手順を以下に示す。
ステップ1: 物理層 / リンク層の確認
# インターフェースの状態確認
$ ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
# UP かつ LOWER_UP であることを確認
# リンク速度と接続状態
$ ethtool eth0 | grep -E 'Speed|Duplex|Link'
# エラーカウンタの確認
$ ip -s link show eth0
# RX/TX の errors, dropped, overruns を確認
# ドライバ情報
$ ethtool -i eth0
ステップ2: IPアドレスの確認
# アドレスの確認
$ ip addr show eth0
# DHCP の更新
$ sudo dhclient -r eth0 && sudo dhclient eth0
# NetworkManager での更新
$ sudo nmcli connection down eth0 && sudo nmcli connection up eth0
ステップ3: ローカルネットワークの確認
# デフォルトゲートウェイへの ping
$ ping -c 4 $(ip route | awk '/default/ {print $3}')
# ARP テーブルの確認
$ ip neigh show
# 同一セグメントの他ホスト
$ ping -c 2 192.168.1.x
ステップ4: ルーティングの確認
# ルーティングテーブル
$ ip route show
# 特定宛先への経路確認
$ ip route get 8.8.8.8
# traceroute で経路追跡
$ traceroute -n 8.8.8.8
ステップ5: DNS の確認
# DNS サーバーへの到達性
$ ping -c 2 8.8.8.8
# 名前解決テスト
$ dig www.example.com
$ nslookup www.example.com
# resolv.conf の確認
$ cat /etc/resolv.conf
# systemd-resolved の状態
$ resolvectl status
ステップ6: ファイアウォール / サービスの確認
# iptables ルールの確認
$ sudo iptables -L -n -v
$ sudo nft list ruleset
# firewalld の状態
$ sudo firewall-cmd --list-all
# 特定ポートのリッスン確認
$ ss -tlnp | grep :80
# SELinux のポート許可
$ sudo semanage port -l | grep http
ステップ7: パケットキャプチャ
# 対象トラフィックのキャプチャ
$ sudo tcpdump -i eth0 -nn host 192.168.1.50 and port 80
# SYN パケットの到着確認
$ sudo tcpdump -i eth0 'tcp[tcpflags] == tcp-syn'
15. ベストプラクティス
設定管理
- 設定の永続化:
ipコマンドでの一時設定は検証後、必ず NetworkManager/systemd-networkd 等で永続化する - 設定のバックアップ: ネットワーク設定変更前に必ず現在の設定をバックアップする
$ sudo cp -a /etc/NetworkManager/system-connections/ /root/nm-backup-$(date +%Y%m%d)/ - 変更管理: 設定変更は Git 等で履歴管理する
- 段階的変更: 複数の設定を同時に変更せず、一つずつ変更して動作確認する
セキュリティ
- 不要なサービスの無効化: リッスンしているポートを定期的に確認し、不要なものを停止する
- ファイアウォールの活用: デフォルト拒否ポリシーで必要なポートのみ開放する
- DNS暗号化: DNS over TLS (DoT) または DNS over HTTPS (DoH) の導入を検討する
- IPv6: 使用しない場合はカーネルレベルで無効化する
# /etc/sysctl.d/99-disable-ipv6.conf net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
パフォーマンス
- MTU の最適化: ジャンボフレーム(9000バイト)の使用を検討する(対応環境のみ)
- TCP BBR: モダンな輻輳制御アルゴリズム BBR の採用を検討する
- リングバッファ: NIC のリングバッファサイズを最大値に設定する
- IRQ バランシング:
irqbalanceを有効にするか、手動で CPU アフィニティを設定する
監視
- ベースライン取得: 正常時のネットワーク統計を記録しておく
- 定期監視: Prometheus + node_exporter 等で継続的にメトリクスを収集する
- アラート設定: パケットロス率、レイテンシ、帯域使用率に閾値を設定する
- ログ確認:
journalctl -u NetworkManagerやjournalctl -u systemd-networkdで定期的にログを確認する
冗長化
- NIC ボンディング: 本番環境では必ず NIC の冗長化を行う
- デュアルスタック: IPv4/IPv6 のデュアルスタック構成を検討する
- 複数DNS: 最低2つ以上のDNSサーバーを設定する
- マルチパス: 複数の経路がある場合はポリシールーティングを活用する
16. 参考資料
- iproute2 公式ドキュメント
- NetworkManager Reference Manual
- systemd-networkd マニュアル
- Red Hat - ネットワーク設定ガイド
- Debian Wiki - Network Configuration
- Netplan リファレンス
- Linux カーネルドキュメント - Bonding
- nmap 公式ドキュメント
- tcpdump マニュアル
- Linux Performance (Brendan Gregg)
更新日: 2026-04-10 対象: RHEL 9 / Ubuntu 22.04+ / Debian 12+ 環境 生成: AI による技術記事生成