pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


2台のPC間でファイルを高速にコピーしたい

MacBookVMware Fusion 上のゲストOSに保存されているファイル (約20万ファイル、7GBくらい)を外部ストレージにバックアップしようと考えたのですが、数時間単位で時間が掛かりそうだったので、別の方法でバックバックすることにしました。

ただし、ここで紹介する方法はmacOSのターミナルやWindows10のWSLでコマンドを入力するやりかたなので、この手の操作に慣れていない方には向かない方法です。

基本的なアイデア

  • MacBookに接続する外部ストレージは、macOSでハンドリングさせるほうが高速なはずである
  • しかし macOS 側で認識しているストレージに VMware Fuision のゲスト側から直接アクセスできないようである
  • よって macOS 側で簡易的な受けプログラムを用意し、ゲストOS側から受けプログラムにファイルを渡せば良い
  • ディレクトリ構造含めて渡したいので、ホスト側とゲスト側のデータは tar のフォーマットで受け渡そう
  • nc (netcat) を使えば、tar の結果をネットワーク側に渡したり、ネットワーク側から受け取って tar で展開したりできる
  • 低速回線は使わないので、途中でネットワークの問題で切れても気にしない、というか、考えない
  • 最終的なコピー先は exFAT でフォーマットしたUSBストレージなので、パーミッションについては細かく問わない

このアイデアの注意事項

通信経路上のデータは暗号化されず、平文のままで流れます。信用できないネットワークではこの方法は使えません。素直に ssh とかを使いましょう。

ループバックネットワークなら問題ありません。また、自宅ネットワークのように利用者が限定されるローカルネットワークならギリギリ許容範囲でしょう。

実際の方法

nc を準備する

Windows 側では WSL をインストールしているなら、そこに nc を追加するだけです。sudo apt install nc するだけと思います。 macOS 側は標準で nc コマンドが使えると思います。

nc で相互通信できることを確かめる。

macOS 側で nc -l 10080 と実行し、ゲストOS側から nc [macOSのIPアドレス] 10080 のように実行します。 10080 はTCPポート番号です。ゲストOS側でキーボードを適当に叩いた結果が macOS 側に表示されていたら通信はできています。

nc を介して tar のデータを受け渡す

macOS 側で、ファイルを出力したいディレクトリで nc -l 10080 | tar xf - のように実行します。 ゲストOS側では、ファイルをコピーしたいディレクトリで tar cf - | nc [ホスト名] 10080 のように実行します。 疎通テストの nc コマンドの出力を tar に引き渡したり、tar の結果を疎通テストの nc コマンドに渡すだけです。

もし、macOS側に PV (pipe viewer) をインストールしている場合は nc -l 10080 | pv | tar xf - のように実行すれば、macOS側で受信したデータ量や、リアルタイムのデータ転送レートが分かります。

実際にやってみた例

これはPVを組み合わせた例ですが、macOS側で受け取っているデータの合計と、処理時間、瞬間的な受信レートが表示されています。出力先ストレージは2.5inch USB-HDDです。このケースではファイル数が多い(=ファイル1つあたりのファイルサイズが小さい)ので、ものすごく速いという感じではありませんが、MWare Fusion でUSBデバイスをマウントして書き込むのに比べたら高速ではないかと思います。

% nc -l 10080 | pv | tar xf - 
6.72GiB 0:35:42 [6.75MiB/s] [               <=>                                             ]

ちなみに、ファイル数がもっと少ない別のフォルダをバックアップしてみると、こんな感じでバックアップが進むので、もうちょっと速くなっています。

% nc -l 10080 | pv | tar xf -        
2.00GiB 0:04:03 [13.6MiB/s] [                                             <=>               ]

AppleのサイトやiOSでのモバイルSuicaに関する記述が微妙に変わっているらしい

こちらの英語のブログ記事で、アップルのサイトやiOS上で、これまではモバイルSuicaと表記されていた箇所が微妙に変わっているということが取り上げられていました。

atadistance.net

記事のタイトルを直訳すると「iPhone SEApple Pay SuicaがモバイルPASMOに道を開く?」ということですかねえ。iOSでのモバイルPASMOの提供の可能性についての考察記事のようです。

この記事では下記3点の変更が生じていることを指摘し、これまで日本でのApple PayでモバイルSuicaに割とフォーカスしていたマーケティングSuicaから少し距離を置いて、より中立な「交通系ICカード」という表現にシフトしていることとモバイルPASMOのサービス提供について推測されている感じです。

  1. アップルのサイト上で、以前の機種ではモバイルSuicaと表記されていた説明が、iPhone SE 2G では削除されている
  2. Apple Wallet に関するiOS上の表記が、以前ではAdd Suicaと表記されていた箇所が Add transit に変更されている
  3. Apple Wallet でのSuica定期券の区間情報表示欄に「更新」のUIが追加されている

手元のiPhoneは積極的にiOSアップデートをかけているのでSuicaに関するApple Walletの表記がどのように変わったかを検証することはできないのですが、少なくともiPhone SEに関する仕様説明のウェブページではApple Payの説明部分からSuicaの記述が消えていることは確かなので、モバイルPASMOiOS向け提供についてちょっと期待してしまいます。

Windows10+VMwareでDevice/Credential Guard are not compatibleのエラーが出たので対処する

Windows10 May 2020 Update を適用したら、"VMware Workstation and Device/Credential Guard are not compatible" error in VMware Workstation on Windows 10 host (2146361) のエラーが発生したので対処します。

kb.vmware.com

Hyper-Vを無効化する

Device/Credential Guard は Hyper-V で動作します。しかし VMware Workstation / Player は Hyper-V と併用できません。

今回、Windows 10 Enterprise で機能更新プログラムを適用したところ、Device/Credential Guardを有効化するためにHyper-V自動起動するように設定されるようです。

このため、Hyper-Vを無効化します。

GUIでちまちま設定しても良いのですが、次のコマンドを実行すると Hyper-V が無効化されます。実行後は OS を再起動してください。

bcdedit /set hypervisorlaunchtype off  

V

WiFi接続用のQRコードをGoogle Spreadsheetで作成・管理する

自宅のWi-Fiルータスマートフォンテザリングなど、Wi-Fiは日常的に使用しますが、接続パスフレーズを複雑にすると入力が面倒ですし、かといって簡単すぎるパスフレーズはセキュリティ面で不安があります。

そこで、Wi-Fi接続用のパスフレーズ情報をGoogle Spreadsheetでリスト管理し、さらに接続用のQRコードを表示できるようにして、スマートフォンでの入力の手間を減らすことにしました。

主なポイント

ただし Chart API はすでに非推奨なので、この方法がいつまで使えるかは分からない点に注意が必要です。

実装要件

  • 個人用のWi-Fi接続管理メモとして使用することを想定します。
  • スプレッドシート1枚に複数のWi-Fi接続設定を掲載します。特定のWi-Fi APの接続情報を他の方と共有するには不向きです。特定のSSID接続情報を他の方と共有する場合は、1シートに1つのAP情報だけを掲載するなどして運用すれば良いと思います。

実装サンプル

次のように、A列 = SSID、B列 = パスフレーズを入力するとC列 = QRコードが表示されるようにしてみます。 f:id:pslabo:20200429210427p:plain

この QRコードiOS,Androidのどちらでも利用できますが、読み取り条件に違いがあります。

iOSの場合はiOS 11以降のiPhone, iPad標準カメラアプリで利用できます。

support.apple.com

Androidの場合は機種やAndroid OSのバージョンにより、複数の選択肢があります。

Googleアシスタントが搭載されている場合はこれを使いましょう。画面下に表示されるホームボタンを長押しするとGoogleアシスタントが起動します。ここでGoogleアシスタントと文字入力や音声認識でやりとりする代わりに、Googleレンズを起動してQRコードを撮影すればWiFiの接続がこなえます。

lens.google.com

Androidの標準カメラアプリについては、機種によりQRコードWiFI接続をサポートするものとしないものがあるようです。Google Pixelシリーズでは標準カメラアプリで読めましたが、Sharp SH-M05のカメラアプリはWi-Fi接続用のQRコードを単なる文字列として認識されてしまいます。

Android 9より古いOSでGoogleアシスタントが使えず、標準カメラアプリがQRコードによるWiFi設定をサポートしていない場合はZXing TeamのQRコードスキャナーが仕えます。これは多くの端末で汎用的に使えるので、機種ごとの違いを意識せずに使いたい場合に向くと思います。 play.google.com

Google SpreadsheetにQRコード生成する計算式を記入する

A2にSSID、B2にパスフレーズを記入しているとき、C2セルに次の計算式を入力するとWi-Fi接続のQRコードが生成されます。

=IF(
  AND(A2<>"",B2<>""),
  image("https://chart.apis.google.com/chart?cht=qr&chs=300x300&chld=L&choe=UTF-8&chl=WIFI:S:" & A2 & ";T:WPA;P:" & B2 & ";;")
)

参考:Wi-Fi接続用のQRコードを生成するAPIのURL形式

Google Chart API に次のようにアクセスすると、Wi-Fi接続のQRコードが生成されます。

暗号化方式はWPA、SSID=TestAP、パスフレーズ=TestPassと記述しています。これらの文字列を変更すれば任意のWi-Fi接続のQRコードが生成できます。

https://chart.apis.google.com/chart?cht=qr&chs=300x300&chld=L&choe=UTF-8&chl=WIFI:S:TestAP;T:WPA;P:TestPass;;

注意事項

QRコードによるWi-Fi接続では、残念ながら WPA2-ENT などの企業ネットワーク向けでサポートされる暗号化方式のQRコードは規格化されていないようで、作成できません。

これらの接続設定を手作業での認証情報の入力なしに行いたい場合は、iPhoneの場合は Apple Configurator を用いて構成プロファイル化するのが良いと思います。

iPhoneにWi2ギガぞうのプロファイルがインストールできないのでネットワークをリセットする

格安SIMでBIG SIMを1年以上使用しているユーザには、長期利用者特典としてWi2のギガぞうWi-Fiのサービスがついてくるそうです。

gigazo.jp

公衆Wi-Fiは普段あまり使わないのですが、せっかくなのでセットアップだけすませておこうと思いました。

上記のページから、BIG SIMで契約中の電話番号とSIM情報を入力し、サービスへのアカウント登録を済ませると基本的なセットアップは完了です。

あとはiPhoneにアプリをインストールして構成プロファイルをインストールすればWi-Fiへの接続準備はOKなのですが、実際に構成プロファイルをインストールしようとすると「プロファイルのインストールに失敗しました」というエラーが表示され、インストールが行えません。

こういう場合はiOS内部に記憶されているネットワーク設定が構成プロファイルの内容と競合している可能性があるので、ネットワーク設定のみをリセットしてみることにします。

すると、プロファイルを正しくインストール完了できました。

なお、ネットワーク設定をリセットすると、手動で登録した下記設定がすべて初期化され流そうです。

support.apple.com

実際に使い物になるかどうかはちょっとあやしいかも

じっさいにギガぞうを使ってみようと試したのですが、案外制約が多く、正直、あまり使えない感じがします。

近所のWi2のスポットでBIC SIMの長期利用者向けSSIDを探してみたのですが、そもそも見つけることができず、見つかったのはオプション契約が必要なSSIDばかりでした。

場所によっては使えるかもしれないけど、自分の行動範囲内ではあまり使えなさそうな感じです。

Windows10やWindows Serverをリモート操作で再起動する

社内からアクセス可能なインフラをテレワーク中に操作する際に、オフィス内のPCをVPN接続経由のリモートデスクトップ接続で操作したり、ChromeリモートデスクトップVPNなしに操作したりしています。しかし、まれにオフィスのPCが過負荷になっていて、操作をうまく受け付けないことがありました。

このような場合、原則的には正しい手順で再起動する必要がありますが、過負荷の状態ではリモートデスクトップで画面操作を行うことが難しく、再起動操作が困難です。

このような場合に、Windows 10 PCからオフィスにVPN接続できるのであれば、PowerShellの次のコマンド実行により、PCを強制的に再起動できる場合があります。

Restart-Computer -Force -ComputerName "コンピュータ名 または IPアドレス" -Credential (Get-Credential)

パラメータに -Force をつけているので作業中の状態は失われるかもしれませんが、リモートデスクトップが正しく受け付けられないときは、そのPCが目の前にあってもログインは困難な状態なので、電源を切るかリセットスイッチを押すか、というのに比べれば十分に安全な操作です。

なお、コマンドを対象のPCが受け付けて再起動がかかるまでに、それなりに待たされますし、場合によってはリクエストがタイムアウトするかもしれず、数回試す必要があるかもしれません。それでもオフィスに行って帰ってくるまでの時間よりは短く済むと思います。

テレワーク用PCと家庭内のデバイスをネットワーク的に分離する方法を考える

2020年3月下旬以降、新型コロナウイルス対策としてテレワークで業務を行っているのですが、家庭内のPCやスマートフォンとテレワーク用のPCを同じネットワークに収容するのはできるだけ避けたいので、ネットワークを分離することを考えました。

考えうる方法

いろんな方法がありますが、それぞれ、費用や手間、分離の状態が違います。

物理的に別の回線を引き込む

光回線でも良いし、WIMAXなどの無線系でもよいのですが、物理的に分けてしまえば完璧です。スマートフォンテザリングでも良いでしょう。

しかし費用と手間の問題が大きいですし、無線系の場合は利用できるパケット通信量に制約が生じますので、これは除外することにします。

フレッツ光で別のプロバイダ契約を行う

フレッツ光はPPPoEでのプロバイダ接続を同時に複数行えるので、家庭用のPPPoE接続とは別の契約を追加してマルチセッション接続するという方法が取れます。この場合はテレワーク用のルータも追加して、ネットワーク接続を論理的に分離することができます。

しかしこれは月額費用が増えてしまうので、これも見送ることにします。

フレッツ光にぶら下げたルータに、別のルータを下げてセグメントを分ける

自宅内LANに、さらに別のルータを設置し、そちらのルータ配下のネットワークにテレワーク用の機器を接続するようにします。このときに、テレワーク用ルータのWAN側は家庭内LANに接続するようにします。

こうすれば家庭内LANからはテレワーク用LANにアクセスできないので、テレワーク環境は一応隔離されます。

また、テレワーク用のネットワークから家庭内LAN側にアクセスさせることは可能ですが、共有したいネットワークリソース(プリンタとか)がないなら家庭内LAN側へのアクセスは禁止しておいたほうが良い気がします。

フレッツ光にぶら下げたルータのWiFiを2つのセグメントに分ける

OpenWRTベースのルータなら、こういう構成が容易に作れます。Raspberry Pi のように2.4GHz帯と5GHz帯のWiFiを両方搭載している場合は、それぞれのWiFiを家庭内LANとテレワーク用LANに分ければよいと思います。

ただし設定を間違うとネットワークが正しく分離されず、相互の通信ができてしまったりする点に注意が必要です。

フレッツ光DS-Lite対応のプロバイダに契約し、DL-Lite対応のルータをフレッツ光のルータに2台接続して分離する

PPPoEではなく IPoE IPv6 + DS-Lite IPv4 に設定したルータをフレッツ光のルータに2台並列でぶら下げるという方法があります。

試しに、手元の回線にRasp erry Pi でOpenWRTにDS-Liteの設定を行った構成2台をフレッツ光のルータに並列にぶら下げてみたところ、それぞれのルータからDS-Liteの接続が独立して行われました。PPPoE接続のように排他的に接続が行われるわけではないようです。また外部向けのグローバルIPv4アドレスを https://checkip.amazonaws.com/ で確認してみると、それぞれ別のIPアドレスが表示されることが確認できました。

どの方法を選択するか?

現在、自宅の回線はDS-Liteを使うように設定しているので、「フレッツ光DS-Lite対応のプロバイダに契約し、DL-Lite対応のルータをフレッツ光のルータに2台接続して分離する」の方法を取ることにします。

この方法は、単にテレワーク用PCと家庭用機器の分離という目的だけではなく、OpenWRTのアップデートを実施するときの保険も兼ねています。

OpenWRT向けのDS-LIte機能は標準のファームウェアには含まれておらず、追加ソフトウェアをインターネット側からダウンロードしてのインストールが必要です。しかしOpenWRTベースのルータが1台しかないと、それをアップデートしたあとにDS-Lite機能の追加インストールをしたいのにDS-Lite接続がないとインターネット側に接続できないという問題が発生します。

なので、DS-Lite接続が可能なルータを2つ確保しておけば、片方をアップデートしたらもう片方の機器に一旦収容して追加ソフトウェアをインストールし、DS-Liteの設定復元を行うという作業が容易に行えるようになります。