2023年5月7日日曜日

LAN-W300N/RをUSB電源で使ってみた。

 野外でWiFiルータを使いたいということで、野外だと主に2.4Ghz帯のWiFiじゃないと使いにくい(5.6Ghz以外は電波法違反)ので2.4GHz帯しか使えないLAN-W300N/Rを持ち出してみた。まぁESP32-CAMで遊ぶためなので2.4GHzだけで十分。

USB-C対応のモバイルバッテリだとUSB PD Decoyを使うと普通に12Vが出せるので問題がないんだけど、今回はこの前購入したSX1308モジュールが余っていたので5Vから昇圧してみることに。一応LAN-W300N/Rの純正ACアダプタは12V0.5Aなのでスペック的には大丈夫そう。まぁそもそもルータのCPUは3.3Vなのでここまでの昇圧は必要なさそうだけどLAN-W300N/RにPSP用の給電ケーブルで5Vで給電したら調子が悪かったので結局12Vまで昇圧してみることに。

SX1308モジュールにUSBケーブルをハンダして、出力が12Vになるように調整。DCジャックを取り付けてモバイルバッテリーで供給してみたら普通に起動できてしまった。消費電力的に大丈夫なのかと思って昇圧DCコンバータを触ってみてもほんのりあったかいぐらいで問題なさそう。一応SX1308自体は2Aまで行けるらしいけどこの無線ルータの純正ACアダプタが12V 0.5Aなので結構余裕そう。

コンパクトにしたかったし、電圧を変更できないように面実装タイプの抵抗に置き換えた。抵抗サンプルブック便利。この個体はVrefが0.615VぐらいだったのでR1が10kΩ、R2が510Ω+20Ωに設定した。

USBチェッカで電流を測ってみたけど300mAぐらいだった。この無線LANルータのエネルギー消費効率は2.3Wらしいけど昇圧回路通しても消費電力は1.5Wぐらいということに。変換効率91%以上としてもなかなか低消費電力。たまに少し電流が流れることがあるのでこの電流計では見れないぐらいのスパイクがあるのかもしれないけど。(WANにネット回線を繋いでWiFiクライアント1台で測定)

WANにLANケーブルを指してDHCPのルータモードで起動しても普通に通信できた。iPhone(20Mhz/144Mbps)でスピードテストすると86Mbpsぐらいは出ていた。ちなみにスピードテスト中は電流も5Vで450mAぐらい流れる

チャンネルボンディングの設定の比較もしてみた。詳細設定→無線LAN設定→詳細設定(上級者向け)でチャンネル幅を「Auto 20/40 MHZ」に変更するとチャンネルボンディングを有効にすることができる。デフォルトは20MHzだった。20MHzに設定するとPCからは144Mbpsとして認識された。40Mhzの場合は300Mbpsとして認識される。スピードテストで比較すると、20MHzのときは先程のiPhoneのときと同じく80Mbps付近、40MHzのときは95Mbpsぐらいまで出ていた。LANポートが100Mbpsまでなのでもはやこのルータの限界付近まで出てるっぽい。

ちなみにLAN-W300N/Rのファームウェアは最新の2.34にアップグレード済み。このルータはいろいろな脆弱性が報告されていたので最新で使わないと危ないかも。さらに色々設定変更して使用している。まぁ今回はオフラインで遊ぶ予定なのであんまり心配しなくてもいいけど。
無線LAN設定→基本設定→マルチSSIDで「logitegameuser」は無効にしておいたほうがいいかも。(WEPはガバガバなので)
無線LAN設定→セキュリティ設定はWPA2(AES)固定が良いかも。(それ以外だとiPhoneでセキュリティー警告が出てしまう。)

今回は部品が余っていたので作ってみたけど、既製品もあるっぽいのでケースとかを考えると既製品のほうがお得かも。

そういえばLAN-W301NRのACアダプタはLA-5W-5Sで、端子は同じだけど5V1Aなので注意。LAN-W300N/DRはLA-10W5S-09で5V2Aだし。DCコンバータ入ってるとはいえ全部同じ端子でACアダプタ違うのは危ない気がする。5Vタイプのルーターに関してはPSPの給電ケーブルがそのまま使えそうだけど。

2023年5月4日木曜日

Razer HUNTSMAN V2 TKLを買ってみた。

 赤軸化したLogicool G610の特定のキーが効きにくくなって来てしまったので、キートップも結構減ってることもあって新しいキーボードを買ってみた。
友人にRealforceとか光学式スイッチを進められたので進められるがままにHUNTSMAN V2を買ってみた。一応現物を触ってから購入したんだけど、やっぱり最初の印象だけじゃわからないこともあるし、スペック買いである。

今回はテンキーレスにしてみた。机が広く使えるかなとか思ったり。
デザインも結構シンプルで好み。オプションのキートップに交換するとLEDで光ってないときは無印キーボードみたいになるRazer Phantom キーキャップとかもあるみたいで、ちょっと面白そう。
ケーブルは脱着式。これは断線したときに便利そう。

今まで使っていた赤軸より少し重く感じるけど赤軸がヘタっていたのかもしれない。感触がまあまあ違う。エンターキーだけ少しうるさい感じがするけど…

これでマウスとキーボードが両方Razerになってしまった。


2023年4月30日日曜日

Twitter API 2でPythonからつぶやいてみた。

 ラズパイ鯖のエラーとか状態を定期的にTwitterに投稿していて、結構この運用方法が便利だったんだけど、突然ツイートされなくなったのを発見したので直してみた。

というのも今まではTwitter API 1.1を使っているtcli.shというシェルスクリプトを使ってツイートしていたんだけども、API 2に以降が始まっていたらしい…
そして昨日までだったということをあとから知った。

API 2に対応しないといけないんだけど、tcli.shのサイトはもうなさそうだしだいぶ前から使っていたので一新することにした。
とりあえずPythonで便利そうなライブラリが合ったのでそちらを使ってみることに。

python-twitter-v2

このpython-twitter-v2を使えば簡単に作れそう。

まずはTwitter DeveloperにログオンしてV2への以降を行う。とりあえずFreeアカウントで良かったのでアプリのページを開いて上の方にV2へのリンクが出ていたのでそちらをクリックして赤いDowngradeボタンを押す。
そしてプロジェクトを作成しないといけないのでProjects & AppsのOverviewでプロジェクトを作成する。プロジェクト名とか説明をつけてStep 4で今まで使っていたアプリを選択すればOK。

Consumer KeyもConsumer Secretもそのまま使えそう。

そんでもってpipでpython-twitter-v2をインストールする。

python3 -m pip install python-twitter-v2

あとはアプリ認証のURLを生成する。

from pytwitter import Api
api = Api(consumer_key="Consumer Key",consumer_secret="Consumer Secret",oauth_flow=True)
print(api.get_authorize_url())

これで実行するとURLが生成されるのでこれをブラウザとかに貼り付けて使いたいTwitterアカウントからアプリ認証をする。するとリダイレクト用の設定したURLに飛ばされるのでそれをコピーする。(URLの後ろにキーとか色々ついてくる)

先程の3行めをコメントアウトして

print(api.generate_access_token(response="ログオンして帰ってきたURL"))

これを追加してもう一度実行。

そうするとoauth_tokenとoauth_token_secretが返ってくるのでそれをメモる。

import sys
from pytwitter import Api
api = Api(
    consumer_key = 'Consumer Key',
    consumer_secret = 'Consumer Secret',
    access_token = 'oauth_token',
    access_secret = 'oauth_token_secret'
)

args = sys.argv
api.create_tweet(text = args[1])

これをtcli.pyとかで保存して

python3 tcli.py "ツイートしたい文"

で実行すればツイートできる。

とりあえずこれでまたラズパイからつぶやけるぞ。

2023年4月2日日曜日

DD-WRTでクライアントにNTP鯖を強制的にリダイレクトしてみた。

 WiFiにつながるデバイスが増える中でRTCを持たずにNTPサーバから時計を取ってくるデバイスが増えてると思うんだけども、NTPサーバを強制的に変更できないか試してみた。

微妙に時間がズレてるのとか気になるし。中華デバイスとかだと鯖も中華とかなのかな。

方法としてはNTP鯖が特定できればルータのhostsとかdnsmasqで飛ばせたりするんだろうけども、今回はiptablesでNTPポートの123を特定のNTP鯖に飛ばすようにしてみた。

iptables -t nat -A PREROUTING -p udp -m udp --dport 123 -j DNAT --to-destination 162.159.200.1:123
iptables -t nat -A POSTROUTING -p udp --sport 123 -j SNAT --to-source 162.159.200.1:123

DD-WRT化したルータなのでiptablesがそのまま使えるのでWebアクセスでSSHを有効にしてSSHからこの2行のコマンドを実行した。NTP鯖はCloudflare Time Servicesを使わせてもらった。これでこのルータに繋がっているデバイスからNTPのポート123にアクセスする場合は全部指定したIPアドレス(162.159.200.1)の鯖につながるようになる。

ためしにコントロールパネルの日付と時刻から適当な鯖にインターネット時刻設定するとうまく同期できるようになってる。でも適当なアドレスではだめっぽい。DNSでIPが返ってくるような存在するアドレスであればうまく設定される。

ちなみにこの設定、ルーターを再起動するとリセットされてしまうので、常に有効にしたい場合はAdministration→CommandsでStartupに入れておくといいかも。削除したい場合は

iptables -t nat -L --line-numbers

でリストを表示してから

iptables -t nat -D [リストの項目] [番号]

で削除できる。(デフォルト状態からの追加だと、iptables -t nat -D PREROUTING 3とiptables -t nat -D POSTROUTING 6だった)

ローカル環境でRTCを持たないデバイスにRTCを持つデバイスからNTPしたい場合にも使えるかも。

2023年3月18日土曜日

DD-WRTでDNS広告ブロックを設定してみる。

 この前ルーターが壊れて更新したので、前のルータでやっていたことを思い出しながら元に戻してくことに。壊れたルータにはアクセスできないし…

その一つがDNSブロッカー。広告をブロックするためにDNSをブロックしてしまうやつ。仕組み的にはhostsファイルにブロックしたいDNSを127.0.0.1に飛ばすように設定するやつ。

元々シェルスクリプトで定期実行していたので記憶を頼りに探してみたところ、DD-WRTのフォーラムにそれっぽいスクリプトが。今回はこれをベースにカスタマイズして見ることに。

WZR-1750DHP2はフラッシュ領域がたくさんあるので、JFFS2 SupportとSSHを有効にしてWinSCPなどを使ってSCPでアクセス。
/jffs/にadblock.shというファイルを作って、パーミッションを755に設定。

そしたらadblock.shの中身を
#!/bin/sh
logger WAN up script executing
if test -s /tmp/hosts0
then
        rm /tmp/hosts0
fi

logger Downloading http://www.mvps.org/winhelp2002/hosts.txt
(curl -k -s https://winhelp2002.mvps.org/hosts.txt |
    sed '2,$s/0.0.0.0/127.0.0.1/g; s/[[:space:]]*#.*$//g;' |
    grep -v localhost ;
curl -k -s https://280blocker.net/files/280blocker_domain_$(date +"%Y%m").txt |
    sed 's/^/127.0.0.1 /g; s/[[:space:]]*#.*$//g;' |
    grep -v localhost ;
#curl -k -s https://raw.githubusercontent.com/r-a-y/mobile-hosts/master/AdguardDNS.txt |
#    sed 's/0.0.0.0/127.0.0.1/g; s/[[:space:]]*#.*$//g;' |
#    grep -v localhost ;
#curl -k -s https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt | 
#          grep "^||" | grep -v "*" | sed 's/||/127.0.0.1 /g'| tr -d '^';
curl -k -s https://raw.githubusercontent.com/r-a-y/mobile-hosts/master/AdguardMobileAds.txt |
    sed 's/0.0.0.0/127.0.0.1/g; s/[[:space:]]*#.*$//g;' |
    grep -v localhost ;
#curl -k -s https://raw.githubusercontent.com/multiverse2011/adawaylist-jp/master/hosts |
#    sed 's/127.0.0.1/127.0.0.1/g; s/[[:space:]]*#.*$//g;' |
#    grep -v localhost ;
curl -k -s https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt |
    sed 's/^/127.0.0.1 /g; s/[[:space:]]*#.*$//g;' |
    grep -v localhost ;
curl -k -s https://warui.intaa.net/adhosts/hosts.txt |
    sed 's/0.0.0.0/127.0.0.1/g; s/[[:space:]]*#.*$//g;' |
    grep -v localhost ;
### Extra blocking dns ###
echo 127.0.0.1 adm.shinobi.jp ) | tr ' ' '\t' |
tr -s '\t' | tr -d '\015' | sed '/^$/d' | sort -u >/tmp/hosts0 ### Extra blocking dns end ### ### White List ### sed '/vortex.data.microsoft.com/d' /tmp/hosts0 -i ### White List end ### grep addn-hosts /tmp/dnsmasq.conf || echo "addn-hosts=/tmp/hosts0" >>/tmp/dnsmasq.conf logger Restarting dnsmasq killall dnsmasq dnsmasq --conf-file=/tmp/dnsmasq.conf
こんな感じに設定して保存。
いろんなDNSブロックリストを使えるようにしてみた。追加でDNSを手動でも入れられる。ここにローカルのサーバのIPとかを入れると外部向けのドメイン名でローカル鯖にアクセスしたりもできるので便利かも。

あとはcronでこのスクリプトを定期的に実行するだけ。
使ってないような時間帯に毎日更新するようにしてみた。
とりあえずこれを設定しておくとFireTV StickのTVerの広告も消え去るんだよなぁ。
あとはスマホ向けのヤヴァい広告が消えるのでスッキリ。スマホとかタブレットをWiFiで使うときはすごく見やすくなる。

追記:Xbox Liveの実績解除のためにWhite Listも実装しました。


2023年3月12日日曜日

DD-WRTでOpenVPNを設定してみた

 DD-WRT化していたルータの調子が悪かったので再起動したら立ち上がらなくなってしまって、結局いろいろ試した結果どうやらNANDフラッシュに不良セクタがあって設定保存してもNVRAMをクリアしないと起動しなくなってしまったので買い替えた。

もともとWZR-1166DHPを使っていたんだけど、DD-WRT対応のルータで最近のやつはむしろRAMが少なかったりするので結局中古で上位モデルのWZR-1750DHP2を購入してみた。1000円ぐらいで買えたのでつなぎとして使って、新品の良さげなやつ探そうかなとか。DD-WRTじゃなくてMarlinでもいいかなとか思ったり。

それはさておき、まずはWZR-1750DHP2のDD-WRT化。
ファームウェアをv2.25に更新してデバッグモードでログオンしてbuffalo-wzr-1750dhp-webflash.binのv3.0-r51887を書き込んでみた。WZR-1750DHP用のファームウェアだけどWZR-1750DHP2でも問題なく動くっぽい。

WZR-1166DHPのときの設定に色々書き換えていたんだけど、どうもSoftether VPNのL2TPだけうまくつながらない。Softether VPNの方はつながるんだけどね…
iOSから使いたかったので前はL2TPの設定をしていたんだけど。

ということでSoftether VPNの設定は諦めてOpenVPNを使ってみることに。一応こっちもiOS対応のアプリから設定すればiOSからVPNが利用できるらしい。

ServicesのVPNタブを開いてOpenVPN ServerのEnable ServerをEnableにするとOpenVPNの設定が開く。iOSだとServer ModeのTAPが対応していないっぽいのでTUNを使用した。

とりあえずこんな感じに設定した。
暗号化アルゴリズムは適宜。

ここまで設定したら次はCAと秘密鍵を生成する。今回はWindowsで設定したかったのでvpnux PKI Managerを使用した。
このツールで簡単にキーが設定できた。
ディレクトリを設定したらCAの新規作成をクリック。すると1~2分でセキュリティー証明書を生成してくれる。
あとはサーバー用証明書(デフォルトでserver_1)とクライアント証明書(デフォルトでclient_1)を一つずつ作成した。名前はわかりやすいように適当に変更してもOKだと思う。クライアントはクライアント文だけ生成すればいいと思う。(上の設定でAllow Duplicate ClientsをEnableにすると一つのキーで複数のクライアントから接続できるようになる)

とりあえず証明書を生成したらDD-WRTの設定の下の方を埋めていく。
DH PEMはdh2048.pemの中身をメモ帳で開いてそのままコピペ。
CA Certificateはca.crtの中身をメモ帳で開いてそのままコピペ。
Public Server Certificateはserver_1.crtをメモ帳で開いて一番下の-----BEGIN CERTIFICATE-----から最後までをコピペ。
Private Server Keyはserver_1.keyをメモ帳で開いて一番上の-----BEGIN PRIVATE KEY-----から-----END PRIVATE KEY-----までをコピペ。

Additional Configurationにはdnsmasqの設定に関連して
push "dhcp-option DNS 10.8.0.1"
を追加しておいた。

とりあえずこれでOpenVPN Server側の設定は完了なのでApply Settingしておく。
次はServicesのServicesタブでDnsmasqの設定。これをしておかないとOpenVPN接続経由でインターネットに出られない。
Additional Optionsの上の方に
listen-address=127.0.0.1
listen-address=10.8.0.1
の2行を追加してApply Setting。

あとはポート開放。NAT/QoSのPort ForwardingでOpenVPNの設定で使用したポート(デフォルトで1194のUDP)を開放する。
ルーターのIPアドレスは環境に合わせて選択。EnableにしてApply Setting。
これでルーターを再起動すればOpenVPN鯖側は設定完了。

クライアントの設定ファイルは先程のOpenVPN Serverの設定の下の方の"Export Client Configuration"ボタンを押すとダウンロードできる。
ダウンロードしたovpncl_config.ovpnをメモ帳とかで開いて
remoteの行をDDNSとかグローバルIPに書き換える。
一番下のcertとkeyのところにサーバーの設定のようにclient_1.crtの中身とclient_1.keyの中身を同じようにコピペ。
あとはCAがないと言われるので一番最後に
ca.crtの中身を同じように<ca>と</ca>の間に挟むようにしてコピペして保存する。

iPhoneから接続する場合はiClowdにアクセスしてPCからこのファイルをアップロードしてiPhoneのOpenVPNアプリから開いた。あとはアプリ側で設定ファイルを開いて接続することができた。


2023年2月26日日曜日

ユピテル SN-TW9200dPで64GBのmicroSDを使う。

 親の車のドラレコどうしようと思って探していたら液晶が無いスッキリした2カメラドラレコが出ていたので買ってみた。ユピテルのSN-TW9200dPってやつ。
設定もスマホのアプリからWiFiでできるらしい。正直ドラレコ本体の小さい画面では動画の確認もしにくいのでこういうのは便利かもしれない。

SN-TW9200dPはWeb専用パッケージで化粧箱もエコな感じ。電源ケーブルは末端が半田で処理されているので、ヒューズボックスから電源を取るのが前提な感じ。
車種別でオプションカプラーが出ているのでプラス側はそれから取って、GND側はエーモンのφ6のクワガタ端子を使用して取り付けた。

リアカメラ用の端子も2.5mmジャックなので結構通しやすかった。

そんでもって付属のmicroSDカードが16GBで標準設定で1時間45分ぐらいの撮影時間だったので、ちょっと物足りないなと思ってドラレコ用microSDを購入しようとしていたんだけど、このモデルはどうやらmicroSDHCまでしか対応していないので32GBまでしか使えない模様…

64GB以上はmicroSDXCになって、フォーマットもFAT32からexFATになるため機器側の対応が必要というアレ。

しかしホンダ純正のドラレコも64GBをFAT32でフォーマットしたら行けていたので、ダメ元でSanDiskのHIGH ENDURANCEの64GBを購入してみた。

SDSQQNR-064G-GN6IA

一応ベンチマークしてみたけどめっちゃ速い。

早速SN-TW9200dPに入れてみるとやっぱりエラー。しかしその状態でもSDカードアイコンのボタンを長押ししてみると音声案内が流れてフォーマットを開始できた。しばらく待っていると再び音声案内でフォーマットが完了して普通に使えるようになった。この機種はLCDがないので、全て日本語音声で喋ってくれるんだけど、フォーマット中は動いてるのかどうなのかさっぱりわからないのでなにか言ってくるまで待つべし。

というわけで本体でフォーマットすることにより64GBが使えるようになった。

意外と64GB非対応でも使えるもんなのねぇ。
アプリ上でも録画可能時間が4倍になっていたのであとはフルになるまで走って見るだけかな。おそらくここまでくれば大丈夫だと思うけど。

アプリもなかなか便利なんだけど、Apple CarPlayにスマホをつなげているとWifiがそっちで専有されてしまうので同時使用はできない。そしてドラレコにWifiで繋いでるときに勝手にCarPlayに切り替わって接続が切れてしまったりするのでちょっと試行錯誤中。ドラレコは一旦つけたらほぼ触らないから良さげだけど…