スマホパケットキャプチャ

概要 スマホの通信をパケットキャプチャする。動機としてはスマホゲームをやってるときにかなりの頻度でロード中に固まってそのままタイムアウトする現象が引っ越してから発生しており、何らかの原因がわかるかなと思ったため。 結果的には現時点では原因は不明だが、パケットキャプチャ環境を作っていたら色々勉強になったのでやり方をメモしておくことにする。 手順の概要 最終的には下記のような構成で"PC"にてパケットをキャプチャした。 図を見ると明らかだと思うが、PCにはNICが2つ搭載しているのでこれを利用して、PCをルーターのように使いスマホ側のNICのパケットを取るという手法。ちなみにPC2というのがあるが、これは疎通確認やRouter2の設定などスマホではやりにくい操作を行うためのノートPCでキャプチャには無くても良い。むしろキャプチャ中はPCからではPC2のパケットなのかスマホからのパケットなのかがわからなくなるので外していた。 大まかな手順は下記の通り。 図のように各種機器を接続する(Router2とスマホの間はWi-Fiであり、それ以外は有線) PCのインターネット側のNICはDHCPによるIP割当を受ける、スマホ側(図下側)のNICは手動にて192.168.10.1/24を設定する PCについてipv4がフォワード設定ONとなっていることを確認する PCについてスマホ側のNICにてiptablesを用いてNATを設定する PCについてスマホ側のNICにてdhcpdを起動してIP自動割当を可能にする PCについてスマホ側のNICにてiptablesでDNSとDHCPのパケットを遮断しないよう設定する Router2をルーターモードで起動してPCからDHCPでIP割当を受ける(ローカルルーターモード) スマホを接続して疎通確認する 問題なければキャプチャする これを見ると、Router2はブリッジモードのほうが良いように思うが、ブリッジモードだと何故かうまく動かなかったので今回は面倒だったがルーターモードで実施した。 以下に詳細な手順を残しておく。 手順に関するメモ 前提 PCのOSはArch Linuxである PCのインターネット側のNICをeno1とする(実際にはKVM向けのブリッジを作っていたのでbr0だが、eno1と置き換えて記載する) PCのスマホ側のNICをeno2とする Router2はAterm WX1500HPである スマホはAndroidスマホである NICに手動でIPアドレスを設定する PCにてスマホ側のNICには手動でIPアドレスを設定する。今回は192.168.10.1とした。 $ ip addr add 192.168.10.1/24 dev eno2 PCのipv4フォワードがONになっていることを確認する net.ipv4.ip_forwardがON(1)になっていなければならない。下記のようにして確認する。 $ sudo sysctl -a | grep 'ip_forward' net.ipv4.ip_forward = 1 net.ipv4.ip_forward_update_priority = 1 net.ipv4.ip_forward_use_pmtu = 0 なっていなければ、設定を変更する。パケットキャプチャ環境は永続させるようなものではないので今回の起動中だけONであれば良い。そのためコマンドで下記のように一時的に変更する。 $ sudo sysctl net.ipv4.ip_forward=1 また、念の為デフォルトルートを次の通りに変更しておく。 $ sudo ip route del default $ sudo ip route add default via 192.

新しいPCを組んだときのメモ

新しいPCについて 今回関東に引っ越しするのをきっかけに新しいPCを組んだ。正直既存のPCでそこまで性能には困ってなかったし、前に組んでからまだ3年くらいしか経ってないので早すぎた感もある。とはいえ、増え続けるメディア系にストレージは追いつかないし、軽く編集しようにも動画編集するにはスペックが少し不足気味ということで全く需要がないわけではなかった。古いPCパーツはほとんどは後輩にあげてしまったが、正直残しておいてサーバーにすればよかったかもしれない。 今回の構成 今回はかなり奮発して構成している。旧PCから使いまわしたのは電源とケースと一部HDD、SSDのみ。 種類 製品・仕様など マザボ ProArt X670E-CREATOR WIFI メモリ 16GB x 2 CPU Ryzen 7700 SSD 1TB M.2 SSD x 2 GPU RTX 4070Ti だいたいこんな感じ。マザボが8万、GPUが13万、CPUが5万くらいなのでこれだけで20万オーバー、その他色々入れたらパーツだけで30万。これに加えて映りがよいモニターはほしくて LGの4Kモニター(27UQ850-W)も買ったので、なんだかんだ40万くらいはした感じ。 さらに、最近のマザーボードはけしからんことにSATAが少ない傾向にあり、多くても6本で6本ついてるマザーボードはかなりレア。基本的には4本が主流で少ないものなら2本というものもある。前にPCを組んだときは8本とかついてる製品も別に高くないものでも普通にあったし、前のマザボはそれくらいあったきがする。 SATA接続のストレージはメインにはならないが、動画や写真その他ドキュメント類など色々保管しておく倉庫にするし、重要な思い出データなども多数あるため多少冗長性を考慮してRAIDを組んだりするのでSATAが少ないと困る。ということで、Linuxでも動作すると噂の玄人志向のSATA拡張ボードも購入している。 OSの構成 OSはこれまでと同様にWindows/Linuxのデュアルブートで構成している。前回はWindows側はケチってSATAのSSDにインストールしていたが、今回はM.2 SSDを2枚さしてそれぞれにWindowsとLinuxをインストールする構成としている。 Linux動作について 新しい構成だと心配になるのがLinuxがちゃんと動作するかということだが、結果から言えば正しく動作している。ただし、マザーボードのRAID機能(fakeRAID)はドライバがないので認識しない。後述するがfakeRAIDのせいで面倒なトラブルにも巻き込まれたので、Linuxを使う予定の人はこれは使わないほうがいい。というか正直今回のトラブルを鑑みると、fakeRAIDなんて機能は今後仮に使える環境だったとしても使わないかもしれない。 トラブル1 今回発生した大きなトラブルとして、fakeRAIDを一度有効にしたあと無効にした結果マザボのUEFI設定画面に入れなくなるというものが起こった。結論から言えば、最終的にはBIOSのアップデートにより解決することができた。 もともとマザボのRAIDでRAIDアレイを1本作り、それをNTFSでフォーマットすることで暗号化はできないが Windows/Linux共有の大容量ストレージとして利用することを構想していたのだが、前述の通りマザボのRAIDはドライバがなければ読み込めないことを失念しており、Linuxでは案の定ドライバがなかったため読み込めず断念した。(認識すらしない) 以上の経緯で、一度SATAのRAID機能をONにしたがあとからOFF(AHCI)にするという操作を行った。この操作をした結果、ブート中にF2やF8を押してUEFI設定(BISO設定)やブートメニューを開こうとすると画面が暗転したまま何も表示されなくなるという現象が発生した。この現象に対して下記の解決策は無意味であった。また、この現象が発生していてもOSは通常通り起動でき、 LinuxのブートローダーでWindowsを呼び出せるようにすることでマザボのブートメニューが開けなくても両OSを起動できた。(ただし、この状態では何らかのマザボの設定変更は不可能であり、万一Linuxが破損してUSBなどからブートして修正しようとした場合、 USBのブートも選択できないことから解決する必要があった) 電源を一度完全にOFFにする(コンセントも抜く) RAID化していたドライブを接続解除またはRAID化していたドライブの中身のフォーマット マザーボードのCMOSクリア Windows上からマザーボードの診断を実施 正確な原因は現在も不明ではあるが関連するパーツとして玄人志向のSATA拡張ボード(SATA3-I6-PCIE)が関連していることが判明した。このポートをマザーボードから抜くことでマザボの設定画面は表示されるようになった(さし直すと再度表示されなくなる)。またその後の調査によって、SATA拡張ボードにSATAドライブが2本以上接続された際に設定画面が表示されなくなることがわかった。つまりSATAドライブが1つも接続されてなければボード自体を接続していても問題なく設定画面が表示された。ちなみにこのSATAドライブは最初にRAID化したドライブではない。また、SATAドライブを外してBIOS設定画面を開きSATAの設定をRAIDに戻したところ SATA拡張ボードおよびSATAドライブを複数さした状態でもBIOS画面は表示された。(設定変更が必要なときなどだけSATA拡張ボードを抜くという暫定運用も可能ではあったがダサいので解決を続行した。また、SATAをRAIDモードにして利用するというのもマザボ側のSATAポートはLinuxでは使えなくなるが拡張ボード側の6ポートは使えるため当面問題はない状態だったがこれもなんだかもやっとするので実施しないこととした)。 関連するパーツはわかったものの、パーツを抜く以外に解決策がない状態であったため、最終的にはマザボのBIOSアップデートを実施した。(SATAは一部のシステムファイルに活用しているものの、基本的にはOSの起動には関連しないストレージであったため、USBブートやマザボの設定変更などが必要になった際にだけ拡張パーツを抜くという運用も不可能ではなかったが、ダサいと思ったのでなんとか解決を続行した) 今回購入時点のバージョンは05XXというおそらく最初のバージョン。今回は当時最新だった17XXというバージョンに更新した。ちなみにUSBに相性があったのか2本のうち1本のUSBではアップデートができなかった。とはいえ無事にアップデートでき、起動した結果SATA拡張ボードおよびSATAドライブを複数指した状態でもBIOS設定画面が表示できるようになった。 ただし、試していないので実際どうなるかはわからないが再度SATA設定をRAIDにした場合同じ現象が再発する可能性があるため完全に解決したかは不明である。一旦今後の運用に問題はなくなったので今回はここで問題は解決できたものとする。 マザボのfakeRAIDはチップメーカーに依存しているし、ハードウェアRAIDのように見えてソフトウェアRAIDだし、OS上で死活監視やメンテナンスなども実施しにくいし、今回のような謎トラブルも起こりやすいということがわかったので今後はよほどのことがない限りは利用しない方針としたい。(一時的にONにすることすらしない) トラブル2 上記のトラブルに起因してもう1つトラブルが発生した。上記のBIOSアップデートによりUEFIの設定が消えてしまい、再度ArchLinuxなどは調整が必要な状態となったが、今度はLinuxが起動できないという問題が発生した。Windowsの起動は問題ない。 ArchLinux isoを書き込んだUSBから起動すると下記のような画面でハングする。 “nouveau 0000:01:00.0: unknown chipset (194000a1)“というメッセージを最後に停止しており、nouveauといえばオープンソースのNVIDIAドライバなのでグラボ関連かと思ったが、“debug"をカーネルオプションにつけてブートすると次のようになった。 先程のエラーで止まっていたわけではなく、更にその先まで進んでいる。実際に止まっていたのは”[drm] JPEG decode is enabled in VM mode"である。 こちらの問題は割と解決に時間がかかってしまったが、こちらについては原因と解決策は理解できた。結論から言えば、今回のBIOSアップデートに起因して外部のGPU(NVIDIA)とCPU内蔵のGPU(AMDGPU)が両方OSに認識される状態となったが、 AMDGPUのほうの初期化(drmの初期化)に失敗しており、その時点でハングしていたというのが原因。解決策としては、起動時にオプションをつけてdrmのAMDGPU読み込みを無効化する。今回のグラボは外付けのRTXであるためOSの動作としては全く問題はない。具体的なブートオプションとしては、“modprobe.

PostgreSQLのアップデートめも

手順メモ データディレクトリをバックアップする(rename + copyが良いと思う) サーバーに現行postgresとアップデート先のpostgres両方を入れる 新しいバージョンのinitdbで新しくデータディレクトリを初期化する 上記両方のpsqlサーバーが停止していることを確認する pg_upgradeコマンドで新旧データディレクトリ(D, dオプション)と新旧postgresのbinディレクトリ(B,bオプション)を指定してデータ移行 新しいpostgresのサーバーを立ち上げる 最低限はこれでできるっぽい。 その他メモ 今更だがデータベースのLocaleは結構重要なようで、新旧DBのLocaleが不一致だった場合はpg_upgradeは失敗する コンテナ上で作業する場合は、作業用コンテナをdocker runでベースのイメージから立ち上げて作業していくのが良さそう(-vでディレクトリマウントするの忘れずに) ロケール生成 rockylinuxをコンテナで動かした場合、ロケールが入ってないのでコケることが多い。そういうときは、必要なロケールデータを以下のようなコマンドでインストールする。 $ dnf install glibc-locale-source glibc-langpack-en langpacks-en # en_USを生成したい場合 それから、localedefで生成する。 $ localedef -f UTF-8 -i en_US en_US.UTF-8 これでロケールを使えるようになる。

LDAPをとりあえず動かすメモ

LDAPサーバーを構築する https://qiita.com/jca02266/items/bf00acf88fde8bc29775 https://www.slideshare.net/nobuyukisasaki165/ldap-389ds-250565944 大体このへんでわかる。 てか、LDAPさわらなさすぎる間にOpenLDAPじゃなくて389 Directory Serverというのを使うのがいい感じって言われてるのね。内部的にはOpenLDAPを使ってそうな雰囲気もあるけど… メモ 割と動かすだけなら簡単にできる。 $ sudo dscreate iteractive として、対話的にサーバーのインスタンスを設定する。インスタンスを複数作ったことはないが、多分複数作ることで1台のサーバー上で複数のLDAPサーバーを容易に動かせるようになってるんだろうな。 selinux python module not found, will not relabel files. Selinux support will be disabled, continue? [yes]: Enter system's hostname [himapoyo]: himapoyo.net Enter the instance name [himapoyo]: himapoyo Enter port number [389]: 389 Create self-signed certificate database [yes]: yes Enter secure port number [636]: 636 Enter Directory Manager DN [cn=Directory Manager]: Enter the Directory Manager password: PASSWORD Confirm the Directory Manager Password: PASSWORD Enter the database suffix (or enter "none" to skip) [dc=himapoyo,dc=net]: Create sample entries in the suffix [no]: no Create just the top suffix entry [no]: yes Do you want to start the instance after the installation?

Redmineを立ち上げるメモ

Redmineを自鯖に構築する 基本的な手順はRedmineのインストールガイドにある方法で良いと思う。 https://blog.redmine.jp/articles/4%5F2/install/ubuntu/ 少し情報が古いが、これで大体いける。 DBの準備 適当なディレクトリにsvnでredmineを展開 redmineの設定 bundleで依存関係をインストール(変更あり) 改ざん防止キーの生成とマイグレーション Passengerの設定 bundlerで依存関係を入れるとき ドキュメントに書いてる通りに入れようとすると何やら入らなかったりする。 $ bundle config set path 'vendor/bundle' をしてから $ bundle install でローカルに?入る気がする。 RubyのGemやらbundler周りは全然わからないのでちゃんと把握してからやるべきなんだろうが… (雰囲気でサーバーを構築している) Passengerの設定 gemからPassengerを入れる必要はなく、OSのパッケージマネージャで入る場合はそれで良い。設定内容は概ねドキュメント通りで良い。 うまく行かない場合はPassengerのログを見ると良いが、ログの設定方法は次のようにする。 PassengerLogFile /var/log/httpd/passenger.log コケる場合がある [ E 2022-05-14 17:13:47.4155 1955/Th age/Cor/App/Implementation.cpp:221 ]: Could not spawn process for application /srv/http/redmine: The application encountered the following error: You have already activated strscan 3.0.1, but your Gemfile requires strscan 3.0.3. Since strscan is a default gem, you can either remove your dependency on it or try updating to a newer version of bundler that supports strscan as a default gem.