Network Configuration and Troubleshooting

Linux ネットワーク設定とトラブルシューティング 包括ガイド

目次

  1. はじめに
  2. ip コマンド体系
  3. NetworkManager (nmcli / nmtui)
  4. systemd-networkd
  5. /etc/network/interfaces (Debian系)
  6. ホスト名管理 (hostnamectl)
  7. DNS 設定
  8. ルーティングテーブル
  9. ネットワークボンディングとチーミング
  10. VLAN 設定
  11. トラブルシューティングツール
  12. ネットワークパフォーマンスチューニング
  13. ネットワーク管理ツール比較表
  14. トラブルシューティングフローチャート
  15. ベストプラクティス
  16. 参考資料

1. はじめに

Linux のネットワーク設定は、サーバー運用やインフラ管理の中核を担う技術領域である。物理サーバー、仮想マシン、コンテナ環境のいずれにおいても、IPアドレスの割り当て、ルーティング、DNS解決、インターフェース管理を正確に理解し運用できることが求められる。

本記事では、ip コマンド体系、NetworkManager、systemd-networkd、従来の /etc/network/interfaces による設定手法から、ボンディング/チーミング、VLAN設定、さらにはトラブルシューティングツールとパフォーマンスチューニングまでを体系的に解説する。


2. ip コマンド体系

ip コマンド(iproute2 パッケージ)は、従来の ifconfigroutearp を統合・置換する現代的なネットワーク管理ツールである。

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 コマンド説明
ifconfigip addrIPアドレス管理
ifconfig eth0 up/downip link set eth0 up/downインターフェース有効化/無効化
routeip routeルーティング管理
arpip neighARPキャッシュ管理
netstatssソケット情報表示
ifconfig -aip 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
ディレクティブ説明
nameserverDNSサーバーの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 を参照
dnsDNSリゾルバを使用
mymachinessystemd-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を一つの論理インターフェースに束ねる技術である。

ボンディングモード

モード名称説明スイッチ要件
0balance-rrラウンドロビンなし
1active-backupアクティブ/バックアップなし
2balance-xorXORハッシュ静的EtherChannel
3broadcastブロードキャストなし
4802.3adLACPLACP対応必須
5balance-tlb送信負荷分散なし
6balance-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 チーミング比較

項目BondingTeaming
カーネルモジュールbonding (カーネル内)team (カーネル) + teamd (ユーザ空間)
設定形式カーネルパラメータJSON
最大ポート数制限なし制限なし (実質)
LACP対応あり (mode=4)あり (lacp runner)
ハッシュポリシー限定的柔軟(カスタム可能)
D-Bus制御なしあり
監視方法MII / ARPethtool / 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. ネットワーク管理ツール比較表

特性NetworkManagersystemd-networkdifupdownNetplan
デフォルトの採用RHEL/Fedora/Desktop一部サーバー/コンテナDebian (旧)Ubuntu (新)
デーモンNetworkManagersystemd-networkdなしなし (バックエンド委譲)
CLI ツールnmclinetworkctlifup/ifdownnetplan
TUI ツールnmtuiなしなしなし
GUInm-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. ベストプラクティス

設定管理

  1. 設定の永続化: ip コマンドでの一時設定は検証後、必ず NetworkManager/systemd-networkd 等で永続化する
  2. 設定のバックアップ: ネットワーク設定変更前に必ず現在の設定をバックアップする
    $ sudo cp -a /etc/NetworkManager/system-connections/ /root/nm-backup-$(date +%Y%m%d)/
    
  3. 変更管理: 設定変更は Git 等で履歴管理する
  4. 段階的変更: 複数の設定を同時に変更せず、一つずつ変更して動作確認する

セキュリティ

  1. 不要なサービスの無効化: リッスンしているポートを定期的に確認し、不要なものを停止する
  2. ファイアウォールの活用: デフォルト拒否ポリシーで必要なポートのみ開放する
  3. DNS暗号化: DNS over TLS (DoT) または DNS over HTTPS (DoH) の導入を検討する
  4. IPv6: 使用しない場合はカーネルレベルで無効化する
    # /etc/sysctl.d/99-disable-ipv6.conf
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    

パフォーマンス

  1. MTU の最適化: ジャンボフレーム(9000バイト)の使用を検討する(対応環境のみ)
  2. TCP BBR: モダンな輻輳制御アルゴリズム BBR の採用を検討する
  3. リングバッファ: NIC のリングバッファサイズを最大値に設定する
  4. IRQ バランシング: irqbalance を有効にするか、手動で CPU アフィニティを設定する

監視

  1. ベースライン取得: 正常時のネットワーク統計を記録しておく
  2. 定期監視: Prometheus + node_exporter 等で継続的にメトリクスを収集する
  3. アラート設定: パケットロス率、レイテンシ、帯域使用率に閾値を設定する
  4. ログ確認: journalctl -u NetworkManagerjournalctl -u systemd-networkd で定期的にログを確認する

冗長化

  1. NIC ボンディング: 本番環境では必ず NIC の冗長化を行う
  2. デュアルスタック: IPv4/IPv6 のデュアルスタック構成を検討する
  3. 複数DNS: 最低2つ以上のDNSサーバーを設定する
  4. マルチパス: 複数の経路がある場合はポリシールーティングを活用する

16. 参考資料


更新日: 2026-04-10 対象: RHEL 9 / Ubuntu 22.04+ / Debian 12+ 環境 生成: AI による技術記事生成