2

ASAHIネットのDS-Liteの終端(AFTR)を取得する

 7 months ago
source link: https://gist.github.com/jj1bdx/5360868e49963c36f16d8de820265954
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

ASAHIネットのDS-Liteの終端(AFTR)を取得する

ASAHIネットがDS-Lite対応したので、 自宅の適当なLinuxルーターにて設定しようとして詰まったAFTR取得に関するメモ。

Linuxルーターを使ってる人向けのニッチなものだけど、情報として残しておく。

終端の情報公開について

そもそもISP(ASAHIネット)側がどうやってAFTRを公開しているのか? どうやらDHCPv6の仕様にAFTRに関するものがあるらしい。 ただ、テストプログラムを作ってパケットを投げて応答を見たところ、どんなOptionリクエストを投げても固定値(DNS recursive nameserver/Domain Search List/Simple Network Time Protocol Server)しか帰ってこない…

もしかしてブラックボックスや固定値?と思ったが、どうやら日本独自の仕様があるらしい。

日本のIPv4 over IPv6の技術が複数あるので、それらの情報公開について仕様を策定してある模様。 仕様の初版は2020/08/13なので、対応ルーターが少ないのも納得。

仕様を見ればだいたいわかる。

Stateless DHCPv6 でDNSの情報を取得

DNSで 4over6.info のTXTレコードを引く必要があるが、Stateless DHCPv6で取得できるDNSサーバーに対してクエリを投げる必要がある。 もちろん8.8.8.8などのPublic DNSでも引けないし、ASAHIネットのIPv4 DNSサーバーでも情報は引けない。

自環境ではStateless DHCPv6を有効化せずにDNSサーバーはpublic DNSに投げているので、ASAHIネットのDNS情報を取得できていない。 適当にDHCPv6のInformation Request(DNS)を投げるプログラムを作ったので、これを使って情報を取得する。

 # infreqv6 br0
 xxxx:xxxx:xxxx:x::1
 xxxx:xxxx:xxxx:x::2
 ※出力はサンプル

4over6.info のTXTレコードを取得

取得したDNSサーバーに対して、TXTレコードを取得する。

 # dig 4over6.info TXT +short @xxxx:xxxx:xxxx:x::1
 "v=v6mig-1 url=https://example.com/cpe/v1/config t=b"
 ※出力はサンプル

取得したURLに対してGETリクエストを投げる

先ほど取得したURLに対して、IPv6にてリクエストを投げる。

TXTレコードに"t=a"が記載されている場合は、ISP側が自己署名証明書を使ってる可能性があるので、無視するオプション-kをつけるなどする。 (※手元のASAHIネットの環境では、正規の証明書が使われていた)

必須のパラメーターがあり、適当に設定して送る。 将来的にルーター毎に出力を変えたりするのかもしれない。

 # curl -6 "https://example.com/cpe/v1/config?vendorid=acde48-v6pc_swg_hgw&product=V6MIG-ROUTER&version=0_00&capability=dslite" > result.json

できあがったresult.jsonファイルは以下のような内容になっている。

{
  "ttl": 61200,
  "token": "xxxxxxxxxxxxxxxxx",
  "service_name": "v6 コネクト",
  "enabler_name": "v6 コネクト",
  "dslite": {
    "aftr": "dslite.example.com"
  },
  "order": [
    "dslite"
  ]
}

aftrホスト名のAAAAレコード取得

これに含まれる"aftr"に書かれているホスト名を、最初に取得したDNSサーバーに対してAAAAレコードを引けば接続先のIPv6アドレスが得られる。

 # dig dslite.example.com AAAA +short @xxxx:xxxx:xxxx:x::1
 xxxx:xxxx:xxxx:x::3

仕様が公開されているおかげですんなり取得できた。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK