楽天モバイル回線でForticlientによるSSL-VPNを行うと98%で止まるがエラーもない件の対処


楽天モバイル回線でForticlientによるSSL-VPNを行うと、下記の98%の状態で止まり、しばらく待つとエラーメッセージもなく未接続状態に戻ってしまう。

楽天モバイル回線以外でやってみると正常に接続できる。

2022/02/01追記: 今日からNTTドコモでIPv6シングルスタック化が始まったらしい。もしかして、類似の現象がドコモでテザリングした際に発生する可能性がある。

ちなみに他の回線でも発生する場合はデバイスマネージャのネットワークアダプタにある「WAN Miniport (IP)」をアンインストールし、Windows再起動することで再作成させることで治ることが多いようだ。

楽天モバイルの場合の事例についてぐぐるとIPv6を無効化するといける、という話があるので、そこらへんにヒントがあるな、と調べて見た。

調査方法は SSL-VPN接続先として指定するホスト名の名前解決を調べて見る

C:\> nslookup vpn.domain.local
サーバー: Unknown
Address: 192.168.43.1

権限のない回答:
名前: vpn.domain.local
Address: 64:ff9b::xxxx:xxxx
      xxx.xxx.xxx.xxx
C:\>

IPv6アドレスは設定されていないはずなのにIPv6アドレスの応答があるとは何事???

Google DNSで名前解決を調べて見ると、こちらは想定通りのIPv4アドレスのみの応答となる。

C:\> nslookup vpn.domain.local 8.8.8.8
サーバー: dns.google
Address: 8.8.8.8

権限のない回答:
名前: vpn.domain.local
Address: xxx.xxx.xxx.xxx
C:\>

この設定していないはずのIPv6アドレス「64:ff9b::xxxx:xxxx」が何者なのか調べたところ、NAT64用に予約されているアドレス帯であることが判明。

JPNIC ニュースレターNo.64「NAT64/DNS64

楽天モバイル網ではIPv6ベースで通信を行うため、IPv4のみの接続先についてIPv6に変換したアドレスを用意している、ということになるようだ。

ただ、FortiClientの実装上それでは都合が悪いようだ。

FortiClientのSSL-VPN接続先のサーバ指定を、サーバ名表記から、IPv4アドレス表記に変更し、「無効なサーバ証明書を非表示」に設定することで接続が完了することを確認した。

「無効なサーバ証明書を非表示」に設定する理由は、SSL証明書はホスト名に対して発行されており、IPアドレスに対しては発行されていないためです。(以前はIPアドレスに対しても発行できたが、現在は禁止されている)


2021/10/15追記

BIGLOBEがInfra Study 2nd #3「いまさら聞けないIPv6ネットワーク」というイベントで「DNSの振り分けでNAT64/DNS64の不具合を回避 ~固定回線でIPv4 over IPv6接続するための工夫~」という発表を行った。

BIGLOBEでは固定回線でもNAT64/DNS64を導入しているのですが、IPv6アドレスに変換されると困るサービスなどは、DNS64の名前解決を行わないようにDNSサーバ側で細工をしている、とのこと。

MousePro MPro NB390H2-SSDの修理とWindowsインストール、そしてLTE内蔵改造


秋葉原のPCショップ EYESにてMousePro MPro NB390H2-SSDが5480円で売っていた。

画像

電源コネクタ破損ということでたぶん動くだろうと購入。

中を開けてみると、まぁ見事な壊れよう(なお、開ける時は左側の電源コネクタがある方から開けるといい。右側だとオーディオ端子とVGA端子の出っ張りがあって邪魔をするから)

画像

19V電源だけど、東芝/富士通系19Vとは大きさが微妙に違い刺さらないサイズなので、おそらく気がつかないアホが無理矢理押し込んで壊したんだと思われる。

画像

元のコネクタはこんな感じだったらしいけど、どれだけの力をかければ壊せるのか・・・

電源コネクタ部分は別基板になっていたので取り外して観察してみる

画像
画像
画像

基板に書かれていた「W330C」という文字列が機種名っぽかったので検索したところ、Clevo社のW330SU2というのがOEM元モデルのようである。

最初はコネクタを取り外して、東芝/富士通系と同じものに置き換えるつもりで部品も用意したんだけど、手持ちの半田ごてだとうまく取り外せなかったので、ケーブル伸ばして無理矢理配線でごまかした。

画像

Windows 10はすんなり入ったものの「SMバスコントローラ」が未認識。

画像

Clevo社のDownloadページから「Model:W330SU2」の「Driver:ALL」で表示させた中から「Chipset driver 10.0.17 for Win8.1 64bit」をダウンロードしてセットアップを実行してインストールする。

また、キーボード上の青いキー操作の内、音量操作などは動作しますが、液晶の輝度操作が動きません。こちらは「Hotkey driver 3.03.12 for Win8.1 64bit」をインストールすることで使えるようになるのでこちらもダウンロード/インストールします。

ちゃんと動くようになったので改造検討

WiFiの横にある「H=3 M」は、たぶんMキーという意味で、近くに「SSD」という記載も見えるのでNVMe SSDも行けるM.2 2280っぽい。(2021/03/10追記 NVMe SSDは認識しませんでした)

画像

もう一つの「H=4 B」はBキーという表記で、「3G」という表記。そして、そこに置かれている未接続のケーブル2本

ケーブルの先を確認すると「LTE」と書かれたアンテナっぽい基板に接続されている。

というわけで、たまたまジャンク500円で購入していたLTEカード(EM7330)をさしてアンテナケーブルを接続

どこかにSIMスロットがあるはず、と探すとすぐ近くに発見。

こちらバッテリーを取り外した時に、バッテリーコネクタの隣になります。

電源を入れると普通にWindows10上で認識し、使える様になりました。

画像

2022/08/15追記

メモリスロットが2つあるのでASUS U24Eに載せてる 「シー・エフ・デー販売 Elixir ノートパソコン用メモリ DDR3-SODIMM PC3-12800 CL11 8GB 2枚組 LowVoltage(1.35v) W3N1600Q-L8G」を載せてみたのですが、認識しませんでした。

2段階のNFSマウントをする方法


直接アクセスできないネットワークにあるNFSサーバをNFSでマウントすることはできないか試行錯誤してみた。

普通にCentOS7やSolaris11からやってみたところ、NFSマウントした領域のNFS exportでの公開はnfsd側から「Cannot export /mnt, possibly unsupported filesystem or fsid= required」とか、「Invalid filesystem」とか言われて設定できない。

これはuser-spaceで動作するnfsdを使えば回避できるんじゃないかと探してみた結果、unfs3というものを発見。ソースコードは https://github.com/unfs3/unfs3

Linux,FreeBSD,Solaris,AIX,Irix,MacOSXで動く以外に、Windows上でも制限ありで動作するとのこと。

Windows上で動かした場合は、unfsdが使用するWindowsユーザを1つ割り当てる形になるので、NFS経由のアクセスは全てそのWindowsユーザがアクセスしている、という扱いになるようだ。

あと、このunfs3はNFS ver3のみ使え、NFS v4やNFS v2でのアクセスには対応していない。また、NFS v3でもREADDIRPLUS(属性付きディレクトリの読み取り)周りは実装していないとのこと。

READDIRPLUSはOracle/Solarisのドキュメントによればlsコマンドなどでディレクトリ内のファイル一覧を表示させる動作を高速化するためのものなので、まぁ、なくてもなんとかなる感じのもの。

属性付きディレクトリの読み取り
NFS バージョン 3 では、READDIRPLUS と呼ばれる操作があります。たとえば、ls や ls -l などの、大部分の READDIR が READDIRPLUS コールとして発行されます。バージョン 3 で ls -l コマンドを実行すると、ディレクトリ内の名前リストと共に、ファイルハンドルと属性が返されます。バージョン 2 では、名前が最初に返され、ファイルハンドルと属性を取得するには、続いてサーバーを呼び出す必要があります。
バージョン 3 の READDIRPLUS 操作の利点は、ファイルごとに GETATTR 要求を送信する必要がないため時間が短縮され、ls と ls -l の速度が同程度になることです。

要件は満たせそうなので、とりあえずテスト用CentOS7環境でunfs3を動作させてみる。

準備

環境をインストール

# yum install git
# yum groupinstall "開発ツール"

コンパイル

まず、ソースコードの入手

$ git clone https://github.com/unfs3/unfs3.git

READMEにあるとおりbootstrap&configureを実行

$ cd unfs3/unfs3
$ ./bootstrap
$ ./configure

そしてmake

$ make
for i in Config ; do (cd $i && make all) || exit; done
make[1]: ディレクトリ `/root/unfs3/Config' に入ります
gcc -g -O2 -Wall -W -I.. -I. -I..   -c -o lex.yy.o lex.yy.c
gcc -g -O2 -Wall -W -I.. -I. -I..   -c -o y.tab.o y.tab.c
ar crs lib.a lex.yy.o y.tab.o
make[1]: ディレクトリ `/root/unfs3/Config' から出ます
gcc -g -O2 -Wall -W  -D_GNU_SOURCE -I.   -c -o afsgettimes.o afsgettimes.c
gcc -g -O2 -Wall -W  -D_GNU_SOURCE -I.   -c -o afssupport.o afssupport.c
gcc -g -O2 -Wall -W  -D_GNU_SOURCE -I.   -c -o attr.o attr.c
attr.c: 関数 ‘get_free_bad_dir_entry’ 内:
attr.c:550:5: エラー: ‘for’ ループ初期化宣言は C99 モード内でのみ許可されてい ます
     for (int i = 0;i < BAD_DIR_CACHE_SIZE;i++) {
     ^
attr.c:550:5: 備考: オプション -std=c99 または -std=gnu99 をコードコンパイル時に使用してください
attr.c: 関数 ‘find_bad_dir_entry’ 内:
attr.c:573:5: エラー: ‘for’ ループ初期化宣言は C99 モード内でのみ許可されてい ます
     for (int i = 0;i < BAD_DIR_CACHE_SIZE;i++) {
     ^
make: *** [attr.o] エラー 1
$

エラーとなってしまいます。

これはコンパイル時のオプションに「-std=c99」を指定するようにして解決

$ export CPPFLAGS="-std=c99";./configure
$ make
<略>
$

インストールと設定

普通にmake installすると/usr/local以下にインストールされます。

# make install
/usr/bin/install -c -d /usr/local/sbin
/usr/bin/install -c -d /usr/local/share/man/man7
/usr/bin/install -c -d /usr/local/share/man/man8
/usr/bin/install -c unfsd /usr/local/sbin/unfsd
/usr/bin/install -c -m 644 ./Extras/tags.7 /usr/local/share/man/man7/tags.7
/usr/bin/install -c -m 644 ./unfsd.8       /usr/local/share/man/man8/unfsd.8
#

NFSで公開するディレクトリの設定は、普通のnfsdと同じく /etc/exports ファイルを使用。「-e」オプションで別のファイルを指定することも可能です。

注意点としては、Linuxだとホスト名指定に「*」とnetgroupが使用できず、ログに「unfsd[20479]: syntax error in ‘/etc/exports’, exporting nothing」といった出力が出てしまうという点です。

「*」については「0.0.0.0/0」で代替できます。

/etc/exports ファイルを編集した場合、変更にはexportfsコマンドは使用できません。

unfsdに対してHUPシグナルを送ることで反映されます。(kill -HUP unfsdのPID)

unfsdの起動は「/usr/local/sbin/unfsd」の実行、停止はunfsdへのTERMシグナル送信(kill -TERM unfsdのPID)です。

Windows Live メール 2012で「メッセージを表示できませんでした」となる


注: 必要な作業は「レジストリを設定してOS再起動」です。Liveメールの設定を確認する必要はありません。設定確認はきちんとした原因調査したい場合に行う操作です。

2020/12/23追記

2020年5月リリースのWindows 10 20H2適用後、「0x800c013e 不明なエラー」というエラーで使えなくなる、という件が発生しているようで来訪が多い。

うちのテスト用Windows10はこの記事を書いた10月時点ですでにWindows 10 20H2になっており「0x800c013e 不明なエラー」が発生していました。

そこで、このページのレジストリ設定を行ったところ、Windows Liveメール2012を使ったメール送受信は可能となりました。2020/12/23時点でもIMAP/POP3メール受信,SMTPメール送信ともに出来ています。

また、エラーがでたのでメールアカウントの再設定などを試そうとしている場合の注意点があります。

Windows Liveメールはサポートが切れて数年経ちますので、各メールサーバの設定案内で記述が削除されており、他のメールソフトの設定ページにある設定を利用しているのではないかと思います。

しかし、Windows Liveメールで使えるメールサーバ設定は10年以上前のメールサーバ用の設定であり、2020年のメールサーバが備えてる設定ではアクセスができないものがあります。

詳細については「Windows Liveメール2012で使えるメールサーバ設定」を見てください。

追記終了


メールサーバを管理しているといろんなユーザがいるわけです。

とっくにサポートが切れたWindows Live メール 2012をWindows10上で使っている人、とかね。

そんな人からの問い合わせに対応するために検証用Windows10にWindows Live メールをセットアップしてみたら、メールが表示されない。

「メッセージを表示出来ませんでした」ってなんだ?

いろいろ調査してみると、[オプション]-[メール]-[詳細設定]の「メンテナンス」でどんな状態にあるか確認できるらしい(注:これは調査のための操作なので、特にやる必要はありません)

これの「トラブルシューティング」の「全般」と「メール」にチェックを入れて、「保存先フォルダー」に書かれたディレクトリにあるWindowsLiveMail.log にログが出力されるようになる。

受信トレイのメールをクリックしてみると下記の様な「Zone_MailChk ERROR: (storutil.cpp:3965), failed with 0x800C013E」などのエラーが出力される。

[15:11:00.34] 4138                 Mail:            Zone_MailChk ERROR: (msgfldr.cpp:2741), failed with 0x800C013E  
[15:11:00.34] 4138                 Mail:            Zone_MailChk ERROR: (msgfldr.cpp:905), failed with 0x800C013E  
[15:11:00.34] 4138                 Mail:            Zone_MailChk ERROR: (storutil.cpp:3965), failed with 0x800C013E  

この情報を元に検索したところ、2020/08/26付けの「Windows Live Mail」というマイクロソフトコミュニティの書き込みを発見。

レジストリエディッタで「HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows Live Mail」直下にDWORD(32bit)で3つのキーを値「1」で新規作成して、Windowsを再起動してWindows Liveメールを開き直すとメッセージが読めるようになる、と。

作成するDWORDキー
  RecreateFolderIndex
  RecreateStreamIndex
  RecreateUIDLIndex

(該当する3つのキーの値は1回Windows Liveメールを起動することで「0」に戻ります)

この手順を実施したところ、ちゃんとメッセージが読めるようになりました。

Windowsで簡易的にWebサーバをたてるソフト HFS


むかしはネットワーク機器のfirmware versionアップにtftpやftpなどを使うことが多かった。

最近はhttp経由という例が増えている。

Windows標準のIISだと大がかりすぎるのでもっと簡単にできるものを探して「簡単WEBサーバー」というものを試したのだが、これはGETしか実装していないという中途半端なものだった。

GETしか実装されていないと何が問題になるかと言うと、ファイルダウンロード前にHEADでファイルサイズを確認し、保存できる領域があるかを確認する、という動作をする機器の場合、HEADが実装されていないため容量確認ができず、ダウンロードが実施できない、ということになる。

で、探したところ「HFS ~ Http File Server」というものを発見。

これは2MBのバイナリでインストール不要というもの。

hfs.exeを実行すると下記の様にウィンドウが立ち上がり、Webサーバとして動作しだす。

ファイルの登録は簡単で、登録したいファイルの右クリックメニューから「Add to HFS」を選択するだけ、となっている。

追加すると下記の様に/直下に配置される。ファイルを選択するとダウンロードに使用するURLが表示されるという点も便利

ダウンロードが開始されるとLogウインドウにどういうリクエストがあったのかが表示される。

起動したWindowsに複数のIPアドレスがある場合、どのIPアドレスで公開するかは選択できる。

ポート番号は80以外にも設定することはできる(httpsは未対応)

サービスとして動作させることはできないが、Windows起動時にHFSを実行する、という設定もある