スキップしてメイン コンテンツに移動

投稿

フレッツ光クロス:ip6tablesにてGUA/ULA変換をNETMAPでおこなう

フレッツ光クロスでのGUAプレフィックス変更の件で、ULA化していないとLANのメンテが非常に面倒な事が分かりました。 そこでLANのULA化をしたのですが、今回はGUA/ULA変換はMASQUERADEではなくNETMAPで変換することにしました。 変換そのものはip6tablesコマンド(もしくは iptables-persistent パッケージでは/etc/iptables/rules.v6)で行いますが、まず最初に、LAN側のインターフェースがenp1s0f1の場合、/etc/network/interfaces.d/enp1s0f1を以下のようにして固定します。 iface enp1s0f1 inet6 static address fd98:1:1:1::1/64 続いてip6tablesで以下を実行します。(240b:1122:3344:5501の部分は実際に割り当てられたPREFIXを基に指定してください。) ip6tables -t nat -A PREROUTING -d 240b:1122:3344:5501::/64 -i enp1s0f0 -j NETMAP --to fd98:1:1:1::/64 ip6tables -t nat -A POSTROUTING -s fd98:1:1:1::/64 -o enp1s0f0 -j NETMAP --to 240b:1122:3344:5501::/64 その他必要に応じて/etc/radvd.confの変更(ULA化)なども行い再読み込みを行ってください。基本的にはこれだけですが、ip6tablesが正常に機能していれば、以下のようにして設定を保存します。(iptables-persistent パッケージが必要です。) cd /etc/iptables sudo ip6tables-save > rules.v6 参考までに、GUAプレフィックスの変更があった場合に対応するため、以下を こちらのスクリプト /usr/local/sbin/ipt-v6p-static-lan-01.sh に追加しました。 ## 2024/05/12追記:LAN側IPv6アドレスのULA化に伴う/etc/iptables/rules.v6の変更と再読み込み PREFIX_CHAN
最近の投稿

フレッツ光クロスコラボの固定IPv4接続でIPv6ネットワークプレフィックスが変更された件について

5月2日の朝なんですが、これまで特に通信ができなかったことはないのですが、突然インターネットに接続できないようになりました。 環境はフレッツ光コラボのenひかりクロス固定IP接続(v6プラス)で、ルーターはLinux(debian)で構成した自前ルータだったのですが、 こちらの自前のスクリプト(※1) とちがうものをつかっていてIPv6ネットワークプレフィックスを固定にしていた所為もあり、最初は原因がわからないしネットに接続できないのでやむなく一時的にスマホをUSBテザリングしてネットにつなげて情報収集しましたが、原因はわかりませんでした。 そこで、今一度スクリプトを見返したところ、前述のようにIPv6ネットワークプレフィックスを固定にしていたのでもしやと思い、dhclientをデバッグモードで走らせると指定していたプレフィックスとは異なるプレフィックスが割り振られていました。通信できないのは当然です。 今度は割り当てられたプレフィックスを指定し直したところIPv6は接続できるようになりましたが、IPv4で通信できません。これも前述のスクリプトと異なるものを使用していたので、少しづつデバッグしていったところ、curlで認証を受けるところがNGになっていました。ここで前出のスクリプトと見比べるとURLをダブルクォーテーションで囲っていなかったのでこれを修正したところ認証も通り、無事、IPv4も疎通できるようになりました。 これで一件落着と言いたいところなのですが、一部IPv6ネットワークプレフィックスを固定していたのでこれらの変更が必要だったので修正しました。小規模な宅内LANなので良かったのですが、これが大規模なLANでULA(ユニークローカルアドレス,IPv4のプライベートアドレスに相当)で運用されていない環境やIPv6でトンネルを張っていたりすると業務に支障がでるだろうなと思ったのは言うまでもありません。 最後に今後もプレフィックスが変更される可能性は否定できないので、スクリプトを前述のスクリプトに入れ替え(一部修正が必要でしたが)IPv6/IPv4の疎通を確認し、 宅内LANのULA化はまだですが 、ようやく一件落着となりました。 2024/05/12追記: こちら にULA化(GUA/ULA変換)について投稿しました。 今回は以上です。それでは

Android TabletのChromeをコマンドラインを付けて起動させる

Android の 8.4 タブレットを入手したのですが、Chromeのuser agentが"Mobile Safari" ではなく "Safari"となっているため、たとえばアマゾンなどにアクセスすると、PCサイトとして表示されてしまい,8.4インチで解像度が1200*1920あるため、文字が小さくなりすぎて読みづらくなってしまいました。いちいち拡大表示させるのも面倒なのは言うまでもありません。もちろんPC版サイトにチェックをいれていなくてもモバイル版サイトとして表示されません。 PC版のChromeなら拡張機能でUser Agentの切り替えができるのですが、Android 版のChromeでは拡張機能は使えません。そこでどうしたものか色々とやってみたのですが、chrome://flagsでコマンドラインをEnableにして、AndroidのChromeに起動時オプションを与えることでモバイル版の表示ができたので、備忘録として挙げてみることにしました。 早速ですが、まずadbを使ってコマンドライン付の起動ファイルを作成します。(adbツールのインストールとUSBデバッグ接続については本稿では触れません) adb shell # 以下 adb shell 内にて echo "chrome --use-mobile-user-agent" > /data/local/tmp/chrome-command-line echo "chrome --use-mobile-user-agent" > /data/local/tmp/android-webview-command-line echo "chrome --use-mobile-user-agent" > /data/local/tmp/webview-command-line echo "chrome --use-mobile-user-agent" > /data/local/tmp/content-shell-command-line chmod 755 /data/local/tmp/chrome-command-line chmod 755 /d

Arduino on Wemos R1 D32(ESP32)にセンサーシールドを載せジョイスティックを接続しSG90サーボを動かす

表題の通りなんですが、ジョイスティックはArduinoスターターキットについていた5v対応のものだったので、Wemos R3 D32 ( ESP32 ) ではどのように結線するのかよくわかっていませんでした。そこでネットでしらべたところ、ESP32のADCは3.3vなので、VCCは5vではなく3v3につなげ、X, Y のアナログ接続はESP32のADC2(A0, A1)ではなくADC1(A2=GPIO35, A3=GPIO34)に接続すると良いようでした。 結果、Joystickの中央値(センターポジション)に偏りがあるものの、それらしく動作してくれたので備忘録として挙げてみることにしました。なおSG90はセンサーシールドのD2,D3(GPIO 26、25)に接続しているので5Vで駆動させています。 スケッチは以下の通りです。初めの方にピン番号を defineし差分を吸収したので、ESP32以外でも同じコードで動作できるようにしています。 #ifdef ESP32 #include <ESP32Servo.h> #define D0 3 #define D1 1 #define D2 26 #define D3 25 #define D4 17 #define D5 16 #define D6 27 #define D7 14 #define D8 12 #define D9 13 #define D10 5 #define D11 23 #define D12 19 #define D13 18 #define A0 2 #define A1 4 #define A2 35 #define A3 34 #define A4 36 #define A5 39 #define MY_SERVO_X_PIN D2 #define MY_SERVO_Y_PIN D3 #define JOY_X_PIN A2 #define JOY_Y_PIN A3 #define JOY_SW D13 #define JOY_MAX 4096 #else #include <Servo.h> #define D0 0 #define D1 1 #define D2 2 #define D3 3 #de

Windows 11 ( 23H2 ) に WSL2 Debian をインストール

特に目新しいことではないのですが、2023/12現在での備忘録として挙げてみることにしました。 まずターミナルを管理者で開きます。つづいて以下のようにします。 PS C:\Users\UserName> wsl --install -d Debian インストール中: 仮想マシン プラットフォーム 仮想マシン プラットフォーム はインストールされました。 インストール中: Linux 用 Windows サブシステム Linux 用 Windows サブシステム はインストールされました。 インストール中: Debian GNU/Linux Debian GNU/Linux はインストールされました。 要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。 ここで再起動し、再起動後、スタート->すべてのアプリからDeianをクリックしてWSL2を起動し 、ユーザー名とパスワードを入力すればOKです。 Windows11でのWSLインストールはデフォルトでWSL2がインストールされ、仮想マシンプラットフォームやサブシステムもコマンド一発でインストールされるので、非常に簡単ですね。 今回は以上です。それでは。

STM32F412RET6用にmicropython v1.21.0 をコンパイル

WeACT社のstm32関連ボードにSTM32f412RET6が載ったボードがあるのですが、バイナリーが古そうなので2023/11現在での最新バージョンv.1.21.0でビルドしてみました。まず、micropythonとWeACT社のgithubから該当ボードのレポジトリをcloneしました。 mkdir -p ~/stm32 cd ~/stm32 git clone https://github.com/WeActStudio/WeActStudio.STM32F4_64Pin_CoreBoard mkdir micropython cd micropython git clone https://github.com/micropython/micropython -b v1.21.0 micropython-v1.21.0 cd micropython-v1.21.0 git submodule update --init cp -a ~/stm32/WeActStudio.STM32F4_64Pin_CoreBoard/Examples/STM32F412/mpy/WeActStudio_F412RE ports/stm32/boards/ ざっと眺めると、linkerスクリプト(ports/stm32/boards/stm32f412rx.ld)が現在のmicropythonのレポジトリにないので、まずそこから手をつけました。内容は以下の通りです。 /* GNU linker script for STM32F412rx (512KB flash, 256kB RAM) */ /* Specify the memory areas */ MEMORY { FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K /* entire flash */ FLASH_ISR (rx) : ORIGIN = 0x08000000, LENGTH = 16K /* sector 0 */ FLASH_FS (rx) : ORIGIN = 0x08004000, LENGTH = 112K /* sectors 1,2,3 = 16K:sector 4 = 64K. 16

F4VE BLACK / BLACK_F407VE ( STM32F407VET6 ) 用にmicropython v1.21.0 をコンパイル

STM32F407VET6が載ったボードでF4VE BLACK/BLACK_F407VEというのがあり、micropython 向けのportもあるのですが、そのままでは2023/11現在最新の v1.21.0 ではコンパイルできませんでした。しかし少し手を入れるとビルドできたので備忘録として挙げてみることにしました。 まず、portをcloneします。 mkdir -p ~/stm32/micropython cd ~/stm32/micropython git clone https://github.com/mcauser/BLACK_F407VE つづいてmicropythonをcloneしておきます。 git clone https://github.com/micropython/micropython.git -b v1.21.0 micropython-v1.21.0 cd micropython-v1.21.0 git submodule update --init cd mpy-cross make -j6 cd .. cp -a ../BLACK_F407VE ports/stm32/boards/ 次に、一部修正が必要なので編集します。 boards/BLACK_F407VE/mpconfigboard.mk 変更前 9 MICROPY_PY_USSL = 1 変更後 9 MICROPY_PY_SSL = 1 変更はここだけです。つづいてビルドしますが、v1.21.0をWSL2/Debian 12.1でビルドするとリンク時にエラーがでました。 ../../lib/mbedtls/library/ssl_tls.c:3328:5: error: 'mbedtls_sha512_finish_ret' accessing 64 bytes in a region of size 48 [-Werror=stringop-overflow=] なのでビルド時に、CFLAGを追加してmakeします。 cd ports/stm32 CFLAGS="-Wno-stringop-overflow" make DEBUG=0 LTO=1 BOARD=BLACK_F407VE CROSS_COMPILE