こんにちは。使っているPCでインターネット(Ethernet)が使えなくなる事象に遭遇しました。設定で苦労したので、自分用のメモを兼ねて書きます。
背景
先日引っ越しをしたことで、自宅のネットワークの構成が変わったのですが、引っ越し先で、インターネットに繋がらない事象に遭遇しました。調査、試行錯誤を繰り返し、結局当該のPCは1週間ほどインターネットが使えませんでした。同じように現在進行系で苦労されている方に少しでもお力になったら幸いです。
参考スペック
PC:デスクトップ、オンボードNIC
OS:Ubuntu18.04
UEFI Secure boot:Enable
NIC:Intel Corporation Ethernet Connection (2) I219-V (rev 31)
事象と対応
1.LANケーブルを指しても、LANコネクタのランプが点かない
事を認識したのはLANケーブルを指しても、なぜかインターネットに繋がらないことを確認した時です。
繋がらないことを確認し、まずifconfigでネットワークを確認しました。
$ ifconfig
※結果の例
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:33:87:b2:e4 txqueuelen 0 (イーサネット)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (ローカルループバック)
RX packets 17486 bytes 1108501 (1.1 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17486 bytes 1108501 (1.1 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
「ん、Ethernetなくね?」と思い、LANケーブルを指しているLANコネクタのランプを確認したところ、なんとランプがついていませんでした。
(使っている機器にもよると思いますが、)LANコネクタには、2つランプがあり、それぞれ「データの送受信」と「リンク(接続できるかどうか)」を表しています。ランプの色や点滅で、データの通信速度や接続の不安定さを表しています。(詳細はお使いPCのマニュアルをご確認ください。)
ランプが消えているということは、接続できていないことを指します。
この時点で調査を始め、
LANコネクタのランプが点かないことは
①ネットワークカードやLANコネクタが壊れた
②使っているLANケーブルが断線している
③PCの設定で点灯していない
etc
あたりが怪しいということを知りました。
②が原因かどうかを確かめるには、別のPCでそのLANケーブルを使えば確かめられます。
①③かどうかは一度PCをシャットダウンし、LANコネクタにランプが点くかどうかで確かめられます。
点いた場合:③
点かなかった場合:①
が考えられます。
私の場合は③でした。
つまり、PCの設定が引っ越し先のネットワークの設定と合っていないため、ランプがついていませんでした。
2.NIC(有線)を認識しない
次に、PCのどの部分が、LANコネクタのランプに関係しているかを調査したところ、こちらの方の記事を見つけ、PCがNICを認識していないと判断しました。
対応方法は記事に書かれている通り、ドライバのダウンロードとビルドを行いました。
手順は、まず自分のNICの種類を確認します。
$ lspci | grep Ethernet
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (2) I219-V (rev 31)
次に、確認したNICのドライバーをダウンロードします。
※私は記事の方と同じI219-Vというもので、
インターネット接続ができている他のPCで
https://downloadcenter.intel.com/download/15817/Intel-Network-Adapter-Driver-for-PCIe-Intel-Gigabit-Ethernet-Network-Connections-Under-Linux-
こちらからドライバーをダウンロードしました。
ダウンロードしたファイルは、USBフラッシュメモリで当該のPCに移動させます。
移動させたのち、解凍し、ビルドを行います。
ココらへんは、こちらの方が書かれた内容と全く同じですので、make installのところまで割愛します。
make install実施後、カーネルモジュールというものを追加します。どうやらNICはカネールのバージョンにあったものを使う必要があるようで、BIOSの設定やドライバーによってはこの時点ではじかれるようです。(参考にした記事の方はSecureBootが有効だとダメだったようです。)
# 設定を破棄
$ sudo modprobe -r e1000e
# 設定を反映
$ sudo modprobe e1000e
#
設定後、反映されているかを確認します。
$ dmesg | grep -i e1000
結果の例
[ 0.822049] e1000e: Intel(R) PRO/1000 Network Driver - 3.8.4-NAPI
[ 0.822050] e1000e: Copyright(c) 1999 - 2020 Intel Corporation.
[ 0.876765] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
[ 1.137908] e1000e 0000:00:1f.6 0000:00:1f.6 (uninitialized): registered PHC clock
[ 1.218033] e1000e 0000:00:1f.6 eth0: (PCI Express:2.5GT/s:Width x1) 9c:5c:8e:d1:2a:5a
[ 1.218035] e1000e 0000:00:1f.6 eth0: Intel(R) PRO/1000 Network Connection
[ 1.218131] e1000e 0000:00:1f.6 eth0: MAC: 12, PHY: 12, PBA No: FFFFFF-0FF
[ 1.219009] e1000e 0000:00:1f.6 enp0s31f6: renamed from eth0
[ 171.990579] e1000e: EEE TX LPI TIMER: 00000011
[ 3047.050934] e1000e 0000:00:1f.6 enp0s31f6: NIC Link is Up 100 Mbps Full Duplex, Flow Control: Rx/Tx
[ 3047.050941] e1000e 0000:00:1f.6 enp0s31f6: 10/100 speed: disabling TSO
この時点でインターネットにつながる方がいるそうですが、私の方はまだEhernetが見つかっていませんでした。なぜ???
なお、このドライバーの設定は再起動すると消えるらしく
$ sudo update-initramfs -u
で再起動後も設定が残ります。
3.Ethernetのインターフェースが見つからない、IPアドレスが割り当てられていない
ドライバーを入れたのに、Ethernetのインターフェースが出てこないので、調査を続けました。
だいぶ試行錯誤が多かったので、ここから、余計な操作が入っているかもしれませんがあしからず。
LANコネクタのランプがついていなかったので、
ifconfigのコマンドのUPというのを使いました。
# 全部出す
$ ifconfig -a
結果の例
enp0s31f6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::9e5c:8eff:fed1:2a5a prefixlen 64 scopeid 0x20<link>
ether 9c:5c:8e:d1:2a:5a txqueuelen 1000 (イーサネット)
RX packets 121642 bytes 136347699 (136.3 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 82639 bytes 30325654 (30.3 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xdf300000-df320000
$ sudo ifconfig <インターフェース名> up
※インターフェース名にはenp0s31f6などが入ります。
$ ifconfig
結果の例
enp0s31f6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::9e5c:8eff:fed1:2a5a prefixlen 64 scopeid 0x20<link>
ether 9c:5c:8e:d1:2a:5a txqueuelen 1000 (イーサネット)
RX packets 121642 bytes 136347699 (136.3 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 82639 bytes 30325654 (30.3 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xdf300000-df320000
これを使うとEthernetの認識をし、LANコネクタのランプも点きました。
次にIPアドレスを割り当てるのですが、今回は使っているネットワークの都合、DHCPを使うことにしました。
DHCPの設定は、Ubuntu17以降からnetplanというもので設定します。(/etc/network/interfacesは使わないようです。)
方法は、/etc/netplan/に99_config.yamlというファイルを作り、そこに設定値を書き込みます。
$ sudo touch /etc/netplan/99_config.yaml
$ sudo vim /etc/netplan/99_config.yaml
書き込む内容
network:
version: 2
renderer: networkd
ethernets:
{インターフェース名}:
dhcp4: true
dhcp6: false
インターフェース名には、↑と同じようにifconfigで出てきたものを使います。
書き込んだあとは、netplanの設定を
$ sudo netplan apply
で反映させます。
すると、なんということでしょう
$ ifconfig
enp0s31f6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.26 netmask 255.255.0.0 broadcast 192.168.255.255
inet6 fe80::9e5c:8eff:fed1:2a5a prefixlen 64 scopeid 0x20<link>
ether 9c:5c:8e:d1:2a:5a txqueuelen 1000 (イーサネット)
RX packets 121642 bytes 136347699 (136.3 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 82639 bytes 30325654 (30.3 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xdf300000-df320000
IPアドレスが割り当てられており、インターネットに接続できました。( ´∀`)
長かった…。
参考
大変。お世話になりました。
Ubuntu 18.04 で NIC(有線)が認識しない
DHCPの設定はこちらを参考にしました。
Netplanの使い方