LANが不安定
ずっと、ネットワークの不安定に悩まされてきましたが、ひとまず解決を見たような気がするので、ここにまとめておきます。
と言っても…NetworkManagerをやめただけなのですが…。
(詳しい人に聞いたら、「それ一番最初に落とすサービスです!」って言われた…(^_^;))
あまりにも、不安定だったので標準のnic(オンボードのr8152)に戻して設定しています。
(そういう意味で、USB-LANアダプタは未検証です。r8152ではスピードが出ないので後日、検証予定です。)
また、基本サーバー用途なので固定IP前提で話を進めていきます。
netctl編
netctlの準備
nic名の確認
以下のコマンドで、nic名を確認します。
ip a
こんなふうに出力されるかと思います。
(まだNetworkManagerで設定されている前提になっています。ネットワークサービスを起動していない場合はIPが振られていないかと思います。)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s20u4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:e0:4c:36:be:7f brd ff:ff:ff:ff:ff:ff
inet 192.168.56.11/24 brd 192.168.11.255 scope global enp0s20u4
valid_lft forever preferred_lft forever
inet6 xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic mngtmpaddr
valid_lft 86391sec preferred_lft 14391sec
inet6 fe80::2e0:4cff:fe36:be7f/64 scope link
valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 18:bb:26:a9:a1:0e brd ff:ff:ff:ff:ff:ff
「enp0s20u4」がnic名になります。
これを元にnetctlの設定をしていきます。
netctlの設定
まずは、設定ファイルのサンプルが準備されているので、それをコピーします。
cp /etc/netctl/examples/ethernet-static /etc/netctl/enp0s20u4
(私の場合、nic名をnetctlのプロファイル名にも使用しています)
コピーしたら以下のコマンドで、設定を編集していきます。
netctl edit enp0s20u4
修正箇所は以下のとおりです。
【修正前】
1 Description='A basic static ethernet connection'
2 Interface=eth0
3 Connection=ethernet
4 IP=static
5 Address=('192.168.1.23/24' '192.168.1.87/24')
6 #Routes=('192.168.0.0/24 via 192.168.1.2')
7 Gateway='192.168.1.1'
8 DNS=('192.168.1.1')
9
10 ## For IPv6 autoconfiguration
11 #IP6=stateless
12
13 ## For IPv6 static address configuration
14 #IP6=static
15 #Address6=('1234:5678:9abc:def::1/64' '1234:3456::123/96')
16 #Routes6=('abcd::1234')
17 #Gateway6='1234:0:123::abcd'
【修正後】
1 Description='A basic static ethernet connection'
2 Interface=enp0s20u4
3 Connection=ethernet
4 IP=static
5 Address=('192.168.56.11/24')
6 #Routes=('192.168.0.0/24 via 192.168.1.2')
7 Gateway='192.168.56.1'
8 DNS=('192.168.56.1')
9
10 ## For IPv6 autoconfiguration
11 IP6=stateless
12
13 ## For IPv6 static address configuration
14 #IP6=static
15 #Address6=('1234:5678:9abc:def::1/64' '1234:3456::123/96')
16 #Routes6=('abcd::1234')
17 #Gateway6='1234:0:123::abcd'
「Interface」はnic名と同じにします。
「Address」は指定したい固定IPアドレスです。「/24」はサブネットマスクに合わせてください。
「Gateway」と「DNS」は自宅の環境によって変わるかと思いますが、基本ルーターのIPアドレスになります。
「IP6」はIPv6を使用していなければ、コメントアウトする必要はありません。
netctlの起動
以下のコマンドでNetworkManagerを終了&無効化し、netctlを起動&有効化します。
systemctl stop NetworkManager
systemctl disable NetworkManager
netctl start enp0s20u4
netctl enable enp0s20u4
遭遇したトラブル
再起動時にnicが検出できていない
シャットダウン&電源切断で起動すると大丈夫なのに、再起動するとnicが検出されない現象に悩まされました。
以下のコマンドでログを確認してみました。
journalctl -p err..alert
すると以下のメッセージが…
Duplicate Address Detection is taking too long on interface 'enp0s20u4'
調べてみると以下のサイトが見つかりました。
Duplicate Address Detection fails / Networking, Server, and Protection / Arch Linux Forums
どうやら「Duplicate Address Detection(DAD)」はIPv6の機能で、アドレス重複をチェックしているのだそうで…
そいつがタイムアウトしているとのこと…
対策としてはDADのタイムアウトの時間を伸ばせば良いみたいです。
ということで、設定ファイルを再度編集します。
【修正前】
1 Description='A basic static ethernet connection'
2 Interface=enp0s20u4
3 Connection=ethernet
4 IP=static
5 Address=('192.168.56.11/24')
6 #Routes=('192.168.0.0/24 via 192.168.1.2')
7 Gateway='192.168.56.1'
8 DNS=('192.168.56.1')
9
10 ## For IPv6 autoconfiguration
11 IP6=stateless
12
13 ## For IPv6 static address configuration
14 #IP6=static
15 #Address6=('1234:5678:9abc:def::1/64' '1234:3456::123/96')
16 #Routes6=('abcd::1234')
17 #Gateway6='1234:0:123::abcd'
【修正後】
1 Description='A basic static ethernet connection'
2 Interface=enp0s20u4
3 Connection=ethernet
4 IP=static
5 Address=('192.168.56.11/24')
6 #Routes=('192.168.0.0/24 via 192.168.1.2')
7 Gateway='192.168.56.1'
8 DNS=('192.168.56.1')
9
10 ## For IPv6 autoconfiguration
11 IP6=stateless
12 TimeoutDAD=60
13
14 ## For IPv6 static address configuration
15 #IP6=static
16 #Address6=('1234:5678:9abc:def::1/64' '1234:3456::123/96')
17 #Routes6=('abcd::1234')
18 #Gateway6='1234:0:123::abcd'
編集したら以下のコマンドで設定を読み込み直します。
netctl reenable enp0s20u4
読み込み直したら、netctlの再起動もしくはサーバーの再起動をしてください。