Posts tagged ‘fix for Linux unable to connect to NW after resume suspend’

結構前に書こうと思ったけど、良く確認してから投稿しようと思い、その後全く問題が起こっていないので確かそうだ。

僕のPCとルータの相性なのかも知れないが、スリープからの復帰後にNWが使えなくなる問題があった。一番最初に使っていたバッファローのルータ(WHR-G301N)では起こらなかったが、次のバッファローの新しいもの(WSR-300HP)では起こったので、ルータの仕様が悪いのかと思って使うのを止めた。

その後、IPv6(IPoE)対応にするためにI/Oデータのルータ(WN-SX300GR)に換えたら また起こったので、これも駄目かと思った。

なので、バッファローには濡れ衣を着せてしまった。申し訳ない。

バッファローの旧と新(I/Oデータも)の違いはGigabit Ethernet対応かどうかなので、その辺りと僕のPCの相性なのかも知れない。

が、通信速度の低下を少しでも減らすためにIPv6は使いたいので、「何とか」した。想像だったのだが、PCのスリープからの復帰をルータが ちゃんと認識していないのが原因ではと思った。それで、ルータのポートからPCのケーブルを「抜き挿し」するのを擬似(電気)的に実現しようと、スリープからの復帰時にNW-IFを一旦落としてから上げるようにした。

少し詳しく書くと、nmcliというコマンドで、(connectionでなく)deviceレベルでNW-IFの機能を停めて(down)から起動(up)させた。

とりあえず問題は解決したので、少し前まで使っていた。ただ、ちゃんとした対処でないし、復帰時に一旦NWが切れるのでちょっと気分が悪かった。IPv6のネゴシエーションは遅いようで、少し(数十秒)時間が掛かるのが嫌だった。

それが、先日のQuad9のDNSサーバが遅い問題に対処した時にNWを いろいろいじっていたら、NW-IFを落とさなくても済む方法、つまり、「ちゃんとした」対処方法が分かった。

まず、スリープからの復帰後にNWが使えなくなる問題の直接の原因は、復帰後に(PC(Linux)の)DNSサーバの情報がなくなってしまう※ためだ。そのため、IPレベル(例: IPアドレス直打ち)ではちゃんと通信できるものの、ホスト名で外部にアクセスしようとしてもIPアドレスが分からないために通信できなくなっていた。

※その原因は分からない。いつもながら不勉強で、この辺りは分からないことが多い。

それで、スリープに入る前にDNSサーバの情報を保存しておき、復帰時に再設定するようにしたら、万事うまく行った。

めでたしめでたし。

この時に思い付いたもう一つの解決法は、NW-IFを一旦落とすのにnmcliのconnectionを操作するものだ。ただ、スリープからの復帰時にconnectionを有効にするのに時間が掛かるのと、DNSだけでなくルーティング情報も保存する必要があり、また、IPv6の一時アドレスがリセットされるので、今ひとつ好みでないので却下した。

 

でも、他の人は特に困っていないようなのが謎だ。やっぱり、相性みたいなものがあるのか?

  •  1
  •  1
Keys: ,