rabbit51

it's since Nov.30 2005
May.29 2014, transferred from broach

ひかり電話 HGW PR-600MI のハングアップと勝手に再起動する不具合について#2

2022-05-11 13:00:00 | ひかり電話
ひかり電話 HGW PR-600MI のハングアップと勝手に再起動する不具合について」メモした。「ひかり電話 HGW PR-600MI DHCPv6-PDに複数Prefixを要求してみた」を行うと、不具合が発生しやすい。PR-600MIの不具合が発生すると、DHCPv6サーバー機能が停止する。IPv6セキュリティログの記録が停止する。その他の機能がどうなるか確認してみた。


(1)PR-600MIの詳細な状態
PR-600MI(01.00.0007)
ひかり電話機能(IPv4)正常
IPv4通信(ルーティング) 正常(SIP通信で確認)
DHCPv4サーバー 正常
DNS(IPv4) 正常
ISP接続 未使用のため不明
IPv6通信(ルーティング) 正常
IPv6 RA(LAN側) 正常
DHCPv6 停止
DNS(IPv6) 正常
IPv6パケットフィルタ 正常
IPv6セキュリティログ 停止
IPv6セキュリティログ記録が停止しているためIPv6パケットフィルタとSPIが正常に機能しているかログで確認出来ない。インターネットからpingとtcpアクセスで確認した結果、設定通りに動作しているようだ。LAN側のRA+SLAAC端末は、正常に動作する。RAのパラメータ値は、DHCPv6稼動時と同じ
PR-600MI RA@LAN
o_flag=1, prf=00
Router lifetime=5400
Reachable time=30000
Retransmission timer=1000
Prefix=2409:10:XXXX:YY00::/64
Onlink=1, Autoconfig=1
Valid lifetime=14400
Preferred lifetime=12600
o_flag=1なのでRAを受けた端末は、DHCPv6のInformationメッセージでDNS等の情報を取得しようとする。DHCPv6が停止しているためDNS情報を得ることが出来ない。
Debian10などは、DHCPv6 DUIDの問題でInformationメッセージ応答を受けられない場合がある。「ひかり電話HGW PR-600MI LANに接続したDebian10のDHCPv6 Informationに応答しない」の対策が必要。Windows10, macOSなどは、DUIDにLLTを使うためInformation応答を受けられる。

DHCPv6-PDのprefix情報
DHCPv6-PD関連
T1=6300
T2=10800
Preferred lifetime=12600
Valid lifetime=14400
DHCPv6は、T1秒間隔でrenewを行う。renew応答が無いため(T2-T1)秒後にrebindを行う。応答が無いため、(Valid lifetime-T1)秒後にPrefix Delegationを無効にする。Prefix Delegationしたルータ宛のルートテーブルも削除される。「情報」「DHCPv6サーバ払い出し状況」の該当する「IPv6プレフィックス」の「リース時間」がValid lifetime。この時間を過ぎるとこのPrefixに関するルートテーブルが消失しパケット通信が適切に出来なくなる。
Prefix Delegationされていたルータは、配下のネットワークにRA(Preferred lifetime=0/Valid lifetime=0)でprefixの無効を通知する。通知を受けた端末は、端末インターフェースのValid lifetime=14400をカウントダウンしValid lifetime=0でIPv6アドレスを廃棄する。この期間、IPv6アドレスが有効なのに通信が出来ない状態となる。IPv6通信が失敗したり、IPv4通信切替えに時間がかかり反応が鈍くなる。DNSでAAAA(IPv6)名前解決を止めるかIPv4名前解決だけのDNS(ぷららIPv4 PPPoEで通知されるDNSなど)に切り替えるのが良いかも。

(2)DHCPv6-PDを受けるNVR510/500
NVR510/500は、PR-600MIのLAN側にWAN(LAN2)で接続し、DHCPv6-PDでPrefixの委譲を受けている。LAN2アドレスは、RAからSLAAC(Modified EUI-64)で設定。 委譲されたPrefixは、LAN(LAN1)側にo_flag=1でRA。LAN1アドレスは、委譲されたprefixで「::1/64」。
NVR510/500 config
ipv6 routing on
ipv6 route default gateway dhcp lan2 #NVR500簡単設定のIPv6 IPoE設定で挿入される
ipv6 route 2409:10:XXXX:YY10::/60 gateway fe80::ae44:f2ff:feAA:BBCC%2  # for NVR500
ipv6 route 2409:10:XXXX:YY20::/60 gateway fe80::21d:73ff:fe34:4556%2
ipv6 route 2409:10:XXXX:YY30::/60 gateway fe80::c225:e9ff:fe34:5123%2
ipv6 route 2409:10:XXXX:YY40::/60 gateway fe80::c225:e9ff:feAA:BBDD%2  # for NVR510
ipv6 prefix 1 dhcp-prefix@lan2::/64 #2409:10:XXXX:YY10::/64
ipv6 prefix 2 dhcp-prefix@lan2::1:0:0:0:1/64 #2409:10:XXXX:YY11::/64
ipv6 lan1 address dhcp-prefix@lan2::1/64
ipv6 lan1 rtadv send 1 o_flag=on
ipv6 lan1 dhcp service server
ipv6 lan2 address auto
ipv6 lan2 dhcp service client
#名前解決用DNS設定
dns service fallback on
dns server select 500000 dhcp lan2 any .  #NVR500簡単設定のIPv6 IPoE設定で挿入される
dns server select 500001 pp 1 any . restrict pp 1  #NVR500簡単設定のIPv4 PPPoE設定で挿入される
#自ドメイン(familynameドメイン)のDNSサーバー設定
dns domain familyname
dns private address spoof on
dns private name ns.familyname
ip host nvr500.familyname 192.168.5.1
ip host nvr500-lan2.familyname 192.168.1.50
ip host nvr510.familyname 192.168.11.250
ip host nvr510-lan2.familyname 192.168.1.51
dns static aaaa nvr500.familyname 2409:10:XXXX:YY40::1
dns static aaaa nvr500-lan2.familyname 2409:10:XXXX:YY00:2a0:deff:feAA:BBDD
dns static aaaa nvr510.familyname 2409:10:XXXX:YY10::11:250
dns static aaaa nvr510-lan2.familyname 2409:10:XXXX:YY00:ae44:f2ff:feAA:BBCC
dns server select 500000, 500001は、NVR500簡単設定でIPv6 IPoEとIPv4 PPPoE設定で挿入されたコマンド(「ヤマハNVR500の簡単設定でひかり電話とぷららIPv4 PPPoEとIPv6 PPPoEの同時接続設定」)。

PR-600MIのDHCPv6サーバー機能停止時の挙動
DHCPv6 renewに応答しなくなるため、valid lifetime後に取得したprefixが無効になる。LAN1アドレスが消失する。LAN1に関連したIPv6 routeテーブル情報が消失する。DHCPv6で得たDNS情報も無効になる。LAN1のリンクローカルアドレスからpreferred lifetime=0, valid lifetime=0のRAを広告する。NVR500簡単設定のIPv6 IPoE設定で IPv6デフォルトゲートウェイがDHCPv6情報でstatic設定されている
ipv6 route default gateway dhcp lan2
このゲートウェイアドレスが消失するためIPv6通信が出来なくなる。static設定なのでroute情報が残っている。
# show ipv6 route detail
Destination                         Gateway                                       Interface        Type
default                                -                                                    LAN2(DHCP)  static
default                                 fe80::2ae9:8eff:fe12:3457         LAN2              RA
2409:10:XXXX:YY00::/64   -                                                LAN2              implicit
2409:10:XXXX:YY10::/60   fe80::ae44:f2ff:feAA:BBCC         LAN2              static
2409:10:XXXX:YY20::/60  fe80::21d:73ff:fe34:4556            LAN2              static
2409:10:XXXX:YY30::/60  fe80::c225:e9ff:fe34:5123           LAN2              static
metricを変更してdefault gatewayのpriorityをRAのpriorityより下げてくれれば、RA情報からのdefault gatewayが有効になるのだが。
no ipv6 route default gateway dhcp lan2
としてstatic設定を削除しRAのdefault gateway設定に任せる事にした。これでPR-600MIのDHCPv6が機能停止してもIPv6通信が確保される。簡単設定のIPv6 IPoE設定を変更すると書き換えられると思われる(未確認)。

DHCPv6停止によりDNSの名前解決が出来なくなった。
dns server select 500000 dhcp lan2 any . 
dns server select 500001 pp 1 any . restrict pp 1 
「dns server」の各コマンドは、「dns server select」が最初に評価され、「dns server」「dns server pp」「dns server dhcp」と続く。「dns server select」のtype/query条件にマッチするとdns応答が有っても無くても以降のdns serverによる検索が行われない。NVR500簡単設定のIPv6 IPoEで挿入された「dns server select 500000」は、すべての検索条件に一致するため、DHCPv6で得たDNSアドレスが無効になり問い合わせがタイムアウトする。結果、DNSによる名前解決が出来なくなる。「dns server select 500000」設定を削除すると「dns server select 500001」(pp 1は常時接続)が使用される。ぷららのIPv4 PPPoE接続(pp 1)で得られるDNSサーバーは、type「a」しか応答しないIPv4専用DNSとなる。PR-600MIのアドレスを直接指定して設定する事にした。「ヤマハ NVR510/NVR500 Recursive DNS設定用メモ」に確認結果を記載しておく。
dns server select 1000 2409:10:XXXX:YY00:2ae9:8eff:fe12:3457 192.168.1.1 any . 
これで、PR-600MIのDHCPv6が機能停止してもDNSに問合せする。NVR510/500からのIPv6通信がインターネットを含めて確保される。
NVR510/500配下のネットワークに接続された端末は、RAされていたGlobal prefixがvalid lifetime後に無効となりリンクローカルアドレスだけになる。この期間にDNS名前解決でIPv6アドレスが返されると端末側はIPv6アドレスが有効だがゲートウェイは、IPv6アドレスが無効状態となる。IPv4にフォールバックされないと通信に失敗する。
NVR510上でprefix@lan2が無効になったら「dns service aaaa filter on」にするのが良さそう(NVR500は、「dns server select 500001」が有効になるようにする)。prefix@lan2が無効になった事を検出するコマンドが見つからない。LUAで対応してみた。
ckIPv6Address.lua
--[[ May.3 '2022 Rabbit51
 ckIPv6Address.lua
 schedule at #id# startup * sd1:/lua/ckIPv6Address.lua ]]
mail_table = {
	smtp_address = "secure.plala.or.jp",
	smtps = true,
	smtp_port = 465,
	smtp_auth_name = "someone@somewhere.plala.or.jp",
	smtp_auth_password = "MAIL-ACCESS-JYUMON",
	smtp_auth_protocol = "cram-md5",
	from = "someone@somewhere.plala.or.jp",
	to = "someone@somewhere.plala.or.jp",
	subject = "PR-600MI DHCPv6-PD down"
}
dnscmd = "dns service aaaa filter on"
if string.match(_RT_FIRM_REVISION,"(NVR%d+)") == "NVR500" then
    mail_table.smtp_port = 587
    dnscmd = "dns server select 100 pp 1 any ."
end
adrflag = true
while true do
rtn,str = rt.command("show ipv6 address lan1")
    if rtn ~= nil then
        adr = string.match(str, "global%s+([0-9a-zA-Z:/]+)")
        if adr == nil then
            if adrflag == true then
                rtn,str = rt.command(dnscmd)
                rt.command("clear dns cache")
                rt.syslog("info","PR-600MI DHCPv6-PD is down. switching to IPv4 DNS")
                mail_table.subject = "PR-600MI-PD DHCPv6-PD down"
                mail_table.text = "switching to IPv4 DNS"
                rt.mail(mail_table)
                adrflag = false
            end
        else
            if adrflag == false then
                rtn,str = rt.command("no " .. dnscmd)
                rt.syslog("info","PR-600MI DHCPv6-PD is up. switching to IPv6/IPv4 DNS")
                mail_table.subject = "PR-600MI-PD DHCPv6-PD up"
                mail_table.text = "switching to IPv6/IPv4 DNS"
                rt.mail(mail_table)
                adrflag = true
            end
        end
    end
    rt.sleep(60)
end
1分毎にLAN1のIPv6 Globalアドレスを確認し、消失したらDNSの設定変更を行う。同時にメールで通知する。IPv4だけ応答するDNSに切り替えたときは、DNSのキャッシュを削除する。ぷららのメールサーバーは、smtp w/ SSL(ポート465)に対応しているがrt.mail()と相性が良くないのか接続できない。startTLS(ポート587)は、rt.mail()が対応していないのでsmtps=trueの効果が無い。「ヤマハ NVR510/500 LUA rt.mail() apiとぷららメールサーバー」で詳細を確認した。結果、NVR500でsmtpsが未サポートだった。
LAN1のIPv6 Globalアドレスが復活するとDNS設定を元に戻し、メールで通知する。

(3)運用結果
概ね上手く動作している。NVR510/500のIPv6アドレスが消失した時、接続中のブラウザ更新などで若干の遅れが見られた。
PR-600MIのDHCPv6復帰には、再起動が必要となる。電話や回線使用の無い時にタイミングを観て再起動が可能となった。



 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする