proxmoxで再起動するとLink downしてしまう話

# TL;DR
1. `ip a`でインタフェース名を確認する
1. `/etc/network/interfaces`ファイル内のインタフェース名を確認したものに書き換える
1. `ifreload -a`を実行する

エラーなく実行できていれば修正完了

# 経緯
最近、私の所属するサークルでproxmoxブームが起きていまして、かく言う私も家で2台サーバを稼働してお家クラスタを組んでニヤニヤしています。
そんな時、新しくサーバを追加しようとしてproxmoxをインストールしてWebUIに入ろうとしたときに事件は起きました。
「なんか、接続できない...」
「サーバも起動してるしネットワークも動いて...ん？」
ここでサーバに対してpingが飛ばないことに気づきました。
とりあえず、再起動やらproxmoxの再インストールやら試してみたのですが、どうしても再起動後にLink downしてしまう状態が治らず...
ということで、ここから短い修正のお話です。

# とりあえずChatGPTに聞いてみた
Google検索をしても下手すぎるのか、そもそもこの程度のことは解決できるのが当たり前なのか、いい感じの記事が見つからなかったのでChatGPTに聞いてみると次のような返答がありました。
(正味内容ないので読み飛ばしてもらっても大丈夫です)

> proxmoxでホスト機を再起動すると、有線接続用のLANがLink downしてしまいます。どのような理由が考えられますか？

Proxmox ホストを再起動した際に、有線接続用の LAN が「Link down」状態になる問題には、以下のような原因が考えられます。

---

### ✅ よくある原因一覧

1. **ネットワークドライバの読み込み失敗**

   * カーネルが NIC（ネットワークインタフェースカード）のドライバを正しく読み込めていない。
   * 特に Realtek や一部の Intel NIC では、Debian（Proxmoxのベース）で標準で対応していないドライバがあります。

   **対策:**

   * `lspci` で NIC を確認し、`dmesg | grep eth` や `dmesg | grep -i firmware` で読み込み状況を確認。
   * 必要なら `non-free` ドライバを導入する（例: `firmware-realtek`, `firmware-iwlwifi` など）。

2. **Network Interface Name の変更**

   * 再起動後にインターフェース名（`eth0` → `enp3s0` など）が変わることで、設定されたインターフェースが無効になる。

   **対策:**

   * `/etc/network/interfaces` の `iface` の名前と、`ip link` で確認できる実際の名前が一致しているか確認。
   * `udev` による命名ルールが変わっている可能性があるため、固定化するなら `/etc/systemd/network/99-default.link` を使うか、`net.ifnames=0 biosdevname=0` を GRUB に設定。

3. **ハードウェアの初期化タイミング問題**

   * 起動時に NIC の初期化が間に合わず、リンクアップしないケース（特に USB NIC や一部の PCIe NIC に多い）。

   **対策:**

   * `dmesg` を確認し、NIC が認識されるタイミングをチェック。
   * `networking.service` を遅延起動する設定を入れる。

4. **ケーブルやスイッチの相性問題**

   * 再起動時にスイッチがリンクを一時遮断することがある（特に省電力設定のあるスイッチや古いモデル）。

   **対策:**

   * 別のポートやスイッチを使ってみる。
   * BIOSやUEFIで「省電力設定」や「Wake on LAN」の設定を確認・無効化。

5. **Proxmox側のネットワーク設定ミス**

   * `/etc/network/interfaces` または `bridge` 設定に誤りがあり、再起動時にネットワークが正しく構成されない。

   **対策:**

   * `ifreload -a` を使って設定を再適用してみる。
   * `journalctl -u networking` でログ確認。

---

### 🔧 確認すべきコマンド一覧

```bash
ip a          # インターフェース名と状態の確認
lspci -nn     # NIC のモデル確認
dmesg | grep -i eth
dmesg | grep -i firmware
journalctl -b | grep -i network
cat /etc/network/interfaces
```

---

### ✳️ 最終手段

* Proxmox のバージョンを最新にアップデートしてみる。
* NIC によっては DKMS や外部ソースからドライバをビルドして導入する必要があるかもしれません。


# 言われたことやってみる
ここで、とりあえず`ip a`と`dmesg | grep -i eth`を実行すると
```shell
> ip a
...
2. enp12s0: ... state DOWN ...
...

> dmesg | grep -i eth0
...
[ ... ] ... enp12s0: renamed from eth0
...
```
という感じ。ついでに、`cat /etc/network/interfaces`を確認すると、
```config
...
iface enp11s0 inet manual

auto vmbr0
iface vmbr0 inet static
    address 192.168.11.**/24
    gateway 192.168.11.1
    bridge-ports: enp11s0
    bridge-stp: off
    bridge-fd: 0

...
```
となっていて、見てわかる通り、`ip a`で得られたインタフェース名と`/etc/network/interfaces`で使われているインタフェース名が異なります。これが今回の現象の原因でした。

# 設定修正と適用
先ほど確認したインタフェース名(`enp12s0`)に`/etc/network/interfaces`ファイルのインタフェース名(`enp11s0`)を置き換え、`ifreload -a`を実行したところ無事治りました。
```diff_conf
...
- iface enp11s0 inet manual
+ iface enp12s0 inet manual

auto vmbr0
iface vmbr0 inet static
    address 192.168.11.**/24
    gateway 192.168.11.1
-     bridge-ports: enp11s0
+     bridge-ports: enp12s0
    bridge-stp: off
    bridge-fd: 0

...
```

# 終わりに
結局、今回のエラーはproxmox側の設定ミス？が原因だったようで、気づくのに結構苦戦しました。まだまだ、linux系のシステムに対する知識が足りないことを思い知らされた良い経験ということにしておきます... (相変わらずのカス記事である)
それでは、またどこかでお会いしましょう ﾉｼ