Edited at

Linuxで「しばらくしたらネットに繋がらなくなる」を解決する

More than 1 year has passed since last update.

Linuxを使っていて、最初のうちは普通に使えるのに、しばらくするとインターネットに繋がらなく(名前解決ができなく)なるという状態に陥ったので、対策のメモ。

環境


  • OS : Arch Linux

  • ISP : So-net 光コラボレーション(NTT東日本)

  • NIC : Intel Ethernet Connection I218-V

  • ネットワーク接続デーモン : systemd-networkd, systemd-resolved


名前解決ができない

ネットワークに接続してしばらくすると、突然名前解決ができなくなる。

$ ping google.com

ping: google.com: Name or service not known.

でも、以下のアドレスにpingするとちゃんと帰ってくる。

$ ping flets-east.jp

もしかして、フレッツや光コラボレーションなどの回線を使っていませんか?


NGNの"グローバルなローカルIPv6"の悪夢

この問題はNTT局内だけで有効なIPv6アドレス及びDNSサーバーが割り当てられてしまっているせいで起きる。

なぜこんな変なことになっているのかということはここなどを参照していただくとして、とりあええずやるべきは何とかしてIPv6で名前解決を試みないようにすること。


IPv6の優先度を下げる

結論から言えば自分の環境でこれは無意味だった。もしかするとsystemd-networkd並びにsystemd-resolvedを用いてる環境では無意味なのかもしれない。

以下のファイルを編集して、IPv6の優先度を下げる。


/etc/gai.conf

~省略~

#
# For sites which prefer IPv4 connections change the last line to
#
precedence ::ffff:0:0/96 100 # ←ここの先頭のコメントアウトを外す
~省略~

これでIPv4が優先されるようになる、とのことだったけれど、前述の通り自分の環境では意味をなさなかった。


NICに対してIPv6を無効化する

とは言えカーネルのIPv6スタックそのものを無効化してしまうのはさすがにやりすぎなので、NICに対してIPv6を無効化する設定をする。


/etc/sysctl.d/40-ipv6.conf

# Disable IPv6 for Main Ethernet

net.ipv6.conf.<NICのデバイスノード>.disable_ipv6 = 1

あとは再起動。自分の環境ではこれでなんとかなった。


そろそろIPoEへの対応を義務付けてほしい

壊れたIPv6のせいでとても面倒くさいことになるので、そろそろフレッツ回線網を使用しているプロバイダには、IPoE IPv6への対応を義務付けてほしい...


参考