OpenWrt Tips: Difference between revisions

No edit summary
No edit summary
 
(72 intermediate revisions by the same user not shown)
Line 1: Line 1:
*AppleTV 4K の Thread 問題
なぜか RA が AppleTV から来る。いろいろ調べたら HomeKit の Thread Matter が IPv6 router (Thread Border Router) の挙動をしているらしい。HomeKit hub としては使いたいのでいろいろ調査中...とりあえず IPv4 subnet をこしらえて隔離した。AirPlay もつつがなくうごくようにできた。IPv4 で構成しているのにもかかわらず mDNS は v6 の LLA でガンガンくる...
AirPlay やら rimote app やらの機能を有効にするためには、けっこうなレンジのポートあける必要があった。今回の隔離は ICMPv6 RA を飛ばさなくすることなので、穴あきまくりもオッケーw
*dumb AP の GL-MT6000 2台
WED + bridger を使用していると roaming する際に不具合があり、今は WEBとbridger は disable にしている。WEDが無くとも素晴らしく高速で満足w
*SQM
効きますねw。GL-MT2500A (aarch64 2CPU)で十分なパフォーマンスです。
https://www.waveform.com/tools/bufferbloat
A+ もらいましたw
*MAP-E フレッツ光 ひかり電話無し
以下のサイトの情報が役に立った。
https://github.com/fakemanhk/openwrt-jp-ipoe?utm_source=pocket_saves
https://forum.ficusonline.com/t/topic/498?utm_source=pocket_saves
これで IPv4 はつつがなく使えるようになった。
*フレッツ光 ひかり電話無し lan側に GUA が来ない
私のルータ(GL-MT2500A)はイーサーネットがWAN側1ポート、LAN側1ポートなので、br-lan を使う必要が無いので、そのように設定すると、lan側のGUAが降ってこない。
lanポートにGUAが無くても差し支えはないが、あった方が便利なので、いろいろ試行錯誤した結果、lan インターフェースに option ip6assign '64' を設定する事により GUA が降ってきた。
*フレッツ光 ひかり電話無し
IPv6 と本格的に関わった事が無かったので、いろいろ勉強中。
ひかり電話無しのパターンはルータはIPv6のL2装置として設定する(ルータじゃないよねw)。しかし境界の装置なので、パススルーは嫌なので proxy 的な挙動をしなくてはいけない。
OpenWrtでは IPv6 Relay というパターンの設定がある。(MAP-Eに関するいろいろは別のはなし)
単純な IPv6 only のネットワーク構築でもいろいろ不思議な挙動があり、以下を見つけるまでけっこう試行錯誤した。
このパターンはいろいろ落とし穴があるね。(IPv6 relay モード)
私もこのパターンでいろいろ迷った。
https://github.com/openwrt/openwrt/issues/9881
今は、ルータが起動したあと、WAN6 の GUA に すべての AP から ping6 を打つようにスクリプトを仕込んで対処している。
あと気になるところで、どうもルーティングテーブルが30分ほどで消えるっぽい(まだ調べて無い)ので、cron で wan側のGUAにpingして様子見中。
ブリッジデバイスの設定でなんとかなるかもしれず。静的ルーティングをuplinkのport指定で書くとか...
*MacOS DHCPv6 & ULA
どうも OpenWrt の DHCPv6 relay の実装と相性が悪いらしい。ULA prefix (ula_prefix) を削除すること。
https://forum.openwrt.org/t/how-to-send-icmp6-neighbor-solicitation-with-a-link-local-source-address/53220
*GL-MT6000 mediatek firmware
https://github.com/rany2/openwrt
ここを参考に MTK GPL ソースをいろいろホゲって、すこし安定したようだ。
OpenWrt main snapshot:
<syntaxhighlight lang="text" enclose="div">
[  14.210931] platform 15010000.wed: MTK WED WO Firmware Version: DEV_000000, Build Time: 20221012175005
[  14.220308] platform 15010000.wed: MTK WED WO Chip ID 00 Region 3
[  16.831897] mt798x-wmac 18000000.wifi: HW/SW Version: 0x8a108a10, Build Time: 20221012174648a
[  16.831897]
[  16.934523] mt798x-wmac 18000000.wifi: WM Firmware Version: ____000000, Build Time: 20221012174725
[  17.018891] mt798x-wmac 18000000.wifi: WA Firmware Version: DEV_000000, Build Time: 20221012174937
</syntaxhighlight>
MTK GPL:
<syntaxhighlight lang="text" enclose="div">
[  13.247287] platform 15010000.wed: MTK WED WO Firmware Version: DEV_000000, Build Time: 20231024160448
[  13.256586] platform 15010000.wed: MTK WED WO Chip ID 00 Region 3
[  15.828346] mt798x-wmac 18000000.wifi: HW/SW Version: 0x8a108a10, Build Time: 20231024160251a
[  15.828346]
[  15.864094] mt798x-wmac 18000000.wifi: WM Firmware Version: ____000000, Build Time: 20231024160309
[  15.906781] mt798x-wmac 18000000.wifi: WA Firmware Version: DEV_000000, Build Time: 20231024160432
</syntaxhighlight>
*WDS
昔は、Wi-Fi ブリッジ(リピーター、エクステンダー)を構成する場合は、relayd を使ってたのだが、今は WDS という機能をつかうのが普通らしい。(WDSはレイヤー2レベルでブリッジを構成する)
最初はなじみのある relayd を使ってみたのだが、IPv6 関連で微妙な振る舞いがあって、ではということで WDS 使ってみたがむちゃくちゃサックリとブリッジが構成できた。IPv6 関連もなじみの設定であっさりと設定。かつ通信も安定している。
もうすこし遊んだら 802.11s 構成にもチャレンジしてみよう。
*802.11r不具合
MacBookAirでつながんないと悩んでいたが、そうだったのか
<syntaxhighlight lang="text" enclose="div">
Alright... So I've now verified that having 802.11k, 802.11v and 802.11w enabled does not influence the situation. Having them enabled, I've confirmed that a combination of wireless.default_radio0.encryption='sae-mixed' + wireless.default_radio0.ieee80211r='1' causes problems. Changing any of them makes everything work.
</syntaxhighlight>
https://forum.openwrt.org/t/wpa2-wpa3-mixed-mode-connectivity-issues-with-ios-15-2/117110/7
APをmix-modeからWPA3-SAE固定に変更したばあい、Appleのクライアントはそのままつながらない。再度明示的に接続しに行くと、モードが変更された旨の警告が出る。もっと分かるようにさっさと警告を出せよw
*GL-MT6000メモ
openwrt main snapshot kernel 6.1 と bridger(+追加パッチ) で超安定して動いている。WED も完璧。2.5GbE のハブ買うか、もう一台 GL-MT6000 買うかw
(もう一台買ったw 802.11r.k.v で遊び中w)(あとは SQM 専用機のエッジルータもそろえたw)
*OOM系
とりあえず安全のための設定をするスクリプト
<syntaxhighlight lang="bash" enclose="div">
#!/bin/sh
 
PROGS='procd ubusd askfirst urngd logd rpcd netifd dropbear'   
 
for prog in $PROGS; do
        PIDS=`pgrep $prog`
        for pid in $PIDS; do
                # oom_adj is deprecated, use oom_score_adj instead.         
                echo -17 > /proc/$pid/oom_adj
                echo -1000 > /proc/$pid/oom_score_adj
        done
done
</syntaxhighlight>
*GL-MT6000メモ
追加でinstallしたものメモ
<syntaxhighlight lang="bash" enclose="div">
opkg update
opkg install luci-i18n-base-ja
opkg install e2fsprogs dosfstools fdisk rsync badblocks tune2fs
opkg install unzip
opkg install screen
opkg install dropbearconvert
opkg install avahi-utils avahi-daemon-service-ssh
opkg install rsync
opkg install diffutils
opkg install mg
opkg install coreutils-ls coreutils-stty
opkg install procps-ng procps-ng-ps procps-ng-w procps-ng-vmstat procps-ng-watch
opkg install sysstat irqbalance lm-sensors
opkg install htop lsblk usbutils
</syntaxhighlight>
*パッケージが何故か更新されない問題
新しいバージョンがビルドされたのは確認しているが、ターゲットイメージ内の該当パッケージが更新されていない。いろいろ調査して、root.orig-ARCH が古いままであるのがわかった。
なぜ古いままなのか。./bin/package/ARCH にある opkg のパッケージに古いのが残っていた(バージョン違いが残っていた)。./bin/package/ARCH を消すと解消した。
毎回消すのも効率が悪いので、時々消すwことにした。
*cmake で libbsd 勝手に使う問題
<syntaxhighlight lang="text" enclose="div">
-DCMAKE_DISABLE_FIND_BSD=ON
</syntaxhighlight>
諸注意
<syntaxhighlight lang="text" enclose="div">
Note that CMAKE_DISABLE_FIND_XXXXX works for dependency packages that are discovered by CMake using find_package. But, libbsd searching is not done using find_package but find_library, so the -DCMAKE_DISABLE_FIND_BSD=ON is a no-op.
</syntaxhighlight>
*Build OpenWrt on FreeBSD
*Build OpenWrt on FreeBSD
ports の準備
ports の準備


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
/usr/ports/lang/gcc       gcc, g++
/usr/ports/shells/bash
/usr/ports/devel/gmake    gmake
/usr/ports/sysutils/coreutils
/usr/ports/misc/getopt    getopt
/usr/ports/devel/ncurses
/usr/ports/devel/patch   gpatch
/usr/ports/devel/subversion
/usr/ports/archivers/gtar gtar
/usr/ports/devel/git
/usr/ports/misc/findutils gfind, gxargs
/usr/ports/ftp/wget
/usr/ports/lang/gawk     gawk  (/usr/ports/japanese/gawk は違う)
/usr/ports/archivers/unzip
/usr/ports/lang/gcc
/usr/ports/devel/gmake
/usr/ports/misc/getopt
/usr/ports/devel/patch
/usr/ports/archivers/gtar
/usr/ports/misc/findutils
/usr/ports/lang/gawk           (/usr/ports/japanese/gawk は違う)
/usr/ports/textproc/gsed
 
#/usr/ports/sysutils/e2fsprogs
#/usr/ports/sysutils/squashfs-tools
#/usr/ports/devel/elfutils
</syntaxhighlight>
</syntaxhighlight>
OpenWrt ビルドのステップでほかのパッケージ(git, rsync, wget ...)も指摘されたらインストールする。
OpenWrt ビルドのステップでほかのパッケージも指摘されたらインストールする。


OpenWrtは root 権限ではない一般ユーザでビルドする事を要請されている。また PATH に ASCII 文字以外は使わない。
OpenWrtは root 権限ではない一般ユーザでビルドする事を要請されている。また PATH に ASCII 文字以外は使わない。


<syntaxhighlight lang="bash" enclose="div">
ln -s /usr/local/bin/bash /bin/bash
mkdir /usr/local/openwrt
cd /usr/local/openwrt
ln -s /usr/local/bin/gawk awk
ln -s /usr/local/bin/gfind find
ln -s /usr/local/bin/getopt getopt
ln -s /usr/local/bin/gmake make
ln -s /usr/local/bin/gpatch patch
ln -s /usr/local/bin/gnustat stat
ln -s /usr/local/bin/gtar tar
ln -s /usr/local/bin/gxargs xargs
ln -s /usr/local/bin/gsed sed
</syntaxhighlight>
したり


login shell を bash にして
OpenWrt をビルドする専用のユーザを作り、login shell を bash にして


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
export PATH="/usr/local/sbin:/usr/local/bin:$PATH"
export PATH="/usr/local/openwrt:/usr/local/sbin:/usr/local/bin:$PATH"


export CC=gcc
export CC=gcc
Line 25: Line 203:
export HOSTCC=gcc
export HOSTCC=gcc
export HOSTCXX=g++
export HOSTCXX=g++
# /usr/local/openwrt を整備して PATH 変えたらこれは不要
alias awk='/usr/local/bin/gawk'
alias find='/usr/local/bin/gfind'
alias getopt='/usr/local/bin/getopt'
alias make='/usr/local/bin/gmake'
alias patch='/usr/local/bin/gpatch'
alias stat='/usr/local/bin/gnustat'
alias tar='/usr/local/bin/gtar'
alias xargs='/usr/local/bin/gxargs'
alias sed='/usr/local/bin/gsed'
</syntaxhighlight>
</syntaxhighlight>
tools のビルドで野良パッチを当てつつ頑張ってみた。e2fsprogs, mtd-utils, elfutils は tools/Makefile から除く
ports の pkgconfig は .pc ファイルを libdata に入れるのでそれの対応が必要な場合(util-linux)も有る。


*usb上のデバイスを強制リセット
*usb上のデバイスを強制リセット

Latest revision as of 14:46, 17 May 2024

  • AppleTV 4K の Thread 問題

なぜか RA が AppleTV から来る。いろいろ調べたら HomeKit の Thread Matter が IPv6 router (Thread Border Router) の挙動をしているらしい。HomeKit hub としては使いたいのでいろいろ調査中...とりあえず IPv4 subnet をこしらえて隔離した。AirPlay もつつがなくうごくようにできた。IPv4 で構成しているのにもかかわらず mDNS は v6 の LLA でガンガンくる...

AirPlay やら rimote app やらの機能を有効にするためには、けっこうなレンジのポートあける必要があった。今回の隔離は ICMPv6 RA を飛ばさなくすることなので、穴あきまくりもオッケーw

  • dumb AP の GL-MT6000 2台

WED + bridger を使用していると roaming する際に不具合があり、今は WEBとbridger は disable にしている。WEDが無くとも素晴らしく高速で満足w

  • SQM

効きますねw。GL-MT2500A (aarch64 2CPU)で十分なパフォーマンスです。

https://www.waveform.com/tools/bufferbloat

A+ もらいましたw

  • MAP-E フレッツ光 ひかり電話無し

以下のサイトの情報が役に立った。

https://github.com/fakemanhk/openwrt-jp-ipoe?utm_source=pocket_saves
https://forum.ficusonline.com/t/topic/498?utm_source=pocket_saves

これで IPv4 はつつがなく使えるようになった。

  • フレッツ光 ひかり電話無し lan側に GUA が来ない

私のルータ(GL-MT2500A)はイーサーネットがWAN側1ポート、LAN側1ポートなので、br-lan を使う必要が無いので、そのように設定すると、lan側のGUAが降ってこない。 lanポートにGUAが無くても差し支えはないが、あった方が便利なので、いろいろ試行錯誤した結果、lan インターフェースに option ip6assign '64' を設定する事により GUA が降ってきた。

  • フレッツ光 ひかり電話無し

IPv6 と本格的に関わった事が無かったので、いろいろ勉強中。 ひかり電話無しのパターンはルータはIPv6のL2装置として設定する(ルータじゃないよねw)。しかし境界の装置なので、パススルーは嫌なので proxy 的な挙動をしなくてはいけない。 OpenWrtでは IPv6 Relay というパターンの設定がある。(MAP-Eに関するいろいろは別のはなし) 単純な IPv6 only のネットワーク構築でもいろいろ不思議な挙動があり、以下を見つけるまでけっこう試行錯誤した。

このパターンはいろいろ落とし穴があるね。(IPv6 relay モード)

私もこのパターンでいろいろ迷った。

https://github.com/openwrt/openwrt/issues/9881

今は、ルータが起動したあと、WAN6 の GUA に すべての AP から ping6 を打つようにスクリプトを仕込んで対処している。

あと気になるところで、どうもルーティングテーブルが30分ほどで消えるっぽい(まだ調べて無い)ので、cron で wan側のGUAにpingして様子見中。

ブリッジデバイスの設定でなんとかなるかもしれず。静的ルーティングをuplinkのport指定で書くとか...

  • MacOS DHCPv6 & ULA

どうも OpenWrt の DHCPv6 relay の実装と相性が悪いらしい。ULA prefix (ula_prefix) を削除すること。

https://forum.openwrt.org/t/how-to-send-icmp6-neighbor-solicitation-with-a-link-local-source-address/53220
  • GL-MT6000 mediatek firmware
https://github.com/rany2/openwrt

ここを参考に MTK GPL ソースをいろいろホゲって、すこし安定したようだ。

OpenWrt main snapshot:

[   14.210931] platform 15010000.wed: MTK WED WO Firmware Version: DEV_000000, Build Time: 20221012175005
[   14.220308] platform 15010000.wed: MTK WED WO Chip ID 00 Region 3
[   16.831897] mt798x-wmac 18000000.wifi: HW/SW Version: 0x8a108a10, Build Time: 20221012174648a
[   16.831897] 
[   16.934523] mt798x-wmac 18000000.wifi: WM Firmware Version: ____000000, Build Time: 20221012174725
[   17.018891] mt798x-wmac 18000000.wifi: WA Firmware Version: DEV_000000, Build Time: 20221012174937

MTK GPL:

[   13.247287] platform 15010000.wed: MTK WED WO Firmware Version: DEV_000000, Build Time: 20231024160448
[   13.256586] platform 15010000.wed: MTK WED WO Chip ID 00 Region 3
[   15.828346] mt798x-wmac 18000000.wifi: HW/SW Version: 0x8a108a10, Build Time: 20231024160251a
[   15.828346] 
[   15.864094] mt798x-wmac 18000000.wifi: WM Firmware Version: ____000000, Build Time: 20231024160309
[   15.906781] mt798x-wmac 18000000.wifi: WA Firmware Version: DEV_000000, Build Time: 20231024160432
  • WDS

昔は、Wi-Fi ブリッジ(リピーター、エクステンダー)を構成する場合は、relayd を使ってたのだが、今は WDS という機能をつかうのが普通らしい。(WDSはレイヤー2レベルでブリッジを構成する)

最初はなじみのある relayd を使ってみたのだが、IPv6 関連で微妙な振る舞いがあって、ではということで WDS 使ってみたがむちゃくちゃサックリとブリッジが構成できた。IPv6 関連もなじみの設定であっさりと設定。かつ通信も安定している。

もうすこし遊んだら 802.11s 構成にもチャレンジしてみよう。

  • 802.11r不具合

MacBookAirでつながんないと悩んでいたが、そうだったのか

Alright... So I've now verified that having 802.11k, 802.11v and 802.11w enabled does not influence the situation. Having them enabled, I've confirmed that a combination of wireless.default_radio0.encryption='sae-mixed' + wireless.default_radio0.ieee80211r='1' causes problems. Changing any of them makes everything work.
https://forum.openwrt.org/t/wpa2-wpa3-mixed-mode-connectivity-issues-with-ios-15-2/117110/7

APをmix-modeからWPA3-SAE固定に変更したばあい、Appleのクライアントはそのままつながらない。再度明示的に接続しに行くと、モードが変更された旨の警告が出る。もっと分かるようにさっさと警告を出せよw

  • GL-MT6000メモ

openwrt main snapshot kernel 6.1 と bridger(+追加パッチ) で超安定して動いている。WED も完璧。2.5GbE のハブ買うか、もう一台 GL-MT6000 買うかw

(もう一台買ったw 802.11r.k.v で遊び中w)(あとは SQM 専用機のエッジルータもそろえたw)

  • OOM系

とりあえず安全のための設定をするスクリプト

#!/bin/sh
  
PROGS='procd ubusd askfirst urngd logd rpcd netifd dropbear'     
  
for prog in $PROGS; do
        PIDS=`pgrep $prog`
        for pid in $PIDS; do
                # oom_adj is deprecated, use oom_score_adj instead.          
                echo -17 > /proc/$pid/oom_adj
                echo -1000 > /proc/$pid/oom_score_adj
        done
done
  • GL-MT6000メモ

追加でinstallしたものメモ

opkg update
opkg install luci-i18n-base-ja
opkg install e2fsprogs dosfstools fdisk rsync badblocks tune2fs
opkg install unzip
opkg install screen
opkg install dropbearconvert
opkg install avahi-utils avahi-daemon-service-ssh
opkg install rsync
opkg install diffutils
opkg install mg
opkg install coreutils-ls coreutils-stty
opkg install procps-ng procps-ng-ps procps-ng-w procps-ng-vmstat procps-ng-watch
opkg install sysstat irqbalance lm-sensors
opkg install htop lsblk usbutils
  • パッケージが何故か更新されない問題

新しいバージョンがビルドされたのは確認しているが、ターゲットイメージ内の該当パッケージが更新されていない。いろいろ調査して、root.orig-ARCH が古いままであるのがわかった。 なぜ古いままなのか。./bin/package/ARCH にある opkg のパッケージに古いのが残っていた(バージョン違いが残っていた)。./bin/package/ARCH を消すと解消した。 毎回消すのも効率が悪いので、時々消すwことにした。

  • cmake で libbsd 勝手に使う問題
-DCMAKE_DISABLE_FIND_BSD=ON

諸注意

Note that CMAKE_DISABLE_FIND_XXXXX works for dependency packages that are discovered by CMake using find_package. But, libbsd searching is not done using find_package but find_library, so the -DCMAKE_DISABLE_FIND_BSD=ON is a no-op.
  • Build OpenWrt on FreeBSD

ports の準備

/usr/ports/shells/bash
/usr/ports/sysutils/coreutils
/usr/ports/devel/ncurses
/usr/ports/devel/subversion
/usr/ports/devel/git
/usr/ports/ftp/wget
/usr/ports/archivers/unzip 
/usr/ports/lang/gcc
/usr/ports/devel/gmake
/usr/ports/misc/getopt
/usr/ports/devel/patch
/usr/ports/archivers/gtar
/usr/ports/misc/findutils
/usr/ports/lang/gawk           (/usr/ports/japanese/gawk は違う)
/usr/ports/textproc/gsed

#/usr/ports/sysutils/e2fsprogs
#/usr/ports/sysutils/squashfs-tools
#/usr/ports/devel/elfutils

OpenWrt ビルドのステップでほかのパッケージも指摘されたらインストールする。

OpenWrtは root 権限ではない一般ユーザでビルドする事を要請されている。また PATH に ASCII 文字以外は使わない。

ln -s /usr/local/bin/bash /bin/bash
mkdir /usr/local/openwrt
cd /usr/local/openwrt
ln -s /usr/local/bin/gawk awk
ln -s /usr/local/bin/gfind find
ln -s /usr/local/bin/getopt getopt
ln -s /usr/local/bin/gmake make
ln -s /usr/local/bin/gpatch patch
ln -s /usr/local/bin/gnustat stat
ln -s /usr/local/bin/gtar tar
ln -s /usr/local/bin/gxargs xargs
ln -s /usr/local/bin/gsed sed

したり

OpenWrt をビルドする専用のユーザを作り、login shell を bash にして

export PATH="/usr/local/openwrt:/usr/local/sbin:/usr/local/bin:$PATH"

export CC=gcc
export CXX=g++
export HOSTCC=gcc
export HOSTCXX=g++

# /usr/local/openwrt を整備して PATH 変えたらこれは不要
alias awk='/usr/local/bin/gawk'
alias find='/usr/local/bin/gfind'
alias getopt='/usr/local/bin/getopt'
alias make='/usr/local/bin/gmake'
alias patch='/usr/local/bin/gpatch'
alias stat='/usr/local/bin/gnustat'
alias tar='/usr/local/bin/gtar'
alias xargs='/usr/local/bin/gxargs'
alias sed='/usr/local/bin/gsed'

tools のビルドで野良パッチを当てつつ頑張ってみた。e2fsprogs, mtd-utils, elfutils は tools/Makefile から除く

ports の pkgconfig は .pc ファイルを libdata に入れるのでそれの対応が必要な場合(util-linux)も有る。

  • usb上のデバイスを強制リセット
lsusb -t
echo -n '{Bus}-{Port}' > /sys/bus/usb/drivers/usb/unbind
echo -n '{Bus}-{Port}' > /sys/bus/usb/drivers/usb/bind
echo -n '1-1' > /sys/bus/usb/drivers/usb/unbind
echo -n '1-1' > /sys/bus/usb/drivers/usb/bind