「GUIが使えないサーバーで、どうやってネットワークを設定すればいいの?」
リモートサーバーやヘッドレス環境では、コマンドラインでのネットワーク設定が必須です。でも、慣れないうちは「コマンドが覚えられない」「設定ミスで接続が切れたらどうしよう」と不安になりますよね。
実は、CUIでのネットワーク設定には大きなメリットがあります。スクリプト化できる、リモートから設定できる、GUIより細かい制御ができる、そして何より、一度覚えれば圧倒的に速いんです。
この記事では、Ubuntuのネットワーク設定をコマンドラインで完全にマスターする方法を、初心者から上級者まで分かりやすく解説します。
CUIでネットワーク設定をするメリット
なぜコマンドラインを使うのか
GUI(グラフィカル画面)があるのに、わざわざCUIを使う理由を理解しましょう。
CUIのメリット
- サーバー環境で必須
- デスクトップ環境がないサーバーでも設定可能
- リモート接続(SSH)で遠隔設定できる
- 自動化・スクリプト化
- 設定をスクリプトにして再利用
- 複数サーバーに同じ設定を一括適用
- 設定変更の履歴管理が容易
- 正確で詳細な制御
- GUIでは見えない詳細設定にアクセス
- トラブルシューティングが的確にできる
- 設定内容を正確に把握できる
- 軽量で高速
- メモリ消費が少ない
- 設定変更が瞬時に反映
- リモート接続でも軽快に動作
- トラブル時の対応力
- GUIが起動しない時でも設定変更可能
- ログやエラーメッセージを直接確認
- ネットワークの深い理解が身につく
GUIとの使い分け
- 初回セットアップ → GUI(視覚的で分かりやすい)
- 日常的な設定変更 → CUI(速くて正確)
- サーバー管理 → CUI(必須)
- 複雑なトラブル対応 → CUI(詳細な診断が可能)
両方使いこなせると、柔軟に対応できますよ。
CUIツールの種類と特徴
Ubuntuには複数のネットワーク設定ツールがあります。
nmcli(NetworkManager CLI)
- NetworkManagerのコマンドライン版
- デスクトップ環境との親和性が高い
- Wi-Fi管理が得意
- 使いやすく初心者向け
ip コマンド(iproute2)
- 低レベルなネットワーク制御
- 一時的な設定変更に適している
- 再起動すると設定が消える
- 上級者向け
Netplan
- Ubuntu 17.10以降の標準
- YAMLファイルで設定を記述
- systemd-networkdやNetworkManagerのフロントエンド
- サーバー環境で人気
systemd-networkd
- systemdに統合されたネットワーク管理
- 軽量で高速
- サーバー向け
- 設定ファイルはINI形式
ifconfig/route(非推奨)
- 古いツール(net-toolsパッケージ)
- 現在は非推奨だがレガシー環境では使用
- ipコマンドに移行すべき
この記事では、主にnmcli、ip、Netplanを中心に解説していきますね。
nmcliコマンドの完全マスター
nmcliの基本構文
nmcliは「NetworkManager Command Line Interface」の略です。
基本的な構文
nmcli [OPTIONS] OBJECT { COMMAND | help }
主なOBJECT(操作対象)
general
– NetworkManager全般の情報networking
– ネットワークの有効/無効radio
– Wi-Fi/WWANの有効/無効connection
– 接続プロファイルの管理device
– ネットワークデバイスの管理agent
– シークレットエージェント(パスワード管理)monitor
– 変更の監視
便利なOPTIONS
-t, --terse # 機械可読な出力(スクリプト向け)
-p, --pretty # 人間が読みやすい出力
-m, --mode # 出力形式(tabular, multiline)
-c, --colors # カラー出力の有効/無効
-f, --fields # 表示するフィールドを指定
デバイスとコネクションの違い
nmcliを理解する上で重要な概念です。
デバイス(Device)
物理的または仮想的なネットワークインターフェース
nmcli device status
出力例:
DEVICE TYPE STATE CONNECTION
enp3s0 ethernet connected 有線接続 1
wlan0 wifi disconnected --
lo loopback unmanaged --
- enp3s0 = 有線LANカード
- wlan0 = 無線LANカード
- lo = ローカルループバック
コネクション(Connection)
設定プロファイル(接続設定の集合)
nmcli connection show
出力例:
NAME UUID TYPE DEVICE
有線接続 1 a1b2c3d4-e5f6-7890-abcd-ef1234567890 ethernet enp3s0
WiFi-Home b2c3d4e5-f6a7-8901-bcde-f12345678901 wifi --
関係性
- 1つのデバイスに複数のコネクションを作成可能
- コネクションをデバイスに適用(アクティブ化)して接続
- 同じ設定を別のデバイスにも適用できる
例:自宅Wi-Fiと会社Wi-Fi、2つのコネクションを作っておいて、場所に応じて切り替える
接続情報の確認コマンド
現在の状態を詳しく確認する方法です。
全体的な状態確認
nmcli general status
出力:
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
connected full enabled enabled enabled enabled
デバイスの詳細情報
nmcli device show enp3s0
または特定の情報だけ表示:
nmcli -f IP4.ADDRESS,IP4.GATEWAY,IP4.DNS device show enp3s0
アクティブな接続の確認
nmcli connection show --active
特定の接続の詳細
nmcli connection show "有線接続 1"
すべての設定項目が表示されます。
Wi-Fi一覧の表示
nmcli device wifi list
または詳細情報付き:
nmcli -f SSID,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,SECURITY device wifi list
有線LAN接続の設定
nmcliで有線LANを設定する実践的な方法です。
DHCP接続の作成
sudo nmcli connection add \
type ethernet \
con-name "有線DHCP" \
ifname enp3s0
これだけで、DHCPで自動設定される接続が作成されます。
固定IP接続の作成
sudo nmcli connection add \
type ethernet \
con-name "有線固定IP" \
ifname enp3s0 \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8 8.8.4.4"
パラメータの説明
type ethernet
– イーサネット接続con-name
– 接続の名前(任意)ifname
– デバイス名ipv4.method manual
– 手動設定ipv4.addresses
– IPアドレス/サブネットマスクipv4.gateway
– デフォルトゲートウェイipv4.dns
– DNSサーバー(カンマ区切り)
既存接続の変更
# IPアドレスを変更
sudo nmcli connection modify "有線固定IP" \
ipv4.addresses 192.168.1.150/24
# DNSサーバーを追加
sudo nmcli connection modify "有線固定IP" \
+ipv4.dns 1.1.1.1
# DNSサーバーを削除
sudo nmcli connection modify "有線固定IP" \
-ipv4.dns 8.8.4.4
# ゲートウェイを変更
sudo nmcli connection modify "有線固定IP" \
ipv4.gateway 192.168.1.254
複数のIPアドレスを設定
sudo nmcli connection modify "有線固定IP" \
ipv4.addresses "192.168.1.100/24,192.168.1.101/24"
または追加:
sudo nmcli connection modify "有線固定IP" \
+ipv4.addresses 192.168.1.102/24
設定を適用
変更後は必ず接続を再起動:
sudo nmcli connection down "有線固定IP"
sudo nmcli connection up "有線固定IP"
または一発で:
sudo nmcli connection reload
sudo nmcli connection up "有線固定IP"
Wi-Fi接続の設定
無線LANもnmcliで完全に管理できます。
Wi-Fiのスキャンと接続
# スキャン
nmcli device wifi rescan
# 一覧表示
nmcli device wifi list
# 接続(最も簡単な方法)
sudo nmcli device wifi connect "SSID名" password "パスワード"
一発で接続設定が作成され、接続されます。
Wi-Fi接続の詳細設定
sudo nmcli connection add \
type wifi \
con-name "WiFi-Home" \
ifname wlan0 \
ssid "YourSSID" \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "YourPassword" \
ipv4.method auto
セキュリティタイプの指定
wifi-sec.key-mgmt wpa-psk
– WPA/WPA2 Personalwifi-sec.key-mgmt wpa-eap
– WPA/WPA2 Enterprisewifi-sec.key-mgmt none
– オープンネットワーク
WPA3対応の設定
sudo nmcli connection add \
type wifi \
con-name "WiFi-WPA3" \
ifname wlan0 \
ssid "YourSSID" \
wifi-sec.key-mgmt sae \
wifi-sec.psk "YourPassword"
非表示SSID(ステルスモード)への接続
sudo nmcli connection add \
type wifi \
con-name "Hidden-WiFi" \
ifname wlan0 \
ssid "HiddenSSID" \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "password" \
802-11-wireless.hidden yes
Wi-Fiを固定IPで接続
sudo nmcli connection modify "WiFi-Home" \
ipv4.method manual \
ipv4.addresses 192.168.1.101/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8,8.8.4.4"
sudo nmcli connection up "WiFi-Home"
特定のBSSID(アクセスポイント)を指定
同じSSIDで複数のアクセスポイントがある場合:
sudo nmcli connection modify "WiFi-Home" \
802-11-wireless.bssid AA:BB:CC:DD:EE:FF
高度なnmcli活用術
実務で役立つテクニックです。
接続の自動起動設定
# 自動接続を有効化
sudo nmcli connection modify "接続名" connection.autoconnect yes
# 自動接続を無効化
sudo nmcli connection modify "接続名" connection.autoconnect no
# 優先順位を設定(数値が大きいほど優先)
sudo nmcli connection modify "接続名" connection.autoconnect-priority 10
接続のクローン(複製)
sudo nmcli connection clone "元の接続" "新しい接続"
接続のエクスポートとインポート
設定を別のマシンに移行:
# エクスポート
sudo nmcli connection export "接続名" > connection.conf
# 別のマシンでインポート
sudo nmcli connection import type openvpn file connection.conf
タイムアウト付きコマンド実行
リモート操作で接続が切れるリスクを回避:
sudo nmcli connection modify "接続名" ipv4.addresses 192.168.1.100/24
sudo bash -c "sleep 10 && nmcli connection up '接続名'" &
sudo nmcli connection down "接続名"
10秒後に自動的に接続が戻ります。
MACアドレスのランダム化
プライバシー保護:
# Wi-Fi接続時にランダムMACを使用
sudo nmcli connection modify "WiFi-Home" \
802-11-wireless.cloned-mac-address random
# 固定のランダムMAC
sudo nmcli connection modify "WiFi-Home" \
802-11-wireless.cloned-mac-address stable
接続の監視
リアルタイムで変更を監視:
nmcli monitor
別の端末で設定変更すると、即座に表示されますよ。
ipコマンドでの低レベル設定
ipコマンドの基本
iproute2パッケージに含まれる強力なツールです。
ipコマンドの構文
ip [OPTIONS] OBJECT { COMMAND | help }
主なOBJECT
link
– ネットワークデバイスaddr
– IPアドレスroute
– ルーティングテーブルneigh
– ARPテーブル(隣接テーブル)rule
– ルーティングポリシー
重要な注意点
ipコマンドで行った変更は一時的です。再起動すると消えるので、恒久的な設定にはnmcliやNetplanを使いましょう。
インターフェースの操作
ネットワークデバイスの基本操作です。
インターフェース一覧の表示
ip link show
簡潔な表示:
ip -br link show
出力例:
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
enp3s0 UP 12:34:56:78:9a:bc <BROADCAST,MULTICAST,UP,LOWER_UP>
wlan0 DOWN aa:bb:cc:dd:ee:ff <BROADCAST,MULTICAST>
インターフェースのアップ/ダウン
# インターフェースを有効化
sudo ip link set enp3s0 up
# インターフェースを無効化
sudo ip link set enp3s0 down
MTUの変更
最大転送単位(Maximum Transmission Unit)の設定:
sudo ip link set enp3s0 mtu 1400
標準は1500バイトですが、VPN使用時などは調整が必要な場合があります。
MACアドレスの変更
# インターフェースをダウン
sudo ip link set enp3s0 down
# MACアドレスを変更
sudo ip link set enp3s0 address 00:11:22:33:44:55
# インターフェースをアップ
sudo ip link set enp3s0 up
インターフェース名の変更
sudo ip link set enp3s0 down
sudo ip link set enp3s0 name eth0
sudo ip link set eth0 up
IPアドレスの管理
アドレスの追加・削除・確認の方法です。
IPアドレスの表示
ip addr show
または特定のインターフェースのみ:
ip addr show dev enp3s0
簡潔表示:
ip -br addr show
IPアドレスの追加
sudo ip addr add 192.168.1.100/24 dev enp3s0
CIDR記法(/24)の説明
- /24 = サブネットマスク 255.255.255.0
- /16 = サブネットマスク 255.255.0.0
- /8 = サブネットマスク 255.0.0.0
複数のIPアドレスを追加
sudo ip addr add 192.168.1.100/24 dev enp3s0
sudo ip addr add 192.168.1.101/24 dev enp3s0
sudo ip addr add 192.168.1.102/24 dev enp3s0
1つのインターフェースに複数のIPを割り当てられます。
IPアドレスの削除
sudo ip addr del 192.168.1.100/24 dev enp3s0
すべてのIPアドレスをクリア
sudo ip addr flush dev enp3s0
注意:接続が切れるので慎重に!
ルーティングテーブルの操作
通信経路を制御する重要な設定です。
ルーティングテーブルの表示
ip route show
または
ip r
出力例:
default via 192.168.1.1 dev enp3s0 proto dhcp metric 100
192.168.1.0/24 dev enp3s0 proto kernel scope link src 192.168.1.100 metric 100
読み方
default via 192.168.1.1
= デフォルトゲートウェイは192.168.1.1dev enp3s0
= enp3s0インターフェース経由192.168.1.0/24
= 192.168.1.0~255へのルート
デフォルトゲートウェイの設定
sudo ip route add default via 192.168.1.1 dev enp3s0
既存のデフォルトゲートウェイを変更
# 古いルートを削除
sudo ip route del default
# 新しいルートを追加
sudo ip route add default via 192.168.1.254 dev enp3s0
特定ネットワークへのルート追加
# 10.0.0.0/8へは192.168.1.254経由
sudo ip route add 10.0.0.0/8 via 192.168.1.254 dev enp3s0
ルートの削除
sudo ip route del 10.0.0.0/8 via 192.168.1.254
メトリック(優先度)の指定
複数のルートがある場合、メトリック値が小さい方が優先されます:
sudo ip route add default via 192.168.1.1 dev enp3s0 metric 100
sudo ip route add default via 192.168.2.1 dev enp4s0 metric 200
この場合、192.168.1.1が優先されます。
ARPテーブルの操作
MACアドレスとIPアドレスの対応表を管理します。
ARPテーブルの表示
ip neigh show
または
ip n
出力例:
192.168.1.1 dev enp3s0 lladdr aa:bb:cc:dd:ee:ff REACHABLE
192.168.1.50 dev enp3s0 lladdr 11:22:33:44:55:66 STALE
状態の意味
- REACHABLE – 到達可能(通信確認済み)
- STALE – 古い(再確認が必要)
- DELAY – 遅延中
- PROBE – 確認中
- FAILED – 到達不可
ARPエントリの手動追加
sudo ip neigh add 192.168.1.100 lladdr aa:bb:cc:dd:ee:ff dev enp3s0
ARPエントリの削除
sudo ip neigh del 192.168.1.100 dev enp3s0
ARPキャッシュのクリア
sudo ip neigh flush all
Netplanでの設定(サーバー向け)
Netplanの詳細理解
YAML形式で設定を記述する、モダンなネットワーク設定ツールです。
Netplanの役割
Netplanは直接ネットワークを管理するのではなく、設定を以下のバックエンドに渡します:
- NetworkManager – デスクトップ環境向け
- systemd-networkd – サーバー環境向け
設定ファイルの構造
/etc/netplan/
├── 00-installer-config.yaml
├── 01-netcfg.yaml
└── 99-custom.yaml
ファイル名の数字が小さい方から順に読み込まれます。
基本的なYAML構文
network:
version: 2
renderer: networkd # または NetworkManager
ethernets:
enp3s0:
# 設定項目
重要な注意点
- インデントはスペース2つ(タブは不可)
- コロンの後ろには必ずスペース
- ハイフン(-)でリストを表現
有線LANのNetplan設定例
実践的な設定パターンを紹介します。
DHCP設定(最もシンプル)
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: true
dhcp6: false
固定IP設定(基本)
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: no
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
Ubuntu 22.04以降ではgateway4
が非推奨になり、routes
を使います。
複数IPアドレスの設定
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: no
addresses:
- 192.168.1.100/24
- 192.168.1.101/24
- 192.168.1.102/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
複数のデフォルトゲートウェイ(メトリック指定)
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
metric: 100
enp4s0:
addresses:
- 192.168.2.100/24
routes:
- to: default
via: 192.168.2.1
metric: 200
メトリック値が小さい方(enp3s0)が優先されます。
特定ネットワークへのスタティックルート
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
- to: 10.0.0.0/8
via: 192.168.1.254
nameservers:
addresses:
- 8.8.8.8
10.0.0.0/8へは192.168.1.254経由でルーティングされます。
Wi-FiのNetplan設定例
無線LANもNetplanで設定できます。
基本的なWi-Fi設定
network:
version: 2
renderer: networkd
wifis:
wlan0:
dhcp4: true
access-points:
"YourSSID":
password: "YourPassword"
Wi-Fiを固定IPで設定
network:
version: 2
renderer: networkd
wifis:
wlan0:
dhcp4: no
addresses:
- 192.168.1.101/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
access-points:
"YourSSID":
password: "YourPassword"
複数のWi-Fiネットワーク(優先順位付き)
network:
version: 2
renderer: networkd
wifis:
wlan0:
dhcp4: true
access-points:
"HomeWiFi":
password: "homepass"
"WorkWiFi":
password: "workpass"
"CafeWiFi":
password: "cafepass"
上から順に優先されます。
非表示SSID(ステルス)への接続
network:
version: 2
renderer: networkd
wifis:
wlan0:
dhcp4: true
access-points:
"HiddenSSID":
password: "password"
hidden: true
WPA2 Enterpriseの設定
network:
version: 2
renderer: networkd
wifis:
wlan0:
dhcp4: true
access-points:
"EnterpriseWiFi":
auth:
key-management: eap
method: peap
identity: "username"
password: "password"
Netplanのコマンド操作
設定の適用と管理方法です。
設定の検証
適用前に文法エラーをチェック:
sudo netplan generate
エラーがあれば表示されます。
設定の適用
sudo netplan apply
エラーがあっても強制適用:
sudo netplan --debug apply
設定のテスト適用
120秒後に自動的に元に戻るセーフモード:
sudo netplan try
プロンプトが表示されるので:
- 設定が正しければEnter
- 応答しなければ120秒後に自動ロールバック
リモート操作で接続が切れても安心ですね。
現在の設定を表示
netplan get
適用されている設定がYAML形式で表示されます。
特定のインターフェースだけ適用
sudo netplan apply --only-device=enp3s0
デバッグモード
詳細なログを表示:
sudo netplan --debug apply
Netplan + systemd-networkdの詳細設定
サーバー環境でよく使う高度な設定です。
VLANの設定
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: no
vlans:
vlan10:
id: 10
link: enp3s0
addresses:
- 192.168.10.100/24
vlan20:
id: 20
link: enp3s0
addresses:
- 192.168.20.100/24
ブリッジの設定
仮想マシンやコンテナで使用:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: no
bridges:
br0:
dhcp4: yes
interfaces:
- enp3s0
ボンディング(冗長化)
複数のNICを束ねて冗長性や帯域幅を向上:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: no
enp4s0:
dhcp4: no
bonds:
bond0:
dhcp4: yes
interfaces:
- enp3s0
- enp4s0
parameters:
mode: active-backup
primary: enp3s0
MACアドレスのスプーフィング
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
match:
macaddress: 12:34:56:78:9a:bc
set-name: eth0
dhcp4: true
macaddress: aa:bb:cc:dd:ee:ff
設定ファイルの直接編集
/etc/network/interfaces(Debian系)
古いスタイルですが、一部の環境では現役です。
注意
Ubuntu 18.04以降ではNetplanが標準なので、通常は使いません。ただし、レガシーシステムやDebian環境では重要です。
基本的な構文
sudo nano /etc/network/interfaces
DHCP設定
auto enp3s0
iface enp3s0 inet dhcp
固定IP設定
auto enp3s0
iface enp3s0 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
複数IPアドレス
auto enp3s0
iface enp3s0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
auto enp3s0:0
iface enp3s0:0 inet static
address 192.168.1.101
netmask 255.255.255.0
設定の適用
sudo systemctl restart networking
または
sudo ifdown enp3s0 && sudo ifup enp3s0
systemd-networkdの設定ファイル
Netplanを使わず、直接systemd-networkdを設定する方法です。
設定ファイルの場所
/etc/systemd/network/
ファイル名の規則
*.network
– ネットワーク設定*.netdev
– 仮想デバイス設定*.link
– リンク設定
番号順に読み込まれます(例:10-eth0.network、20-wlan0.network)
固定IP設定の例
sudo nano /etc/systemd/network/10-enp3s0.network
[Match]
Name=enp3s0
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4
DHCP設定の例
[Match]
Name=enp3s0
[Network]
DHCP=yes
設定の適用
sudo systemctl restart systemd-networkd
systemd-networkdの有効化
# NetworkManagerを停止
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
# systemd-networkdを有効化
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd
トラブルシューティングCUI編
ネットワーク診断の基本フロー
コマンドラインでの系統的な診断手順です。
レイヤー1:物理層の確認
# インターフェースの状態確認
ip link show enp3s0
「UP」になっているか確認。「DOWN」なら:
sudo ip link set enp3s0 up
レイヤー2:データリンク層の確認
# MACアドレスの確認
ip link show enp3s0 | grep link/ether
# ARPテーブルの確認
ip neigh show
レイヤー3:ネットワーク層の確認
# IPアドレスの確認
ip addr show enp3s0
# ルーティングテーブルの確認
ip route show
# ゲートウェイへのping
ping -c 4 192.168.1.1
レイヤー4:トランスポート層の確認
# ポートが開いているか確認
ss -tuln | grep :80
# 特定のポートへの接続テスト
nc -zv google.com 80
レイヤー7:アプリケーション層の確認
# DNSの確認
nslookup google.com
# HTTPアクセス確認
curl -I http://google.com
接続できない時の診断コマンド
具体的なトラブル診断方法です。
pingテスト(到達性確認)
# ローカルホスト(自分自身)
ping -c 4 127.0.0.1
# 同一ネットワーク内のデバイス
ping -c 4 192.168.1.1
# インターネット上のIPアドレス
ping -c 4 8.8.8.8
# ドメイン名
ping -c 4 google.com
診断の流れ
- 127.0.0.1が成功 → ネットワークスタック正常
- 192.168.1.1が成功 → ローカルネットワーク正常
- 8.8.8.8が成功 → インターネット接続正常
- google.comが失敗 → DNS問題
traceroute(経路追跡)
sudo apt install traceroute
traceroute google.com
どこで通信が止まっているか特定できます。
mtr(リアルタイム経路追跡)
sudo apt install mtr
mtr google.com
pingとtracerouteを組み合わせた強力なツールですよ。
DNSクエリのテスト
# nslookup
nslookup google.com
# 特定のDNSサーバーを指定
nslookup google.com 8.8.8.8
# dig(詳細情報)
dig google.com
# ショートカット
dig +short google.com
ポートの接続確認
# nc(netcat)を使う
nc -zv google.com 80
nc -zv google.com 443
# telnetを使う
telnet google.com 80
パケットキャプチャ
# tcpdumpをインストール
sudo apt install tcpdump
# 特定インターフェースのパケットをキャプチャ
sudo tcpdump -i enp3s0
# 特定ホストとの通信のみ
sudo tcpdump -i enp3s0 host 192.168.1.1
# 特定ポートのみ
sudo tcpdump -i enp3s0 port 80
# ファイルに保存
sudo tcpdump -i enp3s0 -w capture.pcap
ログの確認方法
問題の原因をログから特定します。
journalctlでログを確認
# NetworkManagerのログ
sudo journalctl -u NetworkManager -f
# systemd-networkdのログ
sudo journalctl -u systemd-networkd -f
# カーネルのネットワークメッセージ
sudo journalctl -k | grep -i network
# 特定時間のログ
sudo journalctl -u NetworkManager --since "10 minutes ago"
dmesgでカーネルログ確認
# ネットワーク関連のメッセージ
dmesg | grep -i network
dmesg | grep -i eth
dmesg | grep -i wlan
# リアルタイムで監視
dmesg -w
システムログの確認
# syslog
sudo tail -f /var/log/syslog | grep -i network
# 認証ログ(WPA Supplicant等)
sudo tail -f /var/log/auth.log
リモート接続時の安全な設定変更
SSH経由で設定変更する際の注意点です。
タイムアウト付きコマンド実行
接続が切れても自動復旧する方法:
# 変更をバックグラウンドで実行し、10秒後に元に戻す
(sleep 10 && sudo nmcli connection up "元の接続") &
# 新しい設定を適用
sudo nmcli connection up "新しい接続"
10秒以内に接続が確立すれば、バックグラウンドジョブをキャンセル:
jobs
kill %1
スクリプトでの安全な変更
#!/bin/bash
# 元の接続名
OLD_CONN="有線DHCP"
NEW_CONN="有線固定IP"
# 新しい接続に切り替え
sudo nmcli connection up "$NEW_CONN"
# 接続テスト
if ping -c 3 8.8.8.8 > /dev/null 2>&1; then
echo "接続成功"
else
echo "接続失敗、元に戻します"
sudo nmcli connection up "$OLD_CONN"
fi
at コマンドで遅延実行
# 5分後に元の接続に戻すコマンドを予約
echo "sudo nmcli connection up '元の接続'" | at now + 5 minutes
# 新しい設定を適用
sudo nmcli connection modify "接続名" ipv4.addresses 192.168.1.100/24
sudo nmcli connection up "接続名"
# 接続が成功したら予約をキャンセル
atq # ジョブ番号を確認
atrm ジョブ番号
実践的なスクリプト例
ネットワーク情報取得スクリプト
システムのネットワーク情報を一括取得するスクリプトです。
#!/bin/bash
echo "=== ネットワーク情報取得スクリプト ==="
echo ""
echo "--- インターフェース一覧 ---"
ip -br link show
echo ""
echo "--- IPアドレス ---"
ip -br addr show
echo ""
echo "--- ルーティングテーブル ---"
ip route show
echo ""
echo "--- DNSサーバー ---"
cat /etc/resolv.conf | grep nameserver
echo ""
echo "--- アクティブな接続 ---"
nmcli connection show --active
echo ""
echo "--- デフォルトゲートウェイへのping ---"
GW=$(ip route | grep default | awk '{print $3}' | head -1)
if [ -n "$GW" ]; then
ping -c 3 $GW
else
echo "デフォルトゲートウェイが見つかりません"
fi
echo ""
echo "--- インターネット接続確認 ---"
ping -c 3 8.8.8.8
echo ""
echo "--- DNS解決確認 ---"
nslookup google.com
保存して実行権限を付与:
chmod +x network_info.sh
./network_info.sh
ネットワーク接続自動切り替えスクリプト
場所に応じて接続を自動切り替えるスクリプトです。
#!/bin/bash
# 接続先のゲートウェイで場所を判定
HOME_GW="192.168.1.1"
OFFICE_GW="192.168.100.1"
# 現在のゲートウェイを取得
CURRENT_GW=$(ip route | grep default | awk '{print $3}' | head -1)
if ping -c 1 -W 1 $HOME_GW > /dev/null 2>&1; then
echo "自宅ネットワークを検出"
sudo nmcli connection up "Home-WiFi"
elif ping -c 1 -W 1 $OFFICE_GW > /dev/null 2>&1; then
echo "オフィスネットワークを検出"
sudo nmcli connection up "Office-Wired"
else
echo "既知のネットワークが見つかりません"
fi
接続監視スクリプト
接続が切れたら自動で再接続するスクリプトです。
#!/bin/bash
CONN_NAME="有線接続 1"
CHECK_HOST="8.8.8.8"
CHECK_INTERVAL=30
while true; do
if ! ping -c 1 -W 2 $CHECK_HOST > /dev/null 2>&1; then
echo "$(date): 接続が切れています。再接続を試みます..."
sudo nmcli connection down "$CONN_NAME"
sleep 2
sudo nmcli connection up "$CONN_NAME"
sleep 5
else
echo "$(date): 接続正常"
fi
sleep $CHECK_INTERVAL
done
バックグラウンドで実行:
nohup ./connection_monitor.sh > /var/log/connection_monitor.log 2>&1 &
よくある質問(FAQ)
Q1:nmcliとipコマンド、どちらを使うべき?
A:
用途によって使い分けましょう。
nmcliを使うべき場合
- 恒久的な設定をしたい
- NetworkManagerを使っている環境
- Wi-Fi管理
- 複数の接続プロファイルを管理
ipコマンドを使うべき場合
- 一時的な設定変更
- トラブルシューティング
- 低レベルな制御が必要
- スクリプトでの細かい制御
基本的には、恒久的な設定はnmcliかNetplan、一時的な変更やデバッグはipコマンドがおすすめですよ。
Q2:設定変更後、すぐに反映されないのはなぜ?
A:
設定ツールによって反映方法が異なります。
nmcli
sudo nmcli connection reload
sudo nmcli connection up "接続名"
Netplan
sudo netplan apply
systemd-networkd
sudo systemctl restart systemd-networkd
ip コマンド
即座に反映されますが、再起動で消えます。
Q3:複数のDNSサーバーを設定する順番に意味はある?
A:
はい、順番が重要です。
最初に記載されたDNSサーバーが優先的に使用され、応答がない場合に次のサーバーが使われます。
# 優先順位: 8.8.8.8 → 8.8.4.4 → 1.1.1.1
sudo nmcli connection modify "接続名" \
ipv4.dns "8.8.8.8,8.8.4.4,1.1.1.1"
速度と信頼性を考慮して順番を決めましょう。
Q4:NetworkManagerとsystemd-networkd、どちらを使うべき?
A:
環境と用途によります。
NetworkManager
- デスクトップ環境に最適
- Wi-Fi管理が簡単
- 自動接続の切り替えが賢い
- GUIツールが充実
systemd-networkd
- サーバー環境に最適
- 軽量で高速
- systemdとの統合
- シンプルな設定
サーバーならsystemd-networkd、デスクトップならNetworkManagerがおすすめです。
Q5:CUIでWi-Fiのパスワードを確認できる?
A:
はい、保存されているパスワードは確認できます。
# NetworkManagerの場合
sudo cat /etc/NetworkManager/system-connections/接続名
# 特定の行だけ表示
sudo grep psk= /etc/NetworkManager/system-connections/接続名
または
sudo nmcli -s connection show "WiFi名" | grep psk
セキュリティのため、これらのファイルは管理者権限が必要です。
Q6:リモート接続中に設定を変更して切断されたら?
A:
いくつかの予防策があります。
方法1:タイムアウト付きコマンド
(sleep 60 && sudo nmcli connection up "元の接続") &
sudo nmcli connection up "新しい接続"
方法2:netplan try を使う
sudo netplan try
120秒以内に確認しないと自動ロールバック。
方法3:シリアルコンソールやIPMIでアクセス
ネットワーク以外の手段を用意しておく。
方法4:複数のネットワークインターフェース
1つのNICで実験し、もう1つは既知の動作設定を維持。
まとめ:CUIでネットワーク設定をマスターしよう
コマンドラインでのネットワーク設定は、最初は難しく感じるかもしれません。でも、一度マスターすれば、圧倒的に効率的で強力なツールになります。
この記事のポイント
- CUIは自動化・スクリプト化・リモート操作に最適
- nmcliは恒久的な設定に、ipコマンドは一時的な変更に使う
- Netplanはサーバー環境での標準設定ツール
- トラブルシューティングはレイヤーごとに段階的に
- リモート操作時は必ずセーフティネットを用意
覚えておきたい必須コマンド
# 状態確認
nmcli device status
ip addr show
ip route show
# 接続管理
sudo nmcli connection up "接続名"
sudo nmcli connection down "接続名"
# 設定適用
sudo netplan apply
sudo systemctl restart NetworkManager
# 診断
ping -c 4 8.8.8.8
traceroute google.com
nslookup google.com
レベル別の学習ステップ
初級者
- nmcli device statusで状態確認
- nmcli connection showで接続一覧
- 基本的なDHCP接続の作成
中級者
- 固定IPの設定と変更
- ipコマンドでの一時的な設定
- Netplanでの設定管理
上級者
- スクリプトでの自動化
- 高度なルーティング設定
- トラブルシューティングの体系的アプローチ
実践のコツ
- まずは仮想マシンやテスト環境で練習
- よく使うコマンドはエイリアスやスクリプト化
- 設定変更前は必ずバックアップ
- ログを確認する習慣をつける
- コミュニティやドキュメントを活用
あなたも今日から、CUIでのネットワーク設定をマスターしましょう!
コマンドラインは強力な武器です。最初は覚えることが多くて大変ですが、使い続けるうちに自然と身についていきます。この記事を手元に置いて、実際に手を動かしながら学んでくださいね。きっと、「CUIの方が速くて正確!」と感じる日が来ますよ。
コメント