LoginSignup
3
4

ProxmoxVEでRealtekのNICが繋がらなくなる問題

Last updated at Posted at 2020-12-15

はじめに

ASRockのマザーボード(AB350 Pro4)でProxmoxVEサーバーを構築。ボードに搭載されているRealtek社製NIC(RTL8111/8168/8411)のドライバーに問題があり、通信ができなくなることがあった。対処法をまとめる。

自分のマシンのNICが該当するか確認

lspci | grep RTL8
25:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 11)

8168というのが見えれば、問題のNIC。

問題点

  1. 8168のNICについて自動で8169のドライバーが使用されてしまう
  2. 8169のドライバーには通信ができなくなる不具合がある
  3. ProxmoxVEのカーネルのバージョンアップにドライバーがついてこれない

解決方法

r8169が自動で読まれる問題について

モジュールのブラックリストにr8169を記載して強制的に読み込ませないようにする。
まず現時点でr8169を使用しているか確認。grepで1行ヒットすれば使用していることがわかる。

lsmod | grep r8169
r8169                 548864  0

ProxmoxVEの場合、モジュールのブラックリストは以下のファイルを編集する。

vim /etc/modprobe.d/blacklist.conf
# 以下を追記
blacklist r8169

これでマシン起動時にはr8169が読み込まれなくなるが、代わりにr8168を入れないと通信ができなくなる。

r8168のインストールについて

Reaktekの公式サイトからソースコードをダウンロードして、コンパイルして使用する。
コンパイルした際のカーネルとバージョンが合わなくなると動作しなくなるので、カーネルのアップグレード後には自動でドライバーもアップグレードする仕組みが必要。

必要なもの

apt install build-essential # コンパイルに必要
apt install pve-headers # ProxmoxVEのカーネルのヘッダー情報
apt install dkms # カーネルのアップグレード時にドライバーをアップグレードする仕組み

ドライバーの入手

以下サイトから入手。wgetやcurlではダウンロードさせてくれない様子。

下の画像でいう、「GBE Ethernet LINUX driver r8168 for kernel up to 5.6」のリンク先のファイルが該当。
image.png

scpコマンドなどでなんとかProxmoxVEにコピー。

試しにコンパイル

ドライバーの自動アップデートの前に、コンパイルがうまくいくか手動で試しておく。

# ファイルのバージョンは変化します。ディレクトリはどこでもいいです
tar xf r8168-8.048.03.tar.bz2
cd r8168-8.048.03/
./autorun.sh

ビルドに必要なものが揃っていれば、エラーが表示されないはず。モジュールがロードされているか確認する。

lsmod |grep r8168
r8168                 548864  0

その後、マシンを再起動して通信ができることを確認しておく。

ドライバーの自動アップデート

これでr8168をインストールできたのだが、apt upgradeしたりするとカーネルのアップグレードが走りドライバーと噛み合わなくなり通信できなくなる。
apt upgradeした際には自動でドライバーも更新するようにする。

cp -r r8168-8.048.03 /usr/src/ # 解凍したさっきのフォルダを丸ごとコピー
vim /usr/src/r8168-8.048.03/dkms.conf # dkmsファイルを作成

dkmsファイルの内容は以下のように。8.048.03の箇所はドライバーのバージョンに合わせること。

PACKAGE_NAME="r8168"
PACKAGE_VERSION="8.048.03"
MAKE[0]="cd ${dkms_tree}/r8168/8.048.03/build; make KVER=${kernelver} modules"
CLEAN[0]="cd ${dkms_tree}/r8168/8.048.03/build; make clean"
BUILT_MODULE_NAME[0]="r8168"
BUILT_MODULE_LOCATION[0]="src/"
DEST_MODULE_LOCATION[0]="/kernel/drivers/net"
AUTOINSTALL="YES"

dkmsを設定する

dkms -m r8168 -v 8.048.03 add
dkms -m r8168 -v 8.048.03 build
dkms -m r8168 -v 8.048.03 install

エラーが出ず、再起動後も問題なく通信できていればOK。

おまけ(Intel NICのdkms)

備忘録として併用しているIntel NIC(82574Lを使用)の設定も残しておく
蟹NICだけでは不安なので、中古のIntel NICをメルカリで購入した(送料込みで¥900)
2つのNICをbondingして冗長構成で運用中。

価格コム
https://kakaku.com/item/K0000157168/

使用しているか確認

lspci |grep 82574L
22:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection

ドライバーのサイト
https://downloadcenter.intel.com/ja/download/15817/Intel-Network-Adapter-Driver-for-PCIe-Intel-Gigabit-Ethernet-Network-Connections-Under-Linux-

tar zxfv e1000e-3.8.4.tar.gz
cp -r e1000e-3.8.4 /usr/src
vim /usr/src/e1000e-3.8.4/dkms.conf

以下、dkms.confの内容

PACKAGE_NAME="e1000e"
PACKAGE_VERSION="3.8.4"
MAKE[0]="cd src/ && make KVERSION=$kernelver BUILD_KERNEL=$kernelver"
CLEAN="cd src/ && make clean"
BUILT_MODULE_NAME[0]="e1000e"
BUILT_MODULE_LOCATION[0]="src/"
DEST_MODULE_LOCATION[0]="/updates"
REMAKE_INITRD="yes"
AUTOINSTALL="yes"

dkms設定

dkms -m e1000e -v 3.8.4 add
dkms -m e1000e -v 3.8.4 build
dkms -m e1000e -v 3.8.4 install
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4