「LANが不安定」の版間の差分
Rin-scrooge (トーク | 投稿記録) |
Rin-scrooge (トーク | 投稿記録) |
||
(同じ利用者による、間の3版が非表示) | |||
7行目: | 7行目: | ||
また、基本サーバー用途なので固定IP前提で話を進めていきます。 | また、基本サーバー用途なので固定IP前提で話を進めていきます。 | ||
− | = netctl編 = | + | == netctl編 == |
− | == netctlの準備 == | + | === netctlの準備 === |
− | === nic名の確認 === | + | ==== nic名の確認 ==== |
以下のコマンドで、nic名を確認します。 | 以下のコマンドで、nic名を確認します。 | ||
<syntaxhighlight lang="bash">ip a</syntaxhighlight> | <syntaxhighlight lang="bash">ip a</syntaxhighlight> | ||
33行目: | 33行目: | ||
これを元にnetctlの設定をしていきます。<br/> | これを元にnetctlの設定をしていきます。<br/> | ||
− | === netctlの設定 === | + | ==== netctlの設定 ==== |
まずは、設定ファイルのサンプルが準備されているので、それをコピーします。 | まずは、設定ファイルのサンプルが準備されているので、それをコピーします。 | ||
<syntaxhighlight lang="bash">cp /etc/netctl/examples/ethernet-static /etc/netctl/enp0s20u4</syntaxhighlight> | <syntaxhighlight lang="bash">cp /etc/netctl/examples/ethernet-static /etc/netctl/enp0s20u4</syntaxhighlight> | ||
88行目: | 88行目: | ||
「IP6」はIPv6を使用していなければ、コメントアウトする必要はありません。 | 「IP6」はIPv6を使用していなければ、コメントアウトする必要はありません。 | ||
− | == netctlの起動 == | + | === netctlの起動 === |
以下のコマンドでNetworkManagerを終了&無効化し、netctlを起動&有効化します。 | 以下のコマンドでNetworkManagerを終了&無効化し、netctlを起動&有効化します。 | ||
<syntaxhighlight lang="bash">systemctl stop NetworkManager | <syntaxhighlight lang="bash">systemctl stop NetworkManager | ||
95行目: | 95行目: | ||
netctl enable enp0s20u4</syntaxhighlight> | netctl enable enp0s20u4</syntaxhighlight> | ||
− | == 遭遇したトラブル == | + | === 遭遇したトラブル === |
− | === 再起動時にnicが検出できていない === | + | ==== 再起動時にnicが検出できていない ==== |
シャットダウン&電源切断で起動すると大丈夫なのに、再起動するとnicが検出されない現象に悩まされました。<br/> | シャットダウン&電源切断で起動すると大丈夫なのに、再起動するとnicが検出されない現象に悩まされました。<br/> | ||
以下のコマンドでログを確認してみました。 | 以下のコマンドでログを確認してみました。 | ||
162行目: | 162行目: | ||
読み込み直したら、netctlの再起動もしくはサーバーの再起動をしてください。 | 読み込み直したら、netctlの再起動もしくはサーバーの再起動をしてください。 | ||
− | = systemd- | + | == systemd-networkd編 == |
もっとシンプルに…systemd-networkdを使用しても安定します。 | もっとシンプルに…systemd-networkdを使用しても安定します。 | ||
− | == systemd-networkdの準備 == | + | === systemd-networkdの準備 === |
− | === nic名の確認 === | + | ==== nic名の確認 ==== |
以下のコマンドで、nic名を確認します。 | 以下のコマンドで、nic名を確認します。 | ||
<syntaxhighlight lang="bash">ip a</syntaxhighlight> | <syntaxhighlight lang="bash">ip a</syntaxhighlight> | ||
189行目: | 189行目: | ||
これを元にsystemd-networkdの設定をしていきます。<br/> | これを元にsystemd-networkdの設定をしていきます。<br/> | ||
− | === systemd-networkdの設定 === | + | ==== systemd-networkdの設定 ==== |
設定ファイルを作成していきます。今回はnic名をファイル名に使用していきます。<br/> | 設定ファイルを作成していきます。今回はnic名をファイル名に使用していきます。<br/> | ||
以下のコマンドで「/etc/systemd/network」ディレクトリに新規ファイルを作成します。 | 以下のコマンドで「/etc/systemd/network」ディレクトリに新規ファイルを作成します。 | ||
210行目: | 210行目: | ||
※ひとまずGoogleを指定していますが、プロバイダ指定のDNSでも、ルーターでもかまいません。 | ※ひとまずGoogleを指定していますが、プロバイダ指定のDNSでも、ルーターでもかまいません。 | ||
− | == systemd-networkdの起動 == | + | === systemd-networkdの起動 === |
以下のコマンドでsystemd-networkdを起動します。 | 以下のコマンドでsystemd-networkdを起動します。 | ||
+ | <syntaxhighlight lang="bash">systemctl start systemd-networkd | ||
+ | systemctl enable systemd-networkd</syntaxhighlight> | ||
− | = 参考サイト = | + | == 参考サイト == |
[https://wiki.archlinux.jp/index.php/Netctl netctl - ArchWiki]<br/> | [https://wiki.archlinux.jp/index.php/Netctl netctl - ArchWiki]<br/> | ||
+ | [https://wiki.archlinux.jp/index.php/Systemd-networkd systemd-networkd - ArchWiki]<br/> | ||
[https://bbs.archlinux.org/viewtopic.php?id=170044 Duplicate Address Detection fails / Networking, Server, and Protection / Arch Linux Forums]<br/> | [https://bbs.archlinux.org/viewtopic.php?id=170044 Duplicate Address Detection fails / Networking, Server, and Protection / Arch Linux Forums]<br/> | ||
2019年9月10日 (火) 14:12時点における最新版
ずっと、ネットワークの不安定に悩まされてきましたが、ひとまず解決を見たような気がするので、ここにまとめておきます。
と言っても…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の再起動もしくはサーバーの再起動をしてください。
systemd-networkd編
もっとシンプルに…systemd-networkdを使用しても安定します。
systemd-networkdの準備
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名になります。
これを元にsystemd-networkdの設定をしていきます。
systemd-networkdの設定
設定ファイルを作成していきます。今回はnic名をファイル名に使用していきます。
以下のコマンドで「/etc/systemd/network」ディレクトリに新規ファイルを作成します。
nano /etc/systemd/network/enp0s20u4.network
ファイルの内容は以下のとおりです。(固定IP前提になっています…)
[Match]
Name=enp0s20u4
[Network]
Address=192.168.11.105/24
Gateway=192.168.11.1
次に「resolv.conf」にDNSを設定します。
以下のコマンドでresolv.confを開きます。
nano /etc/resolv.conf
ファイルの内容は以下の通りにします。
nameserver 8.8.8.8
nameserver 8.8.4.4
※ひとまずGoogleを指定していますが、プロバイダ指定のDNSでも、ルーターでもかまいません。
systemd-networkdの起動
以下のコマンドでsystemd-networkdを起動します。
systemctl start systemd-networkd
systemctl enable systemd-networkd
参考サイト
netctl - ArchWiki
systemd-networkd - ArchWiki
Duplicate Address Detection fails / Networking, Server, and Protection / Arch Linux Forums