投稿

2020の投稿を表示しています

IPv6 prefix と物理的な地理のカンケイ?

NTT が構築してきたインフラ網として,公衆電話網,地域 IP 網,そして NGN がある。たとえば公衆電話では電話番号がそのままルーティングに活用されており,電話交換機の仕組みと市外局番・市内局番の関係を調べると実に面白い。また,地域 IP 網によってブロードバンドが提供されるようになっても,効率性や合理性の観点から,ISP によっては PTR で逆引きすることによってある程度はグローバルアドレスから県ぐらいまでの特定は可能なようだ。これは,昔のフレッツ網は県間通信が制限されていたため,特定の県内網にしか出口を持たない ISP が居たり,あるいは全国でサーヴィスを提供する ISP であっても県内網ごとにネットワークの出口を設けていたためである。さて,では NGN ではどうだろう。NGN では IPv6 が割り振られ,近年は IPoE の利用によって NGN から払い出されるアドレスで直接インターネットに接続できるようになった。このインターネットに接続できる IPv6 アドレスは,IANA から RIR(地域インターネットレジストリ)の APINC,NIR(国別インターネットレジストリ)の JPNIC,そして LIR(ローカルインターネットレジストリ)である指定事業者に払い出され,そこから ISP に払い出されることになっている。IPoE の VNE は指定事業者である。 https://www.nic.ad.jp/ja/ip/member/cidr-block-list.txtこの VNE が管理する IPv6 プレフィックスは /30 である。このプレフィックスは NGN 内のサーバーに預けられており,払い出しや実際の割り振りの管理は NGN 内で実施されることになる。なので,ルーティングなどの合理性からいっても,地理的に近いユーザーは似たようなアドレスが払い出されるだろうということが想像できる。実際に私の手元に降ってきている IPv6 プレフィックスはひかり電話契約有りなので /56 なので,そのような物理的な地理に基いたアドレス分けに利用できる長さは 56-30 = 26-bit ということになる。さて,実際に IPv6 プレフィックスはどういう管理がなされているのか,実は判明しているらしい。 都道府県の識別は 2bit(東京)~8bit(島根、鳥取)の可…

BBIX の IPv4 over IPv6 技術は 4rd/SAM ではありません

イメージ
IPoE と IPv4 over IPv6現在,インターネット接続性のある VNE が持っている IPv6 を,トンネリングせず NGN から直接払い出してもらう IPoE(ネイティブ方式)がにわかに普及している。 当初 NGN に接続している VNE も BBIX,JPNE,MF の三社だけに制限されていたが,現在は NNTCom や Biglobe,ASAHInet など増加しているところで,これら VNE がそれぞれ独自に提供している,IPv4 パケットを IPv6 上にカプセル化することによって IPv4 接続性を確保する方式として,4rd/SAM (RFC7600), MAP-E (RFC7597), DS-Lite (RFC6333) があると言われている。MAP-E と DS-Lite については,JPNE と MF(ならびに MF 主要株主の IIJ)からそれぞれ技術詳細も出ており,確実にその方式を利用していることは明らかである。これらの方式については次を参照されたい。 あきみちさんが書いた『徹底解説v6プラス』https://www.jpne.co.jp/ebooks/v6plus-ebook.pdfIIJ の技術ブログ「てくろぐ」https://techlog.iij.ad.jp/archives/1879 とくに,MAP-E は JPNE 以外の VNE も多く利用しており,おそらくフレッツ網で使える IPv4 over IPv6 で一番多い手法なのではないだろうか。 ということで今回の本題は,「BBIX は本当に 4rd/SAM を利用しているのか」です。4rd/SAM 出典:https://www.ietf.org/proceedings/83/slides/slides-83-softwire-10.pdf上記の図のように,4rd/SAM は 6rd がやることの逆のヴァージョンとして生まれ,MAP-E の前身となっている。そしてどうやら RFC7600 は草稿のまま放棄されているようだ。なので,4rd も MAP-E 同様に A+P (Address + Port) の 48-bit を IPv6 アドレスに埋め込んで stateless に IPv6 へ変換する,ISP 側ではなく CPE 側での変換技術らしい。ではなぜ BBIX …

MTU,MSS の計算と最適化の便利な手段をまとめる

イメージ
MTU/MSS の計算IP ヘッダや Ethernet フレームの計算は結構大変だけれどもこのサイトを使えばわりとラクに導出できます。 https://baturin.org/tools/encapcalc/たとえば MTU 1454 の環境(フレッツ網で ISP と PPPoE で接続した場合)の MSS は次の画像のとおり 1414 と計算可能です。 この MTU 1454 の根拠は,フレッツ網では PPPoE で接続する際,NTT の収容ビルから事業者装置までの間は L2TP で接続しており,そこで PPPoE ヘッダを認証用の PPP ヘッダだけ残して取り払い,PPP over L2TP の状態にすると,IP (20 byte) + UDP (8 byte) + PPP (2 byte) + L2TP (16 byte) = 46 byte なので,1500 - 46 = 1454 byte になります。参考サイトさきほどのサイトでは L2TPv3 の計算はできるけど L2TP の計算が出来ないのが惜しいところ。MTU の最適化前述の手段で計算した値をルーターやクライアントに設定しても良いですが,既に通信が可能な環境ならばヒューリスティックに最適な MTU を導出することもできます。ping コマンドPS C:\Users\orumin> ping -f -l 1424 -n 1 8.8.8.8 8.8.8.8 に ping を送信しています 1424 バイトのデータ: 8.8.8.8 からの応答: バイト数 =68 (1424 を送信) 時間 =3ms TTL=119 8.8.8.8 の ping 統計: パケット数: 送信 = 1、受信 = 1、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 3ms、最大 = 3ms、平均 = 3ms たとえば Windows なら,このようにして ping のパケットサイズを指定し DF ビットを立てます(=分割を禁止する)。こうすると,MTU を超過するようなパケットを送出すると以下のようになります。 PS C:\Users\orumin> ping -f -l 1425 -n 1 8.8.8.8 8.8.8.8 に ping を送信していま…

grep で OR 検索,AND 検索

OR 検索grep -e 'pattern1' -e 'pattern2' grep -e 'pattern1\|pattern2' grep -E -e 'pattern1|pattern2'AND 検索基本的にムリ。grep -e 'pattern1' | grep -e 'pattern2'スマートではないが grep の結果を grep するのを何度も繰り返せば出来なくもない。また,GNU grep は PCRE が利用できるのでそれを使えばgrep -P '^(?=.*pattern1)(?=.*pattern2)'と書ける。grep 以外で AND 検索AND 検索のときはこっちを使うほうが良さそう。awk '/pattern1/ && /pattern2/'sed -e '/pattern1/!d' -e '/pattern2/!d'出典https://unix.stackexchange.com/questions/55359/how-to-run-grep-with-multiple-and-patterns以上メモPCRE は 1234,1324,1432,1423,2341,... のような {1,2,3,4} の順列にマッチする条件,とかも綺麗に書こうと思えば書けるらしい。マジかよ。 https://stackoverflow.com/questions/3101366/regex-to-match-all-permutations-of-1-2-3-4-without-repetition/3101385#3101385

ssh-rsa,非推奨のお知らせ

2020-05-28T14:11+9:00 追記これは SHA-1 を用いた RSA 鍵についての話で,OpenSSH 7.2 以降で生成・利用される RSA 鍵はまだ利用可能です2020-05-28T19:27+9:00 追記既に生成されている RSA 鍵でもホスト・クライアントの両方が OpenSSH 7.2 以降ホスト・クライアントの両方が OpenSSH 7.2 以降,ただしサーバー側は OpenSSH 7.4 以外であれば SHA-2 で署名するので大丈夫なようです。(OpenSSH 7.4 はバグがあるようです)ssh-rsaという名前は"公開鍵の形式"と"公開鍵を使った署名方式"の二つで使われていて、廃止対象となっているのは署名方式の方だけです。なのでOpenSSH 7.2以降を入れれば、鍵自体は古いOpenSSHで生成した物がそのまま使えます。— いわもと こういち (@ttdoda) May 28, 2020openssh-unix-devで指摘が出ていますが、OpenSSH 7.4のバグで、サーバ側が7.4だとrsa-sha2-256/512が使えると通知してこないのでssh-rsaでユーザ認証が行われてしまいます。これはユーザ認証時のみの問題で、ホスト鍵の確認には影響しません。 https://t.co/oyNVS08jGI— いわもと こういち (@ttdoda) May 30, 2020本文OpenSSH 8.3 がリリースされたとのこと OpenSSH 8.3 released (and ssh-rsa deprecation notice) [LWN.net]これに伴ない,ssh-rsa は将来的に deprecate になり,デフォルトでこの鍵形式を利用する機能自体が無効化されることが改めて告知されました。サーバー側がこの形式を利用しているかどうを確認するには,`HostKeyAlgorithms` ディレクティヴから ssh-rsa を取り除いた上で以下のコマンドを使うことssh -oHostKeyAlgorithms=-ssh-rsa user@host`HostKeyAlgorithms` は ~/.ssh/config で利用する鍵形式を指定できます。現在は SHA-1 ハッシュを用い…

Linux kernel のコードをパッチレベルを指定して入手

URL を覚えていて手癖で簡単に入力できるという理由で Linux kernel を手元に持ってくるときにはよく git clone https://github.com/torvalds/linux.git をしてしまうのだが,ここで git checkout をマイナーバージョンまでではなくパッチバージョンまでのレベルで指定しようとすると,そのようなタグはないと言われる。 error: pathspec 'v4.1.8' did not match any file(s) known to gitこれは GitHub にあるミラーレポジトリはリリース候補のタグしか置いてないためで,kernel.org にある linux-stable の Git レポジトリを利用しないとパッチバージョンのタグが打たれていない。 git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linu.git このレポジトリを利用すれば,パッチバージョンでの変化や歴史を Git で追いたいときに便利だ。 $ git checkout v4.1.8 HEAD is now at 36311a9ec490 Linux 4.1.8もっとも,Git の機能を利用せずコードを読むだけなら tarball をダウンロードするほうが手っ取り早い。 curl -LO https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.1.8.tar.xz

素の Windows からリモートホストの macOS や Linux にクリップボードのテキストを流す

PowerShell で次を実行$OutputEncoding = [Console]::OutputEncoding Get-Clipboard -Format Text | ssh macOS_host "iconv -f sjis -t utf8 | pbcopy" Get-Clipboard -Format Text | ssh Linux_host "iconv -f sjis -t utf8 | xsel --clipboard --input"上記のコマンドで,リモートの macOS ホストと Linux ホストそれぞれのクリップボードにローカルのクリップボードのテキストが転送されます。最初のほうで OutputEncoding を上書きしているのは,これをしないと Get-Clipboard コマンドレットの出力が us-ascii でエンコードされるので,クリップボードの中身が日本語だと化けます。ちなみに ASCII のテキストなら Get-Clipboard -Format Text | ssh macOS_host "pbcopy" だけで済む。逆に,macOS や Linux のホストのクリップボードを手元に持ってきたいときは,macOS なら pbpaste,Linux なら xsel --clipboard --output を使ってください。あと言わないでもわかることだとは思うけど,PowerShell の Get-Clipboard/Set-Clipboard コマンドレットや macOS の pbcopy/pbpaste コマンドはデフォルトで使えますが Linux の xsel コマンドは自分でインストールしなくても必ず存在するとは限りません。ちなみに,とくに Windows ホストに外部コマンドをインストールしてはいけない縛りとかないのなら,win32yank を導入するのはオススメ。

Oculus Quest と Virtual Desktop でモニタが一枚しかない部屋でマルチモニタを実現したい

イメージ
前提VR HMDで VR 空間に埋没してかっこいい空間を広々使ってお仕事したい現実世界の PC がモニタ 1 枚しかない画面出力端子を適当なドングルで埋めて fake monitor を召喚する手もあるがソフトウェアで解決したいところどういうことなのか実は去年末に Oculus Quest を購入していました。そのうち記事にするかも。それはそれとして,Oculus Quest を買ったのは『狼と香辛料 VR』が気になってた,というのと,サイバーパンクでありがちな,半透明のウィンドウが自分を取りかこむようにぶわーっと浮いて広がってるやつ,あれをやりたいという理由でした。みなさんお気付きかと思いますが,後者の目的なら HoloLens とか買うほうが実現しやすいとは思います。でも高い。しかし Oculus Quest はスタンドアローンで 6DoF なワリには安い。それに Oculus Go を買うぞ買うぞと言い続けて結局 Oculus Quest 開発中の発表を見てしまったので,発売したら絶対買うぞ!と思ってました。それでいい加減に腹決めて買ったのが去年末。で,VR 世界でデスクトップ環境を実現する方法はいくつかあります。たとえば私の理想に近いのは Linux のデスクトップ環境である SimuraVR でしょう。しかしこれは HTC Vive か Vavle Index あたりでしか利用できないようです。Oculus Rift S なら OpenXR に対応しているので,かろうじて使えるようですが,Oculus Quest は PCVR に対応しているとは言えども Oculus Link が必要で,この Oculus Link は Windows の Oculus ランタイムアプリに依存しています。血も涙もない。故に Oclus Link+Virtual Desktop で,なんとかマルチモニターを仮想的に実現して気分を良くしたかったのでした。やりかたハードウェア素直にやるなら,ハードウェアでごまかすことが手っ取り早いです。有名な手段としては,GPU の DP 端子に DP→VGA 変換器を取り付けて,Dsub 15-pin の VGA 端子,これの 2-pin と 7-pin を 102Ω 抵抗で結線します。こうするとモニタが接続されていると誤認識されるのです。…

Rockbox のダーティーハック(複数の値を持つ音楽メタデータへの対応)

本日誕生日のおるみんです。みなさんは Rockbox というファームウェア/カーネルをご存知でしょうか。 単一メモリ空間,シングルプロセスで動作するファームウェアで,簡単なスレッドスケジューラを備えることによってマルチスレッドで動作可能な, 主にディジタルオーディオプレイヤー(DAP)上で動作するオープンソースファームウェアです。初期には仏 Archos 製の MP3 プレイヤーに不満を持ったユーザーが homebrew プログラムの動作方法を見つけ,独自実装したのが始まりで韓国 iriver 製 DAP や米 SanDisk の Sansa,東芝の Gigabeat シリーズなど様々な DAP へ porting されています。わけても初期のSony ネットワークウォークマンや大半の米 Apple iPod シリーズにも対応していることで,2000~2010 年ごろの DAP ユーザー(のごく一部)に広く知られています(広く?)。Rockbox の場合,iPod の純正 Apple OS と違い Album Artist タグに対応してますし FLAC は再生できますし crossfeed やパラメトリックイコライザ(low-shelf,high-shelf,peaking * 8 の合わせて 10 バンドで Q 値も設定できる)など再生時のパラメータも細かく設定できるため,ギーク向きの良いファームウェアなのですが,不満もあります何をしたいかここまで前置き,本題は Rockbox は意図的に複数の値を持つタグを読み捨ててしまうというところです。音楽のメタデータは MP3 や AAC に対応する ID3 タグが知られていますが他にも Ogg Vorbis や FLAC に対応する Vorbis Comment,Monkey's Audio に対応する APE tag などが存在します。ID3 タグの場合は ID3v2.3 だとスラッシュ,ID3v2.4 だとヌル文字を区切り文字にし複数の値を書いていけば良いという仕様がありますが,今回の記事では考えないことにします。今回は FLAC で使われる Vorbis Comment について複数の値に対応する方法を考えてみたいと思います。Vorbis CommentVorbis Comment の細かい仕様は仕様書…