この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
はじめに
こんばんは。
今回はos上の設定でipv6を無効化する方法についての覚え書きです。
今回紹介する方法は以下の2つです。
- nmcliを利用してインターフェイスごとにカーネルパラメータで無効化する方法
- grubbyを利用してカーネルコマンドラインで無効化する方法
IPv6を無効化する
1. nmcliを利用する
nmcliを利用してipv6をdisabledにすると、/proc/sysディレクトリ配下の設定ファイルを変更し、カーネルパラメータでipv6を無効に設定することができます。
カーネルパラメータは、システムの実行中に調整できる調整可能な値です。変更を有効にする場合でも、カーネルの再起動や再コンパイルは不要です。
ただし、nmcliでの変更はインターフェイスごとの設定となるため、構築後の運用フェーズ等でインターフェイスを追加するなどの必要が生じた場合は、そのインターフェイスにも同様の設定を行う必要があります。
事前設定の確認
ip add コマンドで確認してみます。ipv6は有効です。
[root@ip-10-0-2-46 ~]# ip add | grep -i inet6
inet6 ::1/128 scope host
inet6 fe80::46a:eff:fead:89c5/64 scope lin
コネクション情報を確認してみます。
[root@ip-10-0-2-46 ~]# nmcli con show
NAME UUID TYPE DEVICE
hogehoge 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0
lo 792850c3-5c9d-41ac-8df9-cf38ed55cabd loopback lo
hogehogeコネクションについて確認してみます。
[ipv6]セクションで
となっています。method=ignore
[root@ip-10-0-2-46 ~]# cat /etc/NetworkManager/system-connections/hogehoge.nmconnection
[connection]
id=hogehoge
uuid=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
type=ethernet
autoconnect-priority=999
interface-name=eth0
timestamp=1701494611
[ethernet]
mac-address=06:6A:0E:AD:89:C5
[ipv4]
method=auto
[ipv6]
method=ignore
[proxy]
カーネルパラメータを確認してみます。
0なのでipv6は無効化されていません。
[root@ip-10-0-2-46 ~]# cat /proc/sys/net/ipv6/conf/eth0/disable_ipv6
0
設定変更
nmcliを使ってignoreからdisabledに変更します。
nmcli connection modify hogehoge ipv6.method "disabled"
ネットワーク接続を再起動させます。
[root@ip-10-0-2-46 ~]# nmcli connection up hogehoge
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
設定変更後の確認
hogehoge(eth0)のipv6情報が消えて、localのみになっています。
[root@ip-10-0-2-46 ~]# ip add | grep -i inet6
inet6 ::1/128 scope host
カーネルパラメータを確認すると、eth0ではipv6が無効化、localでは無効化されていないことが分かります。
この結果は上のip addの出力結果と整合しています。
[root@ip-10-0-2-46 ~]# cat /proc/sys/net/ipv6/conf/eth0/disable_ipv6
1
[root@ip-10-0-2-46 ~]# cat /proc/sys/net/ipv6/conf/lo/disable_ipv6
0
以上がnmcliを使ったIPv6の無効化でした。
2. grubbyを利用する
次にgrubbyを利用したIPv6の無効化を行っていきます。
カーネルコマンドラインを使用すると、ブート時に Red Hat Enterprise Linux カーネルの動作を変更できます。
nmcliでの設定と異なり、システム全体でIPv6を無効化することができます。
事前設定の確認
デフォルトの設定を確認してみます。
# 設定ファイルを直接確認。
[root@ip-10-0-2-46 ~]# cat /etc/default/grub
GRUB_CMDLINE_LINUX="console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295"
GRUB_TIMEOUT=0
GRUB_ENABLE_BLSCFG=true
GRUB_DEFAULT=saved
# grubbyを利用して一応確認
[root@ip-10-0-2-46 ~]# grubby --info=ALL
index=0
kernel="/boot/vmlinuz-5.14.0-284.30.1.el9_2.x86_64"
args="console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M $tuned_params"
root="UUID=016e7284-31f6-4c28-bbb1-98c5b25fcdbf"
initrd="/boot/initramfs-5.14.0-284.30.1.el9_2.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (5.14.0-284.30.1.el9_2.x86_64) 9.2 (Plow)"
id="ffffffffffffffffffffffffffffffff-5.14.0-284.30.1.el9_2.x86_64"
設定変更
設定変更します。
grubby --update-kernel ALL --args ipv6.disable=1
再起動して設定を反映させます。
reboot
設定変更後の確認
変更後の確認をしてみます。
# grubbyを使って確認
[root@ip-10-0-2-46 ~]# grubby --info=ALL
index=0
kernel="/boot/vmlinuz-5.14.0-284.30.1.el9_2.x86_64"
args="console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M $tuned_params ipv6.disable=1"
root="UUID=016e7284-31f6-4c28-bbb1-98c5b25fcdbf"
initrd="/boot/initramfs-5.14.0-284.30.1.el9_2.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (5.14.0-284.30.1.el9_2.x86_64) 9.2 (Plow)"
id="ffffffffffffffffffffffffffffffff-5.14.0-284.30.1.el9_2.x86_64"
# 設定ファイルも見てみる
[root@ip-10-0-2-46 ~]# cat /etc/default/grub
GRUB_CMDLINE_LINUX="console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 ipv6.disable=1"
GRUB_TIMEOUT=0
GRUB_ENABLE_BLSCFG=true
GRUB_DEFAULT=saved
IPv6が全て無効になったことを確認します。
[root@ip-10-0-2-46 ~]# ip add | grep -i inet6
[root@ip-10-0-2-46 ~]#
/proc/sys/ディレクトリ配下からIPv6の設定項目そのものも消えています。
[root@ip-10-0-2-46 ~]# ls -rlt /proc/sys/net
total 0
dr-xr-xr-x. 1 root root 0 Dec 3 00:45 unix
dr-xr-xr-x. 1 root root 0 Dec 3 00:45 ipv4
dr-xr-xr-x. 1 root root 0 Dec 3 00:45 core
dr-xr-xr-x. 1 root root 0 Dec 3 00:45 mptcp
dr-xr-xr-x. 1 root root 0 Dec 3 00:46 netfilter
ということで無事、IPv6が無効化されました。
補足: 切り戻し
切り戻ししてみます。
grubby --update-kernel ALL --remove-args ipv6.disable
reboot
切り戻し後確認
[root@ip-10-0-2-46 ~]# ip add | grep -i inet6
inet6 ::1/128 scope host
inet6 fe80::46a:eff:fead:89c5/64 scope link
# ipv6もある。
[root@ip-10-0-2-46 ~]# ls -rlt /proc/sys/net
total 0
dr-xr-xr-x. 1 root root 0 Dec 3 00:35 unix
dr-xr-xr-x. 1 root root 0 Dec 3 00:35 ipv4
dr-xr-xr-x. 1 root root 0 Dec 3 00:35 core
dr-xr-xr-x. 1 root root 0 Dec 3 00:35 ipv6
dr-xr-xr-x. 1 root root 0 Dec 3 00:35 mptcp
dr-xr-xr-x. 1 root root 0 Dec 3 00:40 netfilter
おわりに
いかがだったでしょうか。
カーネルの設定を触るのはシステム上リスクが伴うため慎重に行いたいですね。
それではまたお会いしましょう。
あでゅー!!
参考
-
RHEL8, ネットワークの設定および管理, 第32章 NetworkManager で特定接続の IPv6 の無効化
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/using-networkmanager-to-disable-ipv6-for-a-specific-connection_configuring-and-managing-networking#doc-wrapper -
How to Disable IPv6 on RHEL using grubby
https://www.2daygeek.com/disable-ipv6-rhel/