Windows10でのAPN設定自動化

開発中のプロジェクトで、Windows環境でsimを使用したモバイルブロードバンドネットワークを使っています。
当初は「手順書を作ってくれれば対応します」って事だったのが、途中から「simを刺しただけで(手作業無しに)自動で設定出来ないか」ってな話に変更…
そんな事出来るんかいな?

とりあえずGoogle先生を頼りつつ、やってみた


まずは調査から

APN設定ってどうなってる?

自動って事は、コマンドラインとかシェルスクリプトレジストリ弄るなりする必要がありそう。
そもそも、APNの設定情報って何処にどうやって格納されてるんだ?

Ascllで、こんな記事を発見\(^o^)/
Windowsのモバイルブロードバンドネットワーク機能をカスタマイズする
APN設定がxmlファイルで定義可能な事がわかって、おおまかな内容も(なんとなくだけど)判明。
という事で、既存(手作業で管理画面から作ってみたAPN設定)のプロファイルを参照してみる。

(生データで、~部分は公開出来ないのでマスクしてます)
ファイル名
{9D85A35B-727E-482A-84C6-A258BE03D296}.xml

<?xml version="1.0"?>
<MBNProfileExt xmlns="http://www.microsoft.com/networking/WWAN/profile/v4">
    <Name>{76A75226-A56E-4E6B-B843-1AC7B483C25A}</Name>
    <Description>SORACOM.Air</Description>
    <IsDefault>true</IsDefault>
    <ProfileCreationType>UserProvisioned</ProfileCreationType>
    <SubscriberID>01000000D08C9DDF0115D1118C7A00C04FC297EB01000000AE302423BEC241409D32393B7AF7790F000000000200000000001066000000010000200000008477372D361C594FB8DF26C192BE27E0ED85AF4153BE097CFBF370C2D9D50884000000000E80000000020000200000002ADA86D5185492C9B4560EBAF25E82D6A56690F70DAFEDBFADC2F33F6926B8ED20000000FEABD81BD221D19A20DD919F4E7E3064D587581CAB7D84651DE44695A72E60A340000000BE50E447384EB997102E94B7FAB9651CF190C7586ED8D8CA17FD21D38B8D48379EC8109BDE9F7AD5AF1FE14697BF1FA28BCA4ABED7520E61636C83F315DA6B47</SubscriberID>
    <SimIccID>~~~~~~~~~~~~~~~~~~~~~</SimIccID>
    <HomeProviderName>DOCOMO</HomeProviderName>
    <ConnectionMode>auto</ConnectionMode>
    <Context>
        <AccessString>soracom.io</AccessString>
        <UserLogonCred>
            <UserName>sora</UserName>
            <Password>01000000D08C9DDF0115D1118C7A00C04FC297EB01000000AE302423BEC241409D32393B7AF7790F0000000002000000000010660000000100002000000086639B74A891F62F3A7BA2957B3E90780358EDFE1D4CF8CF2BE39897B0C1FCBB000000000E80000000020000200000001F8702CD0939FD8B56438C7502ADD6BC5F58FB859636BCD7764638348C1823A710000000327279A0E74A58F79E7280C3C09C22EF40000000B5E634D78314D43DF1BE0D75B45127B9D093B2729993C5E3D0B4A3B85C3EF5AE3FE1CF2BFE8E4E43839EDD7B81CE667AD34ADA53CD5E97020A0E1F9BD25B02F4</Password>
        </UserLogonCred>
        <Compression>DISABLE</Compression>
        <AuthProtocol>PAP</AuthProtocol>
    </Context>
    <PurposeGroups>
        <PurposeGroupGuid>{3E5545D2-1137-4DC8-A198-33F1C657515F}</PurposeGroupGuid>
    </PurposeGroups>
    <ProfileConditionedOn>
        <IMSI>~~~~~~~~~~~~~~~</IMSI>
    </ProfileConditionedOn>
    <IsExclusiveToOther>true</IsExclusiveToOther>
</MBNProfileExt>

さて、SubscriberIDとPasswordが暗号化されてるらしく、わからない。
幾つかAPN設定を作ってみて、xmlファイルを確認してみたけれど、暗号化を解読する手掛かりも無い 。
ま、そんな簡単に解析出来るような暗号化に意味は無いのはわかっているけれど…

プロファイルのxmlが作れれば何とかなりそうなんだけど、暗号化されてるSubscriberIDとPasswordをどうすりゃ良いのか…

困った時は、やっぱりGoogle先生
有り難い事に、先人がいた!
Windows 10 でモバイルのカスタムAPNが保存できない→プロファイルを作成することで解決
有り難いんだけど…肝心の暗号化部分がわからない。
- SubscriberID - Password

もっと突っ込んで調べてみる

暗号化箇所をプロファイルでどう記載したものか、あれこれ探しても手掛かり無し。
とりあえず、周辺情報から調査。

netshコマンドでWin8のモバイルブロードバンドの情報を得る
プロファイルに設定する情報を取得したり、プロファイルxmlを反映したりする方法は、おおよそ上記のページで把握出来る。
とっても参考になったのだけれど、自分が一番知りたい情報が…

しかし、addは、追加のためのxmlファイルの仕様がはっきりしない。前記のフォルダにあるXMLファイルは、プロファイルなのだが、一部の項目が暗号化されており、まったく同じ内容のファイルをaddコマンドで指定してもエラーとなり、プロファイルとしては登録することはできない。しかし、作り直すのは、設定チャームのネットワークからAPNなどを手動で設定するだけでいいので、特に問題はないだろう。

いや、そこ一番知りたいトコなんですが!!!(-_-;)


とりあえず作ってみる


アレコレ調べてみたものの、追加情報は無し。
調べてもわからないものは、結局わからない。
オトコノコですもの、考えてるだけじゃなくて動かなきゃ!
って事で、トライ&エラーで潰しにかかる。

mbnコマンドで取得出来たSubscriberID・IMSIを、とりあえず平文で設定。
Passwordもとりあえず平文で(^_^;)
わからない項目(PurposeGroups)は、設定画面でも使わなかった項目だったから割愛してみた。
そして作ったxmlが以下。

<?xml version="1.0"?>
<MBNProfileExt xmlns="http://www.microsoft.com/networking/WWAN/profile/v4">
    <Name>{76A75226-A56E-4E6B-B843-1AC7B483C25A}</Name>
    <Description>SORACOM.Air</Description>
    <IsDefault>true</IsDefault>
    <ProfileCreationType>UserProvisioned</ProfileCreationType>
    <SubscriberID></SubscriberID>
    <SimIccID>~~~~~~~~~~~~~~~~~~~~~</SimIccID>
    <HomeProviderName>DOCOMO</HomeProviderName>
    <ConnectionMode>auto</ConnectionMode>
    <Context>
        <AccessString>soracom.io</AccessString>
        <UserLogonCred>
            <UserName>sora</UserName>
            <Password>~~~~</Password>
        </UserLogonCred>
        <Compression>DISABLE</Compression>
        <AuthProtocol>PAP</AuthProtocol>
    </Context>
    <ProfileConditionedOn>
        <IMSI>~~~~~~~~~~~~~~~</IMSI>
    </ProfileConditionedOn>
    <IsExclusiveToOther>true</IsExclusiveToOther>
</MBNProfileExt>


コイツ、動くぞ!w
細かい修正点は色々あったけど、これでAPN設定がエラー無く出来て、通信も成功!\(^o^)/


そして今まで判明したAPN設定用プロファイルxmlの内容

【】内は項目の説明

<?xml version="1.0"?>
<MBNProfileExt xmlns="http://www.microsoft.com/networking/WWAN/profile/v4">  【バージョン記載:お約束】
    <Name>{VR-SIM-Profile}</Name>  【プロファイル名:既存名称と重複はNG】
    <Description>SORACOM.Air</Description>  【プロバイダから指定の名称:この場合はSORACOM】
    <IsDefault>true</IsDefault>  【デフォルト接続先にしたい場合はTrue】
    <ProfileCreationType>UserProvisioned</ProfileCreationType>  【固定値:未解析】
    <SubscriberID>295050910085422</SubscriberID>  【show readyinfo コマンドで取得したサブスクライバーID(平文)SIM依存情報】
    <SimIccID>8942310017000774228F</SimIccID>  【show readyinfo コマンドで取得したSIM ICCのID SIM依存情報】
    <HomeProviderName>DOCOMO</HomeProviderName>  【ローミング元(基本このままで)】
    <ConnectionMode>auto</ConnectionMode>  【自動接続を行うか否か】
    <Context>
        <AccessString>soracom.io</AccessString>  【プロバイダから指定のAPN名】
        <UserLogonCred>
            <UserName>sora</UserName>  【プロバイダから指定のユーザー名】
            <Password>sora</Password>  【プロバイダから指定のパスワード(平文)】
        </UserLogonCred>
        <Compression>DISABLE</Compression>  【固定値:未解析】
        <AuthProtocol>PAP</AuthProtocol>  【プロバイダから指定の認証方式】
    </Context>
    <PurposeGroups>    【このセクションは無くても問題無し:未解析】
        <PurposeGroupGuid>~~~</PurposeGroupGuid>
    </PurposeGroups>
    <ProfileConditionedOn>
        <IMSI>295050910085422</IMSI>  【show readyinfo コマンドで取得したサブスクライバーID】
    </ProfileConditionedOn>
</MBNProfileExt>



完成品

APN設定用xml作成の手順を整理すると…
* 以下作業は、ドングル(sim)を刺した状態で行う事が前提

1)インタフェース取得
    「netsh mbn show interfaces」で、使用可能なMBNインタフェースの名前を取得
    【取得内容】
        ”名前”
            MBNインタフェースの名前(戻り値の中の、2つ目のコロンの右側の文字列)

2)準備状態取得
    構文「netsh mbn show readyinfo interface=“名前”」
    例文「netsh mbn show readyinfo interface=“携帯電話 2”」
    【取得内容】
      サブスクライバーId:〜〜〜〜〜〜
            戻り値の中の、4つ目のコロンの右側の文字列
      SIM ICC の ID  :〜〜〜〜〜〜
            戻り値の中の、5つ目のコロンの右側の文字列

    インタフェース 名前 の準備状態情報:
    ------------------------
      状態    :電源を入れて登録できます
      緊急モード:オフ
      サブスクライバーId:〜〜〜〜〜〜
      SIM ICC の ID  :〜〜〜〜〜〜
      電話番号の数 :0

3)プロファイルXMLの編集
    プロファイル登録用のXMLファイルを、以下のように編集する
    編集箇所は★部分のみ
        Nameパラメータについては、固定前提(Cドライブに記録が残る場合、ユニークにする必要がある)
        <?xml version="1.0"?>
        <MBNProfileExt xmlns="http://www.microsoft.com/networking/WWAN/profile/v4">
            <Name>{VR-SIM-Profile}</Name>
            <Description>SORACOM.Air</Description>
            <IsDefault>true</IsDefault>
            <ProfileCreationType>UserProvisioned</ProfileCreationType
                ★<SubscriberID>295050910085422</SubscriberID>
                ★<SimIccID>8942310017000774228F</SimIccID>
                <HomeProviderName>DOCOMO</HomeProviderName>
                <ConnectionMode>auto</ConnectionMode>
                <Context>
                    <AccessString>soracom.io</AccessString>
                    <UserLogonCred>
                        <UserName>sora</UserName>
                        <Password>sora</Password>
                    </UserLogonCred>
                    <Compression>DISABLE</Compression>
                    <AuthProtocol>PAP</AuthProtocol>
                </Context>
                <ProfileConditionedOn>
                    ★<IMSI>295050910085422</IMSI>
                </ProfileConditionedOn>
        </MBNProfileExt>

    XMLの所在
        C:\ProgramData\Microsoft\WwanSvc\Profiles

4)プロファイルXMLを実行し、APNを登録
    構文「netsh mbn add profile interface=“携帯電話 2” name=“プロファイルXMLファイル”」
    例文「netsh mbn add profile interface=“名前” name=“c:¥work¥profile.xml”」

これをバッチ化してOS起動時に自動実行する事で、初めてのsimを刺してのAPN自動設定と通信が可能になったのでした。
やれやれ。




その他参考資料

mbn設定(APN設定情報)の削除

解決!Windows10タブレットでAPN設定しても圏外のままなので「既定のAPN」をコマンドで削除

Microsoftのオフィシャル情報

Mobile Broadband Profile Schema v4.aspx) Mobile Broadband Profile Schema v4 Element Hierarchy.aspx)