UbuntuでIPv6を無効化する方法

ubuntuでIPv6を無効化する方法です。

IPv6の状態確認

IPv6が有効なのかどうかの確認は、「ip a」コマンドでIPアドレス情報を表示させることで確認することができます。

下記のように「inet6」の項目が表示されていればIPv6が有効となっています。

$ ip a
1: lo:  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: ens33:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:84:c9:8a brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.110/24 brd 192.168.1.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 2400:4053:9222:1900:20c:29ff:fe84:c98a/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 14278sec preferred_lft 12478sec
    inet6 fe80::20c:29ff:fe84:c98a/64 scope link 
       valid_lft forever preferred_lft forever

「ip -6 a」コマンドを実行すると、IPv6に関する情報のみ表示させることもできます。

$ ip -6 a
1: lo:  mtu 65536 state UNKNOWN qlen 1000
    inet6 ::1/128 scope host 
        valid_lft forever preferred_lft forever
2: ens33:  mtu 1500 state UP qlen 1000
    inet6 2400:4053:9222:1900:20c:29ff:fe84:c98a/64 scope global dynamic mngtmpaddr noprefixroute 
        valid_lft 14035sec preferred_lft 12235sec
    inet6 fe80::20c:29ff:fe84:c98a/64 scope link 
        valid_lft forever preferred_lft forever

IPv6の無効化の方法

IPv6を無効化させるには2通りの方法がありますので、それぞれの方法について説明をしていきます。

  • sysctlで設定
  • GRUBで設定

sysctlで設定する方法

「sysctl」を使用してIPv6を無効化する場合、一時的に無効化する方法と、恒久的に無効化する方法の2種類がありますので、それぞれ説明を行っていきます。

一時的にIPv6を無効化

一時的にIPv6を無効化したい場合は「sysctl」コマンドで下記の設定を行います。

この設定は一時的なものなので、サーバを再起動したりするとIPv6が有効な状態にもどります。

$ sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
$ sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
$ sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1

「ip a」コマンドでIPアドレス情報を表示させて、下記のようにinet6の項目が表示されなければIPv6は無効化されています。

$ ip a
1: lo:  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
2: ens33:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:84:c9:8a brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.110/24 brd 192.168.1.255 scope global ens33
       valid_lft forever preferred_lft forever

IPv6を有効化する方法

サーバの再起動を行わずに無効化したIPv6を有効化させる場合は、下記のコマンドを実行してください。

$ sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
$ sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0
$ sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0

恒久的にIPv6を無効化

「/etc/sysctl.conf」にIPv6を無効化する設定を行うことで、恒久的にIPv6を無効化させることができます。

「/etc/sysctl.conf」編集

既存の「/etc/sysctl.conf」ファイルのバックアップを行ってから、IPv6無効化の設定を行っていきます。

$ sudo cp -p /etc/sysctl.conf /etc/sysctl.conf_`date +%Y%m%d-%H%M%S`
$ sudo vi /etc/sysctl.conf
設定内容

下記の設定を追記してください。

net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1

「/etc/rc.local」作成

Ubuntuのバグらしくサーバ再起動後に「/etc/sysctl.conf」の設定を反映してもらえないので、「/etc/rc.local」を作成して「procps」の再起動を行うコマンドを実行させることで設定を反映させるようにする必要があります。

$ sudo vi /etc/rc.local
設定内容

「/etc/init.d/procps」を再起動させるスクリプトを記述します。

#!/bin/bash

/etc/init.d/procps restart

exit 0

すでに「/etc/rc.local」を使用している場合は、「procps」の再起動コマンドを追加してください。

パーミッションの変更

作成した「/etc/rc.local」のパーミッションを「755」に変更してください。

$ sudo chmod 755 /etc/rc.local

設定反映

サーバの再起動を行うことで設定を反映させます。

$ sudo reboot

サーバを再起動後に「ip a」コマンドでIPアドレス情報を表示させて、「inet6」の表示が無いことを確認してください。

サーバの再起動を行わずに設定を反映させたい場合

サーバの再起動を行わずに設定を反映させたい場合は、「sysctl -p」で「/etc/sysctl.conf」の設定を反映させることもできます。

ただし、作成した「/etc/rc.local」の動作確認も行いたいので、後でサーバの再起動を行ってもIPv6が無効化されているかどうかの確認もあわせて行ってください。

$ sudo sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

IPv6の有効化

追加した「/etc/sysctl.conf」の設定を削除してサーバの再起動を実施するとIPv6が有効化されます。

「/etc/rc.local」を新規作成した場合はこちらもの削除しておきましょう。

既存の「/etc/rc.local」に「procps」の再起動設定を追加した場合は、その設定の削除を行ってください。

GRUBで設定する方法

GRUBの設定用ファイルである「/etc/default/grub」の下記項目に、「ipv6.disable=1」の設定を追加します。

  • GRUB_CMDLINE_LINUX_DEFAULT
  • GRUB_CMDLINE_LINUX

/etc/default/grub の編集

「/etc/default/grub」のバックアップを行ってから編集作業を行っていきます。

$ sudo cp -p /etc/default/grub /etc/default/grub_`date +%Y%m%d-%H%M%S`
$ sudo vi /etc/default/grub

編集前

私の環境では初期の設定が下記の通りの設定となっていました。

$ grep CMDLINE_LINUX /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"
GRUB_CMDLINE_LINUX=""

編集後

「GRUB_CMDLINE_LINUX_DEFAULT」と「GRUB_CMDLINE_LINUX」の項目に、「ipv6.disable=1」の設定を下記の通りに追加しました。

$ grep CMDLINE_LINUX /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity ipv6.disable=1"
GRUB_CMDLINE_LINUX="ipv6.disable=1"

設定反映

「/etc/default/grub」ファイルの編集が完了しましたら、「update-grub」コマンドを実行して設定を反映させます。

$ sudo update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.4.0-65-generic
Found initrd image: /boot/initrd.img-5.4.0-65-generic
Found linux image: /boot/vmlinuz-5.4.0-62-generic
Found initrd image: /boot/initrd.img-5.4.0-62-generic
done

サーバ再起動を再起動すると、IPv6を無効化する設定が反映されます。

$ sudo reboot

サーバの再起動が完了後に「ip a」コマンドでIPアドレスの情報を表示させてみて「inet6」の情報が表示されなければIPv6が無効となっています。

$ ip a
1: lo:  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
2: ens33:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:84:c9:8a brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.110/24 brd 192.168.1.255 scope global ens33
       valid_lft forever preferred_lft forever

IPv6を有効化したい場合

「/etc/default/grub」で「GRUB_CMDLINE_LINUX_DEFAULT」と「GRUB_CMDLINE_LINUX」に追加した「ipv6.disable=1」の設定を削除して、「update-grub」で設定を反映しサーバの再起動を行ってください。

コメント

  1. Yuh Yamashita より:

    『Ubuntuのバグらしくサーバ再起動後に「/etc/sysctl.conf」の設定を反映してもらえない…』は、私の場合はnetplanがipv6を再有効化したのが原因でした。netplanをお使いならば、その設定で
    dhcp6: false
    accept-ra: false
    link-local: []
    とすれば、どうでしょうか?

    • tamohiko より:

      Yuh Yamashita さん

      コメントありがとうございます。
      また、返信のほうが大変遅くなってしまい申し訳ありません。

      お教えいただいた方法を試してみたところ、問題なくIPv6を無効化することが出来ました。

      こちらの方法のほうが、「/etc/init.d/procps」を再起動させるという設定も必要なくなりますし、netplanの設定ファイルにIPv6を無効化しているという情報がまとめられるので良いかもしれませんね。

      Ubuntuに関しては、まだまだ分からない事が多いので勉強になりました。
      ありがとうございます。

タイトルとURLをコピーしました