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」で設定を反映しサーバの再起動を行ってください。
コメント
『Ubuntuのバグらしくサーバ再起動後に「/etc/sysctl.conf」の設定を反映してもらえない…』は、私の場合はnetplanがipv6を再有効化したのが原因でした。netplanをお使いならば、その設定で
dhcp6: false
accept-ra: false
link-local: []
とすれば、どうでしょうか?
Yuh Yamashita さん
コメントありがとうございます。
また、返信のほうが大変遅くなってしまい申し訳ありません。
お教えいただいた方法を試してみたところ、問題なくIPv6を無効化することが出来ました。
こちらの方法のほうが、「/etc/init.d/procps」を再起動させるという設定も必要なくなりますし、netplanの設定ファイルにIPv6を無効化しているという情報がまとめられるので良いかもしれませんね。
Ubuntuに関しては、まだまだ分からない事が多いので勉強になりました。
ありがとうございます。