OSでIPv6を無効化する方法

はじめに

こんばんは。
今回は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

おわりに

いかがだったでしょうか。
カーネルの設定を触るのはシステム上リスクが伴うため慎重に行いたいですね。
それではまたお会いしましょう。
あでゅー!!

参考

Last modified: 2023-12-03

Author