ipv6.methodにおけるdisabledとignoreの違い
基本的に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、grubのipv6.disable=1やipv6.disable_ipv6=1等)。
Linuxのネットワーク設定方法としては、以下のような種類が挙げられます。
- NetworkManager(管理ツール)
- ネットワークデバイス設定の実体(network-script、ifcfg-xxx)
- カーネルパラメタ(/proc/sys/net/xxx、net.xxx)
- カーネル起動時のパラメタ(grub等のブートローダがカーネル起動する際の設定)
上から、管理ツール(ユーザインタフェース)寄りの設定方法、下にいくほどカーネル寄りで内部的な設定方法と言えます。
標準でNetworkManagerを採用するLinuxディストリビューションでは、基本的にNetworkManager経由での設定が推奨されていると思います。
逆に、NetworkManagerを使用するのであれば、network-scriptを直接変更することは避けましょう。
NetworkManagerで調整できない設定については、カーネルパラメタやカーネル起動時のパラメタを使用する必要性があります。
ネットワーク設定に限らず、システムを運用する上で、どの設定方法を優先して使用するか決めておくと、構成管理や作業管理の品質を確保しやすくなります。
"disabled"と"ignore"に関するマニュアル等の記載
ipv6.method
で指定可能な値は、”auto”(デフォルト)、”dhcp”、”disabled”、”ignore”、”link-local”、”manual”、”shared”です。
$ man nm-settings-nmcli
にて、ipv4.method
やipv6.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等
-
カーネル起動時のパラメタとカーネルパラメタの関係(コミュニティ上のやり取り)
When ipv6 is compiled as a module, you can disable it with modprobe or sysctl.
When ipv6 is compiled in-kernel, you can disable it in two ways.
You can disable the ipv6 stack by adding “ipv6.disable=1” to the kernel cmdline.
You can disable the assignment of ipv6 addresses to nics by adding “ipv6.disable_ipv6=1” to the kernel cmdline.
The latter’s the equivalent of creating “/etc/sysctl.d/disable_ipv6.conf” where
# cat /etc/sysctl.d/disable_ipv6.conf
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.eth.disable_ipv6=1
(or you can “echo 1 > /proc/sys/net/ipv6/conf/…/disable_ipv6” at boot)
https://groups.google.com/g/linux.debian.user/c/W8pH70atFFc/m/vbr8nELKAT0J