Ubuntuネットワーク設定CUI完全ガイド【コマンドラインマスター】

Linux

「GUIが使えないサーバーで、どうやってネットワークを設定すればいいの?」

リモートサーバーやヘッドレス環境では、コマンドラインでのネットワーク設定が必須です。でも、慣れないうちは「コマンドが覚えられない」「設定ミスで接続が切れたらどうしよう」と不安になりますよね。

実は、CUIでのネットワーク設定には大きなメリットがあります。スクリプト化できる、リモートから設定できる、GUIより細かい制御ができる、そして何より、一度覚えれば圧倒的に速いんです。

この記事では、Ubuntuのネットワーク設定をコマンドラインで完全にマスターする方法を、初心者から上級者まで分かりやすく解説します。

スポンサーリンク
  1. CUIでネットワーク設定をするメリット
    1. なぜコマンドラインを使うのか
    2. CUIツールの種類と特徴
  2. nmcliコマンドの完全マスター
    1. nmcliの基本構文
    2. デバイスとコネクションの違い
    3. 接続情報の確認コマンド
    4. 有線LAN接続の設定
    5. Wi-Fi接続の設定
    6. 高度なnmcli活用術
  3. ipコマンドでの低レベル設定
    1. ipコマンドの基本
    2. インターフェースの操作
    3. IPアドレスの管理
    4. ルーティングテーブルの操作
    5. ARPテーブルの操作
  4. Netplanでの設定(サーバー向け)
    1. Netplanの詳細理解
    2. 有線LANのNetplan設定例
    3. Wi-FiのNetplan設定例
    4. Netplanのコマンド操作
    5. Netplan + systemd-networkdの詳細設定
  5. 設定ファイルの直接編集
    1. /etc/network/interfaces(Debian系)
    2. systemd-networkdの設定ファイル
  6. トラブルシューティングCUI編
    1. ネットワーク診断の基本フロー
    2. 接続できない時の診断コマンド
    3. ログの確認方法
    4. リモート接続時の安全な設定変更
  7. 実践的なスクリプト例
    1. ネットワーク情報取得スクリプト
    2. ネットワーク接続自動切り替えスクリプト
    3. 接続監視スクリプト
  8. よくある質問(FAQ)
    1. Q1:nmcliとipコマンド、どちらを使うべき?
    2. Q2:設定変更後、すぐに反映されないのはなぜ?
    3. Q3:複数のDNSサーバーを設定する順番に意味はある?
    4. Q4:NetworkManagerとsystemd-networkd、どちらを使うべき?
    5. Q5:CUIでWi-Fiのパスワードを確認できる?
    6. Q6:リモート接続中に設定を変更して切断されたら?
  9. まとめ:CUIでネットワーク設定をマスターしよう

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 Personal
  • wifi-sec.key-mgmt wpa-eap – WPA/WPA2 Enterprise
  • wifi-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.1
  • dev 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

診断の流れ

  1. 127.0.0.1が成功 → ネットワークスタック正常
  2. 192.168.1.1が成功 → ローカルネットワーク正常
  3. 8.8.8.8が成功 → インターネット接続正常
  4. 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

レベル別の学習ステップ

初級者

  1. nmcli device statusで状態確認
  2. nmcli connection showで接続一覧
  3. 基本的なDHCP接続の作成

中級者

  1. 固定IPの設定と変更
  2. ipコマンドでの一時的な設定
  3. Netplanでの設定管理

上級者

  1. スクリプトでの自動化
  2. 高度なルーティング設定
  3. トラブルシューティングの体系的アプローチ

実践のコツ

  • まずは仮想マシンやテスト環境で練習
  • よく使うコマンドはエイリアスやスクリプト化
  • 設定変更前は必ずバックアップ
  • ログを確認する習慣をつける
  • コミュニティやドキュメントを活用

あなたも今日から、CUIでのネットワーク設定をマスターしましょう!

コマンドラインは強力な武器です。最初は覚えることが多くて大変ですが、使い続けるうちに自然と身についていきます。この記事を手元に置いて、実際に手を動かしながら学んでくださいね。きっと、「CUIの方が速くて正確!」と感じる日が来ますよ。

コメント

タイトルとURLをコピーしました