近況報告

少し前に転職しました

from: グリー株式会社
to: 株式会社メルカリ

新しい職場はすごく新鮮で、なんといっても使用言語の9割が英語です。
おれは英語があんまりできなくて職務に差し支えているので勉強しつづけて少しずつマシにしていく必要があるわけです。

いい機会といえば機会だし良かったですね

v6プラス(IPoE MAP-E)とPPPoEを併用する(ルーターが非対応の場合)

フレッツ光・光コラボが深夜めっちゃ遅い問題はここ1年くらい我が家にも到来しており、最近は夜10時以降WifiつながないでLTE回線の方が速い、AbemaTVやニコ生を見ると止まりまくるといった悲惨な状況です。

その時の構成は

これを問題の緩和のためIPoE経由にしてIPv4接続を試そうと思ったのですが課題が色々あり

  • 仕様しているプロバイダ(So-net光コラボ)ではIPoEでv4を通す場合MAP-Eが使われている(というかJPNE経由になる)
  • EdgeRouter X がMAP-E非対応
  • IO DATA WN-AX2033GRがファームウェアアップデートでMAP-E対応した(ラッキー)がPPPoEとの併用は対応しておらず、自宅サーバーに外からアクセスしたいときに困る

といったことになり困っていました。 ルーターを買い換えればいいかというと最近のルーターでもIPoEトンネル系の技術とPPPoEの併用は非対応のものがほとんどで、Synology 2600ac (25000円) や YAMAHA RTX830 (45000円) などスーパーハイエンド機種だけが併用できます。しかし高すぎる

解決策

ONUの下にスイッチングハブをつけて、PPPoE用ルーターとIPoE用ルーターを分岐させるとうまくいった

f:id:yayugu:20180717152019p:plain

WAN側にスイッチングハブという発想はなかったが今の所問題なく動いてしまっている

スイッチングハブルーター2つが3角形のダイヤグラムを描いており不穏さを感じる

注意点としては、当たり前のことだが

  • 2つのルーターのIPがかぶらないよう片方を192.168.0.1以外などに変更しておく
  • PPPoE側(ER-X)ではdhcpはオフにする
  • ER-Xを経由させたいマシンではIPは静的(固定)割当にしてデフォルトゲートウェイにPPPoEしている方のルーターを指定しておく
  • IPoE側ルーターdhcpでは固定しているIPは回避して割り当てるようにする
  • ER-X(PPPoE側)ではIPv6もdisableにした方が良い気がしたためそうした。2つのルーターがWANからRAでv6 prefixを受けたりした場合にどうなるかは試してない

雑感

  • 速度問題が解決したかはしばらく試してから追記予定
    • (追記) いまのところ速度は良好
  • サーバーについては引き続きPPPoEで低速のままだが、そこは深夜帯にヘビーに使うわけではないので自分の用途だと問題なし
  • EdgeRouter直下に1サーバーしかおいていおらず、かつEthernetポートが2つあるので、こいつが直接PPPoEすればER-Xは不要になるがやってない
  • 低価格ルーター2個とスイッチングハブ (1500円)で実現可能で、単体で高機能なルーターを購入するのと比べると圧倒的に安い
  • 自宅のサーバー・ネットワーク機器とケーブルまわりがだいぶグチャッとした
  • グチャッとするので金があるならYAMAHAの方がいいと思う

検討したもの。試したけどうまくいかなかったもの

  • DS-Lite対応のプロバイダへの乗り換え
    • ER-XはDS-Liteであれば使えるのですがDS-Lite対応のプロバイダが一時期よりも激減していて「IIJmio光コラボ」か「インターリンク ZOOT NATIVE」しかない状況らしいです
    • (追記) Excite MEC光も対応していたもよう
    • IIJmio光は知り合いが何人か使っているのらしいのですが転送量制限が厳しくヘビーユーザーの運用には向かないとみんな愚痴っていたので、DS-Lite自体諦める方針に
  • ER-XでIPv6だけパススルー(L2スイッチ)してスイッチングハブを不要に
    • スイッチングハブを持っていなかったので、IPv6だけbridgeしてWN-AX2033GRにわたすふるまいをしたかった
    • 一般的なLinuxだとebtablesなどを使ってできるようですがEdgeRouterはその辺を独自でやっているっぽく、自分のEdgeOS力とかIPv6力の低さ(俺はネットワーク屋さんではないので)もありしばらく試行錯誤して諦めた
  • WN-AX2033GRでPPPoEパススルーしてスイッチングハブを不要に
    • この機種PPPoEパススルー非対応だった
    • 対応機種は結構あるので新しく買うのであればそういうのかうといいんじゃないでしょうか

Cherry MX互換スイッチレビュー

テスターを色々買ったりして、自作キーボード向けのスイッチの知見がたまってきたので個人的な好みを書いておきます

最初に結論

Tactileスイッチは ZealiosSpeed Copper。Clickyは Box White がおすすめ

レビューできていないもの

特にCherry MX系にしぼるつもりはなかったんですが、自然とそうなった。

結構対象を絞ってます。Linearスイッチはあまり使おうと思ったことがないので対象外(いいスイッチに出会えていないだけかもしれない)。vintage系は購入もメンテナンスも大変そうでやっていないので外しています

Matiasはkeycapで遊べないことが致命的なので試してない。MX用のkeycapをmountできるようにするNexus Sliderが評判よかったら考えないといけないかも。Matiasが直接MX keycap互換のスイッチ出して欲しさがある。

Topreスイッチはとても好きなんですが、自作のハードルは高い。Realforceバラシて使う修羅の道っぽいやつも最近はあるみたいですがそこまでつわものではないです https://github.com/tomsmalley/custom-topre-guide

レビューのやり方について

感覚的なことを書いています

数値的なことについてはInput Clubの人の完璧なグラフがあるのでそちらを見るといいですよ。テスタを触りながらグラフを眺めていると感覚とグラフがだんだんリンクできるようになる

plot.ly

Tactile

押した感触、押し下げていくなかで加重に山(peak)があるスイッチで、カチカチクリック音がしないやつのことを言う。

最近は静音系も増えてきたんですがあんまり興味がないので触ってない。もともとtactileはclickyとか軽いlinearと比べるとそんなにうるさくない…よね?

Cherry MX Brown(茶軸)

一番ポピュラーではないかという茶軸。軽いのは好きなんですがTactileが弱いのとTactileの山の始まりが遅いのがあり、今となってはそこまで好みではない

Cherry MX Clear

Tactile強い。スコスコしている。なめらかではない。重め。この重さがいける人ならかなりいいやつだと思います

KBDfans Aliaz 60g, 70g

Zealiosと同じGateronが製造しているkeyboard enthusiast向けスイッチ。Zealiosと同じ透明度の高いハウジングを採用していてきれい。静音スイッチで底打ちと天井打ち(とは言わない気がする。なんていうんだろ)の音を軽減するためにシリコンが入っていて実際静か

打った心地はちょっとmushy (キーボード用語であまり気持ちよくないゴム感のこと)なのと、Tactileが弱い感じ。個人的に特に厳しかったのが、Tactileイベントの一貫性がないことで1回の上下で5〜6回起きているような気持ちになる。押すときは、top housingとシリコンが離れるところ→本来のTactile→bottomとシリコンがつく→完全に押し下げたところ、みたいな感じ。離すときは、bottomとシリコンが離れるところ→本来のTactile→topとシリコンがつくところ→上がりきったところ、みたいな

Topreと似ているというコメントを見かけたけど個人的には似ていないです。こいつに限らずいろんなTactileスイッチがTopreと似ているっていう言葉を言われがちで誤解を招くのでTopreっぽいという表現は避けたい。オリジナリティのある良さを感じよう

Kailh Pro Purple

結構なめらかで悪くないかなっていうスイッチです。Tactileは弱い。見た目はZealiosと似ていますが特性はかなり違います

Kailh Box Brown

CherryのBrownより重め。TactileもCherryのBrownよりは強いけどあんまり強くない。なめらかさは良い。Box Switch特有の生のバネ感(表現が難しい)がある

Kailh Box Burnt Orange

色がRedにしか見えないBurnt Orangeさん。Box Brownを重くしたやつで重くしたことでバランスが良くなっているけど重い。

Kailh Speed Copper

押した瞬間からTactileの山が感じられるおもしろいスイッチ。Kailhの中では一番Tactileもあり、Speedスイッチというだけあってactuation pointが高いためかなりオリジナリティーのあるスイッチになっています。かなり好き。

欠点としてはバネが重くTactileが0mmから始まるので指が触れた瞬間から固く、突き指かよっていう。また指を離した際の跳ね上がりが強く、stemとtop housingと当たったときの衝撃 / 音がデカい。

ZealPC Zealios 65g

Cherry MX Clearを軽く、なめらかにしたスイッチ。Brownよりは少し重いかも。すごく良くて現在も愛用しているがもうちょっと軽くてもいいかなと思うのと、お値段がすごい。とても高い1個$0.75〜0.88くらいするのでキーボード一つ作るのにスイッチだけで五千円とか一万円とかが飛んでいく。

Clicky

会社や家族の前で使えないタイプのスイッチです。

Clickyに関しては比較的最近出てきたKailhのclick barがめっちゃいい

音が圧倒的に心地よいのとスイッチから離す(上にあげる)ときも音がするので連打がやりやすい

金属の安全ピンみたいなバネでstemに抵抗をかけるタイプで、これと比較して旧来のプラスチックどうしでクリック音出すやつはclick jacketなどと呼ばれるようになった

Cherry MX Blue(青軸)

Clickyで一番有名な青軸。音があまり心地よくないのとバネの重さの割にTactile Peakが割と固い(stiff)という特徴があります

テスタなどで2-4mmの押し込みらへんをずっと触っているとギシギシする

Cherry MX Green(緑軸)

バネが重くなった分、相対的にTactile Peakの固さが軽減されている(絶対的な荷重は増えてます)

Cherry MX White(白軸)

緑軸のクリックが穏やかになったやつ。レアキャラ

Gateron Blue

Cherryと比べてstiffさは軽減されている

普通に使ってると関係ないけど、ギシギシはひどくなっている

Kailh Speed Gold

Cherry MX Blueと比較してactuation pointはだいぶ高くなり、Tactile Peak軽いけどしっかりしていて、バネははっきり軽くなっていて、click jacket特有の音が嫌いでなければSnappyで楽しい。

Speed Switchは一応ゲーム用のはずなんですがそんなに連打しやすくないのでゲームには向かないような。JIS / ISO Enterをッターンとやりたい人に向いている。

Kailh Speed Bronze

ここからclick bar搭載スイッチになります

Bronzeはactuation point高め、バネ重め、Tactile小さめの正統派にゲーム用スイッチで高速入力ができそう

Copperと色も名前も似ているのでよく間違える

Kailh Box White

click barで一番王道っぽい製品。バネ軽め。Tactile小さめ(Bronzeよりは感じる)です

それでもすごくいい音鳴らすので普段使いするならこれがいいんじゃないでしょうか

Kailh Box Pale Blue

Box Whiteのバネを重くしたやつ。Bronzeのactuation pointが降りてきたような触り心地になる

Kailh Box Jade

Box Whiteのclick barを強くしたやつ。Tactileめっちゃ強い。ガチャガチャ入力できます

テスタしか触ってないのであれなんですがネットでは戻りが遅い場合があるという報告もちらほらある。バネが軽くてclickの抵抗が強いとそうなっちゃうかなという気はします

音はWhiteよりも大きく、意外にもclick barの中ではそこまでいい音ではない

Kailh Box Navy

バネもclick barも一番重いやつ。指の筋力が有り余ってる人向けです。めっちゃいい音がするが普段使いすると腱鞘炎まっしぐらな気がする。

フィジェットなおもちゃとかに使う場合はこれが一番楽しそう

余談

最近Clickyはclickが聞こえないとTactileがガクッと減るという衝撃の事実を発見してしまった。騒音がひどい場所で使ったりヘッドホンやイヤホンで音楽かけたりノイキャンを使いながら触るのであればTactileの方がいいかも。Clickyはあくまでそのクリック音を耳で楽しむためのものなんだと実感させられる

CDNに動的コンテンツを安全に通すにはどうするべきか

メルカリでCDNにキャッシュされるべきでないページがキャッシュされることにより個人情報の流出が発生してしまうインシデントがありました

自分は動的コンテンツをCDNで配信することにあまり積極的ではない立場だったのですが流出への反応を見るとCDNを利用しているサービスはかなり増えてきているようです

個人情報やユーザーのプライベートデータを決して流出しないようにしつつCDNを利用する方法を考えてみました

CDN利用のメリット

このふたつ

  • 経路が最適化されレイテンシが小さくなる
  • DDoS対策となる

キャッシュされないようにする方法

Twitterで動的コンテンツもCDN通すの当たり前でしょーと言ってる人にリプしてきいてみました

  • CDNとレスポンスヘッダで二重にキャッシュを無効化する
    • キャッシュを細かくコントロールCDNを使う
      • ホワイトリスト方式で特定のパスのみキャッシュを許可
      • ログインセッションを持っている場合にはキャッシュされないようにする
  • CDNを含めた環境でキャッシュ専用のテストケースを作成しテストが必要なすべてのactionについて不正にキャッシュ専用されていないことをチェックする
    • 当然actionの追加があった場合には必ずキャッシュのテストも追加する

なるほど、これくらいしっかりとした対策をたてれば安全に使えそうですね

CDNの選定

設定を細かくできないものはよくなさそうです

ヘッダでしかコントロールできない Google Cloud CDN はヘッダをミスすると即死です

また直感的でない振る舞いをするCDNも避けた方がよさそうです

Fastlyでは Cache-Control: no-store, no-cache がキャッシュ対象となってしまい事故のにおいがします

https://community.fastly.com/t/fastly-ttl/882

CDNを動的コンテンツに使うべきか

用途や傾向ごとに

使うべき

  • アクセスが世界中から来る
    • 日本にサーバーがあって日本からのアクセスが99%とかだと経路最適化効果は薄いでしょう
  • 漏れて困るデータがない
    • 失敗しても失うものはありません、ガンガンいけます
  • DDoSが来ておりそれがCDNで防げるものである
    • 最近はAWSにデフォルトで対策がされていたりして、それで防げているものもありそうです
    • 逆にCDNを導入してもダメなものもあるのではないでしょうか
    • 今攻撃が来ていてそれがCDNで防げるなら導入すればいいと思いますがCDN入れれば完璧というものではない
  • サービス全体について充分な管理が行き届いており CDNの設定についてもサービスとともに管理できる体制が整っている
    • 安全に運用するには適切なコストをかける必要がありそうです

使うべきでない

  • センシティブなデータがある
  • ユーザーとサーバー間のレイテンシが充分に短い
  • DDoSが来ていない
  • サービスが巨大で全体をコントロールすることがむずかしい
  • サービスが放置されがち
  • 安全にキャッシュされないようにしながら導入するコストが効果に見合わない

まとめ

最初は否定的だったのですが、しかるべき手間をかければ安全に運用できそうですね

5年後の担当者が地雷を踏むといった事にならないようにしつつやっていきましょう!

Net Radio ArchiveがDockerで動作するようになりました

対応しました。詳しくはREADME参照

主な経緯としてはこのソフトの依存が割と重めで、そこそこ新しいffmpegやrtmpdumpのHEAD、WebDriverなどを利用しており、特にWebDriverはrubyのライブラリ、GeckoDriver、Firefox本体のバージョンがちょうど動くところでそろっていないと動作しないという問題がありました。

ぶっちゃけ今までに使おうと試してくれたけどセットアップ複雑すぎて放り投げていたという方も多かったのではないでしょうか。

自分もうっかりapt-get upgradeすると動作しなくなるということにうんざりしており、またtrustyからxenialに移行したいと考えていたのでDockerでコンテナ化しておけば安心して移行できるわけです。

WebDriver対応ではSeleniumのDockerfileを参考にしてなんとかFirefoxのバージョンを固定することに成功しました。これで急に動作しなくなることはなくなるはずというわけです

今回のDocker対応ではMySQLは用意していません、マストドンなんかの例のようにdocker-composeでDBまで用意しちゃうという例も多いんですが個人的にはその辺は自分では使わないので、使いたい人は用意してくださいという感じですね。

LinuxだとホストにMySQL建てて127.0.0.1からログインできるようにしておいてネットワークをホストと共用にしておけばOKなんですが。 MacWindowsだと内部的にVMをはさんでいるためネットワークの共用 (docker run –network=host) ができないみたいです。

ググると頑張る方法が乗っていたりもしますがそういう場合はMySQLも別コンテナとして建てるのが楽そう

そんな感じです

github.com

HDDを楽に処分できるようにdm-cryptで暗号化した

昔はHDDを処分するときは何回も上書きで書き込みをしていたようですが大容量のディスクになればなるほど時間はかかるし、代替されたセクタにデータが残ってしまう可能性があったりするそうです。代替セクタの使用を前提としたSSDであればなおさら。

ということで最近はディスクは丸ごと暗号化しておいて処分するときはそのキーだけ破棄すればよいということになったそうです。なるほど理にかなってますね

ということでサーバー用に新しいHDDを買ったのでdm-cryptで暗号化して運用してみることにしました

要約

想像以上に面倒だった。ドリルで穴開けた方が早い

環境

  • Ubuntu 14.04 trusty (諸事情でバージョン上げられていない)

要件

  • 内臓のSATAでつないだデータ用HDDを暗号化する
  • 新規のHDDなのでデータのinplace置き換えはなし
  • 起動時に勝手にmountされるようにしたい
  • 鍵はシステム用HDDに平文で置いてしまってよい
  • 暗号化の目的は処分を楽にすることなので処分したHDDを拾った / 買い取った人に中身を見られなければよい

技術選定

Linuxでディスクを暗号化するにはdm-cryptというものを使うのが一般的だそうです

パーティションを丸ごと暗号化することができ、例えば/dev/sdX を暗号化して、/dev/mapper/cryptX のようにブロックデバイスインターフェイスを提供してくれます。この/dev/mapper/cryptX を普通にext4などでフォーマットして使うことができる

暗号化メタデータの扱い

主に2つ

LUKS

パーティションの先頭にソルトや暗号化方式などのメタデータを入れておく方法。 blkidコマンドなどパーティションを扱うツールでそのパーティションがLUKSで暗号化されているということがわかるため扱いを間違えづらいなどのメリットがある

メタデータの部分がぶっ壊れると復旧不可能になるというデメリットがあるが(メタデータのエクスポートも一応できる)ディスクが壊れたらバックアップから復旧するべきで、壊れたディスクからサルベージしようとしている時点で負けなのではないでしょうか

plain

ソルトを使用せずに直接暗号化鍵でencrypt / decryptする方法。メタデータが一切不要になるがパーティションみても何だったかよくわからない / 暗号化方式をデフォルトに頼る / 自分で指定する必要がある などデメリットもある。

基本的にはLUKSがおすすめらしいよ

作業

$ sudo apt-get install cryptsetup

# keyの作成
# パスワードマネージャーで生成したすごい長い文字列を使っています
# そのままパスワードマネージャーに登録しておくことでバックアップも兼ねる
$ sudo sh -c'echo "XXXXXXXXXXXXXXXXX" > /etc/hddXkeyfile
$ sudo chmod 400 /etc/hddXkeyfile

# ここでデバイスを間違えると即死なので注意
$ sudo cryptsetup -v luksFormat --key-file /etc/hddXkeyfile /dev/sdXN

# /dev/mapper/cryptX にマウントされる
$ sudo cryptsetup --key-file /etc/hddXkeyfile open /dev/sdXN cryptX

$ sudo mkfs.ext4 /dev/mapper/cryptX

# UUIDの確認
$ sudo blkid
...
/dev/sdXN: UUID="XXXXX-XXXXX-XXXXX-XXXXX" TYPE="crypto_LUKS"
...

# 起動時用設定
$ sudo vi /etc/crypttab
# 例
# cryptX UUID=04d26127-cb73-49fe-b5a5-3ad2ede5ba8b /etc/hddXkeyfile luks,timeout=60

$ sudo vi /etc/fstab
# 例
# /dev/mapper/cryptX /storageX       ext4    errors=remount-ro 0       2

$ sudo mkdir /storageX
$ sudo mount -a
$ touch /storageX/testfile

# crypttabの確認
# openコマンドで手動でmappingしたときと同一の結果になるかチェックしておく
$ sudo umount /storageX
$ sudo cryptdisks_stop s2
$ sudo cryptdisks_start s2
$ sudo mount -a
$ ls /storage2
lost+found  testfile

参考にしたページ

https://wiki.archlinuxjp.org/index.php/Dm-crypt

感想

ネット上のいい感じの資料がArchWikiくらいしかなく世の中の人はあんまり暗号化してないのではないでしょうか。 またWindowsMacと比べると自由度が高い代わりにだいぶ手順が煩雑めで自分で考える必要があることも多い

今回はやらなかったのですが鍵自体を暗号化したり、起動ディスクを暗号化したり、鍵をネット経由で取得したりといったこともがんばればできるそうです。できるそうですがやりたいかと言われると…

響 Hibiki radio station のリニューアルに対応

響がリニューアルしていたので、net-radio-archiveも対応しました。

まるまるっと全部変わっていたのでコードもまるまるっと書き直しました。

Support Hibiki renewal · yayugu/net-radio-archive@8bb01a5 · GitHub

一番大きな変更として配信プロトコルが PC:rtmp(flash) / スマホ:HLS という構成からHLS一本に統一されました。

net-radio-archiveではHLS対応のため、新しめのffmpegが必要となります。

ラジオを録音/ダウンロードできる net-radio-archive はこちら↓

github.com