「LANの多重化」の版間の差分

提供: とある社畜の頭脳整理
ナビゲーションに移動 検索に移動
70行目: 70行目:
 
「primary」は優先させるNICを指定します。
 
「primary」は優先させるNICを指定します。
  
= サービスの切り替え =
+
= 切り替え =
 
== NetworkManegerの無効化とnetctlの有効化 ==
 
== NetworkManegerの無効化とnetctlの有効化 ==
 
NetworkManegerを無効化して、netctlを有効化します。
 
NetworkManegerを無効化して、netctlを有効化します。
77行目: 77行目:
 
systemctl start netctl
 
systemctl start netctl
 
systemctl enable netctl</syntaxhighlight>
 
systemctl enable netctl</syntaxhighlight>
 +
 +
== netctlの設定の切り替え ==
 +
netctlの動作をbondingに切り替えます
 +
<syntaxhighlight lang="bash">netctl switch-to bonding</syntaxhighlight>
 +
 +
== 念のため再起動 ==
 +
<syntaxhighlight lang="bash">rboot</syntaxhighlight>
  
 
== 動作確認 ==
 
== 動作確認 ==

2019年8月6日 (火) 10:57時点における版

ArchLinuxのカーネルがバージョンアップしてから、またLANが不安定に…。
ちなみに使用しているNICはasixのAX88179チップのやつ…。
ネットで調べても、不安定に悩んでいる人が少ないみたい…。

で色々調べた結果…以下の2点を実現することにしました。

  1. NetworkManagerをやめてnetctlに変更
    ArchLinux独自ということで、ArchLinuxに最適化されていると信じる…。
  2. ネットワークを多重化する
    速度の向上は特に望んでいないので、ウォームスタンバイにして1つのNICが死んでも別のNICで通信を継続するようにする。

※以下の手順はセキュリティ上VirtualBoxで操作した内容になっています。


bondingの準備

ifenslaveのインストール

bondingに必要な「ifenslave」パッケージを、以下のコマンドでインストールします。

pacman -S ifenslave

netctlはデフォルトでインストールされているので、netctlを使用したbondingを実現できるように設定ファイルを作成します。

bondingの設定

先ずは、bondingするNIC名を以下のコマンドで取得します。

ip a

こんなふうに出力されるかと思います。

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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:66:20:41 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::3092:89f5:4be1:eb66/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:59:5c:9a brd ff:ff:ff:ff:ff:ff
    inet 10.0.4.15/24 brd 10.0.4.255 scope global dynamic noprefixroute enp0s9
       valid_lft 80855sec preferred_lft 80855sec
    inet6 fe80::3384:eba2:7991:7635/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

現時点ではNetworkManagerが起動しているので、2つのNICが生きています。
上記の例では「enp0s3」と「enp0s9」が、それぞれのNIC名になります。

次に手順に従って、サンプルファイルをコピーします。

cp /etc/netctl/examples/bonding /etc/netctl

コピーできたら、環境に合わせて内容を編集します。
nanoなどのエディタで「/etc/netctl/bonding」を開きます。
【修正前】

1 Description="A bonded interface"
2 Interface=bond0
3 Connection=bond
4 BindsToInterfaces=(eth0 eth2)
5 IP=static
6 Address="10.0.0.1/8"
7 #Mode=balance-rr

【修正後】

1 Description="A bonded interface"
2 Interface=bond0
3 Connection=bond
4 BindsToInterfaces=(enp0s3 enp0s9)
5 IP=static
6 Address="10.0.2.15/24"
7 IP6=stateless
8 Mode=active-backup
9 primary=enp0s3

「BindsToInterfaces」はbondingの対象にするNIC名を指定します。
「Address」は固定IPv4アドレスを指定します。
「IP6=stateless」はIPv6を有効にして、おまかせしています。
「Mode」は動作させるモードを指定します。指定する内容はこちらを参照してください。
「primary」は優先させるNICを指定します。

切り替え

NetworkManegerの無効化とnetctlの有効化

NetworkManegerを無効化して、netctlを有効化します。

systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl start netctl
systemctl enable netctl

netctlの設定の切り替え

netctlの動作をbondingに切り替えます

netctl switch-to bonding

念のため再起動

rboot

動作確認

参考サイト

netctl - ArchWiki
マスターのnetctl / netctl.profile.5.txt・joukewitteveen / netctl・GitHub
LinuxでのNIC冗長化(bonding)を少し深く考えてみる: sanonosa システム管理コラム集