朝から昼寝

整理しておきたいIT関連の小ネタ

ipv6.methodにおけるdisabledとignoreの違い(NetworkManager、IPv6無効化)

概要

基本的にIPv6対応できるようシステム運用すべきなのですが、事情によりIPv6を無効化しないといけない場合もあります。無効化の方法は多様ですが、その方法の1つとしてNetworkManager経由(nmcli等)による設定が挙げられます。
本記事は、NetworkManager経由でIPv6を無効化する手順や、その際に使用するipv6.methodパラメタにおける"disabled"と"ignore"の違いについてまとめたものです。対象は主にRHEL7、CentOS7以降です。

※システムのIPv6対応は計画的に進めましょう。

本記事の目的

  • LinuxにおけるIPv6の無効化手順の概要を把握する。
  • NetworkManager経由でIPv6を無効化する手順や、その際に使用するipv6.methodパラメタにおける"disabled"と"ignore"の違いを把握する。

基本

NetworkManager経由でIPv6を無効化する手順

nmcliコマンドを使用した手順を記載します。

# nmcli connection mod (device名) ipv6.method disabled  
# nmcli connection up (device名)  
# ip address show (device名)

指定したdeviceに対し、ipv6.methodパラメタの値を"disabled"に変更後、connection upで反映します。
基本的に"disabled"で良いと思われますが、"ignore"との違いについては後述します。
反映後は、ip address show実行時にinet6のアドレスが表示されないことで、そのインタフェースにIPv6アドレスが割り当てられていないことを確認します。

なお、(device名)の部分は、"eth0"や"ens192"等を指定します。
その環境で認識されているdevice名を確認する場合は、# nmcli connection show# nmcli device statusを実行します。

NetworkManager関連のパラメタ設定状況を確認する場合は、# nmcli connection show (device名)です。

ipv6.methodにおける"disabled"と"ignore"の違い

"disabled"の方が、"ignore"より強力な無効化設定です。

  • "disabled"
    そのネットワークデバイスに対するIPv6設定を行いません。さらに、同デバイスに対するカーネルパラメタdisable_ipv6に"1"が設定されるため、そのデバイスIPv6自体を使用不可にします。
    /proc/sys/net/ipv6/conf/(device名)/disable_ipv6(net.ipv6.conf.(device名).disable_ipv6)の値のことです。

  • "ignore"
    そのネットワークデバイスに対するIPv6設定を行いません。カーネルパラメタは変更されないので、NetworkManager以外の方法でネットワークデバイスに対するIPv6設定をすることは可能です。
    内部的にIPv6スタックは有効な状態のままという意味です。

よって、「そのネットワークデバイスIPv6が動作しないようにしたい」という意味では、"disabled"が安心です。

詳細

(一般的な話)ネットワーク設定方法の選び方

IPv6の無効化手順として、本記事ではNetworkManagerを使用した方法を記載していますが、他にも色々な方法があります。
より根本的に無効化したい場合は、カーネルパラメタやgrubの設定といった方法が考えられます(カーネルパラメタのnet.ipv6.conf.all.disable_ipv6 = 1やnet.ipv6.conf.default.disable_ipv6 = 1、grubipv6.disable=1やipv6.disable_ipv6=1等)。

Linuxのネットワーク設定方法としては、以下のような種類が挙げられます。

上から、管理ツール(ユーザインタフェース)寄りの設定方法、下にいくほどカーネル寄りで内部的な設定方法と言えます。

標準でNetworkManagerを採用するLinuxディストリビューションでは、基本的にNetworkManager経由での設定が推奨されていると思います。
逆に、NetworkManagerを使用するのであれば、network-scriptを直接変更することは避けましょう。
NetworkManagerで調整できない設定については、カーネルパラメタやカーネル起動時のパラメタを使用する必要性があります。

ネットワーク設定に限らず、システムを運用する上で、どの設定方法を優先して使用するか決めておくと、構成管理や作業管理の品質を確保しやすくなります。

"disabled"と"ignore"に関するマニュアル等の記載

ipv6.methodで指定可能な値は、"auto"(デフォルト)、"dhcp"、"disabled"、"ignore"、"link-local"、"manual"、"shared"です。

$ man nm-settings-nmcliにて、ipv4.methodipv6.methodに指定可能な値についての記載があります。

method IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support "disabled", "auto", "manual", and "link-local". See the subclass-specific documentation for other values. … https://developer-old.gnome.org/NetworkManager/stable/nm-settings-nmcli.html#nm-settings-nmcli.property.ipv4.method

"disabled"は明記されていますが、"ignore"については記載されていないので、別ドキュメントを参照する必要性がありそうです("See the subclass-specific documentation for other values.")。

うまくドキュメントを辿れなかったのですが、おそらくnm-setting-ip6-config.hにある以下の説明が該当しそうです。

/* * NM_SETTING_IP6_CONFIG_METHOD_IGNORE: * * IPv6 is not required or is handled by some other mechanism, and NetworkManager * should not configure IPv6 for this connection. / https://github.com/heftig/NetworkManager/blob/master/libnm-util/nm-setting-ip6-config.h

"ignore"は、IPv6が不要であるか、他の機能によって制御される場合を想定した値のようです。

ipv6.methodを変更した際のカーネルパラメタの変化

ipv6.methodを変更した際のカーネルパラメタの変化を確認してみます(network-scriptの方への影響は確認していません)。

  • ipv6.methodが"auto"の場合(デフォルト)
# cat /proc/sys/net/ipv6/conf/ens192/disable_ipv6
0
  • ipv6.methodが"disabled"の場合
# nmcli connection modify ens192 ipv6.method disabled
# nmcli connection up ens192
# cat /proc/sys/net/ipv6/conf/ens192/disable_ipv6
1
  • ipv6.methodが"ignore"の場合
(いったんautoに戻してから確認)
# nmcli connection modify ens192 ipv6.method auto
# nmcli connection up ens192
# cat /proc/sys/net/ipv6/conf/ens192/disable_ipv6
0

# nmcli connection modify ens192 ipv6.method ignore
# nmcli connection up ens192
# cat /proc/sys/net/ipv6/conf/ens192/disable_ipv6
0
  • (参考)ipv6.methodの値を変更しても、全デバイスを対象(all)としたnet.ipv6.conf.all.disable_ipv6の値は影響を受けない
# cat /proc/sys/net/ipv6/conf/all/disable_ipv6
0

参考URL等