見出し画像

[F660A] NURO光G2Tで遅さを感じた方、IPv6で接続できていますか?

私の場合、同一型番の機種だと改善せず他機種へ交換となりました。機器を受け取ったり返却したりを何回か繰り返すため、少し時間がかかりましたが、心当たりがある場合は、まずサポートへ連絡してみてください。
また、今すぐ参考にされたい方は どうして分かった? のセクションのみご覧ください。

ひょんなことからIPv6で接続できたりできなかったりすることに気づいて自分なりに調査をしてみたので、備忘録として残しておきます。

この記事の対象者

誤操作等によりさらに問題が大きくなったとしても復帰ができる方がお試しください。当方では一切責任を負いません。

  • 貸与されているONUがZTE社のF660A

  • ONUへのログイン・初期化をしても原状復帰できる

  • 診断をする中で、携帯回線に接続していないことを確認できる


おかしいと思ったら、FAQを確認しましょう

ネットワーク障害は偶然の産物ではありません。 何らかの連鎖的な出来事の結果です。 障害はなぜ起きてしまったのか。その答えは、その、ネットワーク経路の中に隠されています。

ということで、NURO光のFAQにはどこを確認すればよいか書いてありますので、参照してみてください。


使用している端末はIPv6で接続できているか?

IPv6アドレス対応について | So-net より、現在どちらで接続できているかを判断することができます。

お客さまはIPv4ネットワーク環境よりこのページをご覧になっております。 (https://www.so-net.ne.jp/common/IPv6/)
お客さまはIPv6ネットワーク環境よりこのページをご覧になっております。 (https://www.so-net.ne.jp/common/IPv6/)

上記のようにIPv4と表示されたからと言って、この記事でいうONUが悪いとは限りません。端末の設定によって、IPv4が優先されたりIPv6が無効化されていたりするケースがあるからです。
この記事では端末の設定に起因する接続不具合は取り扱いませんのでご承知おきください。


環境の前提条件

  • 5GHz帯のWi-Fiに接続できている

  • 診断をする中で、携帯回線を経由して接続していないことを確認

  • PowerShellスクリプトを実行できる・読める [オプション]

  • この記事で確認したONUはZTE社のF660Aで下記の環境でした

    • ソフトウェアのバージョン: V1.0.10P12N8

    • 接続名: omci4_dhcp

Androidスマートフォンで確認した現象

これらの現象が宅内のWi-Fiだと遅く、携帯回線 (4G, 5G) や宅外のWi-Fiではサクサク読み込まれる。これら以外のアプリやWebサイトでは、特段遅いと感じることはなかった。

  • Amazonショッピングアプリで商品などのサムネイルの読み込みに30秒以上かかることがある

  • Amazon Musicアプリでサムネイルの読み込みに30秒以上かかることがある

  • 少年ジャンプ+アプリの起動時にスプラッシュスクリーンが30秒以上表示されることがある、マイページに画面遷移後ポイントの表示に時間がかかり、更に本棚が遅れて表示されることがある

  • マガポケアプリの起動時に読み込み中の円が回りっぱなし、サムネイルの読み込みに時間がかかることがある

  • マクドナルドアプリの起動に20-30秒ほどかかることがある

なおかつ、これらの症状はONUを再起動した直後は安定していた。

どうして分かった?

ONUの管理画面で"IPv6ゲートウェイ"の値が"::"となっていたことに気づいた。

F660A管理画面の ステータス>>ネットワークインタフェース情報>>WAN接続情報。
一部固有の情報を含むため伏字にしている。

起動直後の値は "fe80::1"となっていたのだ。
ログを見ると、ip -6 route delete default via fe80::1 dev nbif1 とあるので、間違いないだろう。また、ONU起動から1800秒 (30分) 経過したころだと思われる。

ログのサンプル

暫定処置

以前はONU本体でIPv6を無効にする方法を掲載していましたが、不安定さを感じたことと検証している時間がなかった取り下げます。

<ここから先は実際に検証されたい方がお読みください>

具体的な診断手順と結果のサンプル

現象が発生したタイミングがわかったので、あとはpingを打ってみるだけです。

  • DNSサーバー (ドメイン名以外はONUに記載があります)

    • wdns1.nuro.jp

    • 152.165.245.1

    • 240d:12:4:1b00:152:165:245:1

  • So-net Webサイト (外部のIPv6で接続できるサーバーならどこでもよい)

    • www.so-net.ne.jp

    • 210.139.252.142

    • 2001:3b8:207:2e::f2:142

上記ホスト名・IPアドレスは記事公開時点のものであり、将来変更されたとしてもこのページは更新されることはないでしょう。

ONUにてpingコマンドを使用した診断

"発信インターフェイス"を指定できるため、その変化も見ていきます。

  • "LAN" (LAN側インターフェイス)

  • 接続の構成が記述されている"omci4_dhcp" (本記事ではWAN側インターフェイスとします)

使い方

  1. ONUにログイン

  2. 管理>>診断メンテナンス>>ping診断 を開く

  3. 上記サーバーにpingを打つ

ログのサンプル

ログの考察

ログを見て言えるのは、WAN側インターフェイスだとpingの応答があるものの、LAN側インターフェイスからは応答がないということでした。

Windows PCにてpingコマンドを使用した診断 [オプション]

ONUですでに診断できていますが、PCからもやってみます。

診断用のプログラムを持ち合わせていなかったため、突貫で作成したサンプルを置いておきます。

スクリプト

PowerShellを使用するならTest-Connectionなどのコマンドレットを使用するべきなんでしょうが、手抜きですみません。

$WaitSeconds = 1800 - 200 # ← 200 を現在の接続時間に置き換える
$PingCounts = 30 # 30回pingを打つ
$LogDirectoryPath = Join-Path $env:UserProfile "Test-NuroIpv6.Logs" # %UserProfile%\Test-NuroIpv6.Logs フォルダーに保存される

$WaitSeconds = $WaitSeconds - 10 # 指定された10秒前から実行する
#$WaitSeconds = $WaitSeconds - [int]($PingCounts / 2) # ping 回数の半分、正常な時間から記録する

Class PingTargetAddress{
    $Address
    $FileName
    $IsHostName
    
    PingTargetAddress($Address, $FileName){
        $this.Address = $Address
        $this.FileName = $FileName
    }
    PingTargetAddress($Address, $FileName, $IsHostName){
        $this.Address = $Address
        $this.FileName = $FileName
        $this.IsHostName = $IsHostName
    }
}

$Addresses = @()
$Addresses += New-Object PingTargetAddress("192.168.0.1","IPv4--Router")
$Addresses += New-Object PingTargetAddress("fe80::1","IPv6--Router")

$Addresses += New-Object PingTargetAddress("wdns1.nuro.jp","wdns1.nuro.jp", $True)
$Addresses += New-Object PingTargetAddress("152.165.245.1","IPv4--wdns1.nuro.jp")
$Addresses += New-Object PingTargetAddress("240d:12:4:1b00:152:165:245:1","IPv6--wdns1.nuro.jp")

$Addresses += New-Object PingTargetAddress("www.so-net.ne.jp","www.so-net.ne.jp", $True)
$Addresses += New-Object PingTargetAddress("210.139.252.142","IPv4--www.so-net.ne.jp")
$Addresses += New-Object PingTargetAddress("2001:3b8:207:2e::f2:142","IPv6--www.so-net.ne.jp")

#$Addresses += New-Object Addresses("","IPv4--")
#$Addresses += New-Object Addresses("","IPv6--")

New-Item $LogDirectoryPath -ItemType Directory -Force | Out-Null

Function Start-SleepWithWriteProgress{
    Param (
        [parameter(mandatory)]
        [Int]$Seconds
    )
    $StartDate = Get-Date
    $FinishDate = (Get-Date).AddSeconds($Seconds)
    $FinishDateTotalSeconds = ($FinishDate - (Get-Date)).TotalSeconds

    While((Get-Date) -le $FinishDate){
        $Percent = 100 - [int]($FinishDate - (Get-Date)).TotalSeconds / $FinishDateTotalSeconds * 100
        #Write-Progress -Activity "待機しています" -Status "残り $([int]($FinishDate - (Get-Date)).TotalSeconds) 秒" -PercentComplete $Percent
        Write-Progress -Activity "待機しています" -Status "残り $([int]($FinishDate - (Get-Date)).TotalSeconds) 秒 (現在のオンライン時間が $([int](1800 - ($FinishDate - (Get-Date)).TotalSeconds - $PingCounts)) ~ $([int](1800 - ($FinishDate - (Get-Date)).TotalSeconds)) 秒の間であることを確認)" -PercentComplete $Percent
        Start-Sleep -Seconds 1
    }
}

Start-SleepWithWriteProgress -Seconds $WaitSeconds

$Addresses | ForEach-Object {
    If ($_.IsHostName){
        cmd /c start "" cmd "/c title $($_.Address) - $($_.FileName) & pushd ""$LogDirectoryPath"" & echo # %date% %time%  nslookup $($_.Address) >> ""$($_.FileName).log"" & echo. >> ""$($_.FileName).log"" & nslookup $($_.Address) >> ""$($_.FileName).log"" & echo. >> ""$($_.FileName).log"" & echo # %date% %time%  ping $($_.Address) -n $PingCounts >> ""$($_.FileName).log"" & echo. >> ""$($_.FileName).log"" & ping $($_.Address) -n $PingCounts >> ""$($_.FileName).log"" & echo. >> ""$($_.FileName).log"" & echo # %date% %time%   nslookup $($_.Address) >> ""$($_.FileName).log"" & echo. >> ""$($_.FileName).log"" & nslookup $($_.Address) >> ""$($_.FileName).log"" & echo. >> ""$($_.FileName).log"" & echo # %date% %time% >> ""$($_.FileName).log"""
    }
    Else{
        cmd /c start "" cmd "/c title $($_.Address) - $($_.FileName) & pushd ""$LogDirectoryPath"" & echo # %date% %time%  ping $($_.Address) -n $PingCounts >> ""$($_.FileName).log"" & echo. >> ""$($_.FileName).log"" & ping $($_.Address) -n $PingCounts >> ""$($_.FileName).log"" & echo. >> ""$($_.FileName).log"" & echo # %date% %time% >> ""$($_.FileName).log"""
    }
}

explorer "/n,""$LogDirectoryPath"""

最後の cmd では何をやっている? (解説)

やっていることは、並列でpingを実行したかったため、cmd に一回投げてか改めて cmd でコマンドを実行しています。
コマンドの内容は以下の通りです。


title $($_.Address) - $($_.FileName)
pushd ""$LogDirectoryPath""
echo # %date% %time%  nslookup $($_.Address) >> ""$($_.FileName).log""
echo. >> ""$($_.FileName).log""
nslookup $($_.Address) >> ""$($_.FileName).log""
echo. >> ""$($_.FileName).log""
echo # %date% %time%  ping $($_.Address) -n $PingCounts >> ""$($_.FileName).log""
echo. >> ""$($_.FileName).log""
ping $($_.Address) -n $PingCounts >> ""$($_.FileName).log""
echo. >> ""$($_.FileName).log""
echo # %date% %time%   nslookup $($_.Address) >> ""$($_.FileName).log""
echo. >> ""$($_.FileName).log""
nslookup $($_.Address) >> ""$($_.FileName).log""
echo. >> ""$($_.FileName).log""
echo # %date% %time% >> ""$($_.FileName).log"""

使い方

また、私は本記事のスクリプトを実施した際に発生したいかなる損害に関する責任を負いません。

  1. PowerShellを起動しておく

  2. メモ帳などテキストエディタに上記のスクリプトをコピーする ("解説"は無視してください)

  3. ONUにログインする

  4. ステータス>>ネットワークインタフェース情報>>WAN接続情報 の "IPv6のオンライン時間" を確認する

  5. 先ほどコピーしたテキストエディタを開き、1行目の 1800 - 200 の 200 の箇所を"IPv6のオンライン時間"の時間に変更する
    (コピペしている間に刻一刻と進んでいるため、余裕をもった秒数にしておく)

  6. テキストエディタのスクリプトをすべてコピーする

  7. 先ほど起動したPowerShellのコンソールに貼り付ける。
    ▲出所が不明なPowerShellのスクリプトをコピペで貼り付けてはいけません。スクリプトの内容を精査し、問題が無いと判断できる方のみが実施してください。

  8. 待機中画面が表示される。オンライン時間の間になっていることを確認する。(ギリギリの場合は逃すかもしれないので、前後に5秒くらいは余裕がほしい)

  9. 時間になるとコマンドプロンプトが ping を打つ分だけ表示される。

  10. フォルダーが開くので、コマンドプロンプト終了後にログが保存されていることを確認する。

スクリプトの待機中画面

ログのサンプル

ログの考察

ログを見て言えるのは、ONU起動から1800秒経過後にIPv6のping応答がなくなるということでした。

この記事が気に入ったらサポートをしてみませんか?