OpenWrtでBridge Firewallを使う

NASにファイヤーウォールがないため、途中にProxyArpを使ってブリッジしたルータをファイヤーウォールにして使っていました。これでも十分機能したのですが複雑です。そこでブリッジファイヤウォールを使ってシンプルにしてみました。

OpenWrtの公式ファイヤーウォールは使えないので切っておきます。代わりにshorewall-liteを使います。

/etc/init.d/firewall stop
/etc/init.d/firewall disable
opkg update
opkg install shorewall-lite shorewall6-lite
opkg install kmod-br-netfilter iptables-mod-physdev kmod-ipt-physdev \
iptables-mod-conntrack-extra kmod-nf-conntrack-netlink \
kmod-nf-nathelper kmod-nf-nathelper-extra iptables-mod-extra \
iptables-mod-hashlimit kmod-ipt-raw6 kmod-ipt-raw
net.bridge.bridge-nf-call-arptables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1

OpenWrtをインストールしたOrangePi zeroがあったので、それにshorewallとshorewall6をインストールしてfirewallファイルをコンパイルします。

# shorewall compile ./shorewall ./firewall
# scp firewall USER@IP_ADDRESS:/etc/firewall-lite/state/
# shorewall compile ./shorewall6 ./firewall
# scp firewall USER@IP_ADDRESS:/etc/firewall6-lite/state/

ShorewallのBridge Firewallの設定例

#
# Shorewall -- /etc/shorewall/interfaces
#
# For information about entries in this file, type "man shorewall-interfaces"
#
# The manpage is also online at
# http://www.shorewall.net/manpages/shorewall-interfaces.html
#
?FORMAT 2
###############################################################################
#ZONE		INTERFACE		OPTIONS

world		br-lan			bridge
net		br-lan:eth0.1
net		br-lan:x+		physical=wlan+
loc		br-lan:eth0.2
#
# Shorewall -- /etc/shorewall/zones
#
# For information about this file, type "man shorewall-zones"
#
# The manpage is also online at
# http://www.shorewall.net/manpages/shorewall-zones.html
#
###############################################################################
#ZONE		TYPE		OPTIONS		IN_OPTIONS	OUT_OPTIONS

fw		firewall
world		ipv4
net:world	bport4
loc:world	bport4
#
# Shorewall -- /etc/shorewall/policy
#
# For information about entries in this file, type "man shorewall-policy"
#
# The manpage is also online at
# http://www.shorewall.net/manpages/shorewall-policy.html
#
###############################################################################
#SOURCE		DEST		POLICY	LOGLEVEL	RATE	CONNLIMIT

$FW		all		ACCEPT
loc		all		DROP   info
net		all		DROP   info

# The FOLLOWING POLICY MUST BE LAST
all             all             REJECT	info
#
# Shorewall -- /etc/shorewall/rules
#
# For information on the settings in this file, type "man shorewall-rules"
#
# The manpage is also online at
# http://www.shorewall.net/manpages/shorewall-rules.html
#
##############################################################################################################################################################
#ACTION		SOURCE		DEST		PROTO	DPORT	SPORT	ORIGDEST	RATE	USER	MARK	CONNLIMIT	TIME	HEADERS	SWITCH	HELPER

?SECTION ALL
?SECTION ESTABLISHED
?SECTION RELATED
?SECTION INVALID
?SECTION UNTRACKED
?SECTION NEW

# Drop packets in the INVALID state

Invalid(DROP)	net	$FW	tcp

# Permit all ICMP traffic FROM the firewall TO the net zone
ACCEPT		net	$FW	icmp
ACCEPT		loc	$FW	icmp
ACCEPT		net	loc	icmp
ACCEPT		loc	net	icmp

# dhcp
ACCEPT		loc	$FW	udp	68
ACCEPT		net	$FW	udp	68

# Accept out from DNS & time ports for FW, tinc and vpn
ACCEPT		loc	$FW	udp	53
ACCEPT		net	$FW	udp	53
ACCEPT		loc	net	udp	53
ACCEPT		net	loc	udp	53

# mdns(avahi)
ACCEPT		net	$FW	udp	5353
ACCEPT		loc	$FW	udp	5353
ACCEPT		net	loc	udp	5353
ACCEPT		loc	net	udp	5353

# ntp
ACCEPT		loc	$FW	udp	123
ACCEPT		net	$FW	udp	123
ACCEPT		net	loc	udp	123
ACCEPT		loc	net	udp	123

# Accept SSH connections from the internet for administration
ACCEPT		loc $FW     tcp     22
ACCEPT		net	$FW     tcp     22
ACCEPT		loc	net     tcp     22
ACCEPT		net	loc     tcp     22

# sip
#ACCEPT		net	$FW		udp	5060

# rtp
#ACCEPT		net	$FW		udp	7070-7080

# rsync
ACCEPT		net	loc		tcp	873
ACCEPT		loc	net		tcp	873

# cvs
#ACCEPT		net	$FW		tcp	2401
#ACCEPT		net	$FW		udp	2401

# HTTPS, HTTP
ACCEPT		loc	$FW		tcp	80,443
ACCEPT		net	$FW		tcp	80,443
ACCEPT		loc	net		tcp	80,443
ACCEPT		net	loc		tcp	80,443

# radius
ACCEPT          loc     $FW     udp     1812-1813
ACCEPT          net     $FW     udp     1812-1813

# smbd-139
ACCEPT		net	loc	tcp	139
ACCEPT		loc	net	tcp	139

# smbd-445
ACCEPT		net	loc	tcp	445
ACCEPT		loc	net	tcp	445

# iscsi
ACCEPT		net	loc	tcp	3260
ACCEPT		loc	net	tcp	3260

# snmp
ACCEPT		loc	$FW	udp	161-162
ACCEPT		net	$FW	udp	161-162
ACCEPT		loc	net	udp	161-162
ACCEPT		net	loc	udp	161-162

# IPsec
#ACCEPT		net	$FW	esp
#ACCEPT		net	$FW	udp	500,4500

# OpenVpn
#ACCEPT		net	$FW	udp	1194

# tinc
ACCEPT		net	$FW	udp,tcp		655
ACCEPT		net	loc	udp,tcp		655
ACCEPT		loc	net	tcp,tcp		655

# wireguard
ACCEPT		loc	net	udp	51820

テスト

$ nmap -A -T4 ROUTER_IP_ADDRESS
Starting Nmap 7.80 ( https://nmap.org ) at 2021-11-21 09:25 UTC
Nmap scan report for 192.168.1.20
Host is up (0.0018s latency).
Not shown: 992 filtered ports
PORT     STATE  SERVICE      VERSION
22/tcp   open   ssh          Dropbear sshd (protocol 2.0)
80/tcp   open   http?
139/tcp  closed netbios-ssn
443/tcp  open   ssl
445/tcp  closed microsoft-ds
587/tcp  closed submission
873/tcp  closed rsync
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
$ nmap -A -T4 NAS_IP_ADDRESS
Starting Nmap 7.92 ( https://nmap.org ) at 2021-11-21 18:40 JST
Nmap scan report for 192.168.1.254
Host is up (0.021s latency).
Not shown: 991 filtered tcp ports (no-response)
PORT     STATE  SERVICE       VERSION
22/tcp   open   ssh           OpenSSH 6.7p1-hpn14v5 Debian 5+deb8u7.netgear1 (protocol 2.0)
...
80/tcp   open   http          Apache httpd
...
139/tcp  open   netbios-ssn?
443/tcp  open   ssl/http      Apache httpd
...
445/tcp  open   microsoft-ds  Samba smbd 4.8.0
587/tcp  closed submission
873/tcp  open   rsync         (protocol version 31)
3260/tcp closed iscsi
5001/tcp closed commplex-link
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
...

TODO

DSA switchだとうまくいかない

参考

  • https://openwrt.org/docs/guide-user/firewall/fw3_configurations/bridge
  • https://shorewall.org/bridge-Shorewall-perl.html
Posted in OpenWrt | Comments Off on OpenWrtでBridge Firewallを使う

Sony NCP-HG100/CellularにOpenWrtを入れる

ADSLの終了により楽天モバイルを使って固定回線化することになりました。ルーターを探していた時にLTEバンド3が使えるIO-DETAのルーターがあるのですが、高額のため躊躇していました。そんなところにSonyのNCP-HG100/Cellularが使えるという情報があったのでアマゾンで四千円弱で購入しました。APNの設定すぐに使えたのですがいろいろと問題も出てきました。

  • バンド3で使っているいうちに突然パートナー回線に切り替わり容量を使い切って遅くなる
  • LTEモジュールに高負荷をかけるとリセットする

最初のセットアップ

購入から最初の設定はSIMを差して電源を入れます。本体のIPアドレスは192.168.132.1です。ブラウザーからアクセスしてダッシュボードでAPNの設定をします。

  • APN: rakuten.jp
  • PIN: (空欄)
  • Authentication Type: NONE
  • APNプロトコル: IPv4

ターミナルでアクセス

シリアルアクセスするにはルータの殻割りをします。後方のゴム足2箇所と前方の丸シール2箇所を取り外しプラスドライバーでネジを外します。細いマイナスドライバで下からケースの爪を外してカバーを外します。

基盤にはUART用のピンホールが4つ並んでそれを下にして左から3.3v、TX、RX、GNDの配列になっています。PCで USB TTL シリアル 変換等で基盤につなぎターミナルからアクセスします。

*私の環境:macOS、CP2102

# cu -l /dev/tty.wchusbserial1420 -s 115200

U-Boot画面が見えたら適当なキーを押してU-Bootに入ります。

setenv bootargs console=ttyMSM0,115200n8
printenv
saveenv

これでターミナルの設定ができ、次からはブートから直接OpenWrtにアクセスできます。

バンド3に固定する

ターミナルでNCP-HG100のOpenWrtにアクセスできるようになったらバンドの固定をします。方法は先駆者のやり方通りです。

mmcli -m 0 --command 'AT^SLBAND?'
mmcli -m 0 --command 'AT^SLBAND=LTE,1,3,8,19,21,28'
mmcli -m 0 --command 'AT^SLBAND?'

LTEモジュールをUSB2.0化する

LTEモジュール(Telit LN940 A9 LTE CAT-9 M.2)のネジとカバーを外します。カバーはマイナスドライバーで丁寧に外します。LTEモジュールの#29, #31をマスキングすればUSB3.0は無効になるようです。自宅にあるメンディングを使いました。#30,#32は貼りません。

1 - 11 <切り欠き>  21 - (29,31) - 75

マスキングしたモジュールを再セットします。

# modemproxy -t at^usbtype?
at^usbtype?
^USBTYPE: USB2.0

最新のOpneWrtをインストールする

Stock ROMだと限られた機能しか使えないので最新版のOpenWrtをインストールすることにしました。

先駆者達によってSnapshot版が既にありますが不安定だというレポートしてたので躊躇してました。

ある先駆者の一人で快適に動いているというブログを読んで、USBポートから起動できることもありやってみることにしました。

まずはOpenWrtのソースをダウンロードしてパッチを当てます。

私の方ではext4のファイルシステムを使えるようにして4GBのUSBディスクを使いました。またカーネルモジュールもネットワーク関係は周りはできるだけ取り込むようにしました。リポジトリからインストールできないのが理由です。

OpenWrtをビルドします。

# Download and update the sources
git clone https://git.openwrt.org/openwrt/openwrt.git
cd openwrt
git pull
 
# Select a specific code revision
git branch -a
git tag
git checkout v21.02.1
 
 # パッチを当てます
 git apply --reject --whitespace=fix my_ncp-hg100.patch
 
 # .configファイルをコピーします
cp confg_my_ncp-hg100 .config
 
# Update the feeds
./scripts/feeds update -a
./scripts/feeds install -a
 
# Configure the firmware image and the kernel
make menuconfig
make kernel_menuconfig
 
# Build the firmware image
make -j $(nproc) defconfig download clean
make -j  $(nproc) V=s

コンパイルが済んだらUSBディスクにコピーします。

# USBディスクをフォーマットする
sudo fdisk /dev/sdb

# +3500mで作成
sudo fdisk -l /dev/sdb
Disk /dev/sdb: 3.61 GiB, 3880452096 bytes, 7579008 sectors
Disk model: USB DISK 2.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7fcbcda3
Device     Boot Start     End Sectors  Size Id Type
/dev/sdb1        2048 7342079 7340032  3.5G 83 Linux

# ext4でフォーマットします
sudo mkfs.ext4 /dev/sdb1

# FITイメージをUSBにコピーします
cp $HOME/src/openwrt/build_dir/target-arm_cortex-a7+neon-vfpv4_musl_eabi/linux-ipq40xx_generic/sony_ncp-hg100-cellular-fit-uImage.itb .
sudo dd if=sony_ncp-hg100-cellular-fit-uImage.itb of=/dev/sdb bs=512 seek=7500000

# cpioアーカイブのroofsをUSBディスクに展開します
sudo mount /dev/sdb1 /mnt
cd /mnt
sudo gzip -cd $HOME/src/openwrt/bin/targets/ipq40xx/generic/openwrt-ipq40xx-generic-rootfs.cpio.gz | sudo cpio -idmv
sudo sync
cd -
sudo umount /mnt

# blkidを使ってPARTUUIDを調べます。このPARTUUIDのデータはu-bootの環境設定で使います。
sudo blkid /dev/sdb1

u-bootの環境設定を変更します。

set bootusb 'set bootargs console=ttyMSM0,115200n8 root=PARTUUID=xxxxxxxx-01 rw rootfstype=ext4 rootwait; usb start; usb read 0x84000000 0x7270E0 0x4000; bootm'
set fallback 'set bootargs console=ttyMSM0,115200n8; bootipq'
set bootcmd 'run bootusb; run fallback'
printenv
saveenv

これでUSBディスク→Stock ROMの順でブートするようになります。

SMSの送受信をしてみる

このSIMには050から始まるナンバーが割り当てられているのでSMS通信ができます。SMS送受信ができるようにセットアップしました。

# open update
# opkg install smstools3

フロントエンドは外部のgitリポジトリからインストールします。

$ cd $HOME/src/openwrt/feeds/luci/applications
$ git clone https://github.com/koshev-msk/luci-app-smstools3.git
$ cd  $HOME/src/openwrt
$ ./scripts feeds update -a
$ ./scripts/feeds install -a
$  make package/feeds/luci/luci-app-smstools3/compile

Setup→Decode SMSをオンにするとutf-8でメッセージがデコードできます。

デュアルスタック化にする

最新のOpenWrtが起動できたらデュアルスタック化にしてみます。プロファイルを変更します。

# qmicli -d /dev/cdc-wdm0 --wds-modify-profile=3gpp,1,apn=rakuten.jp,pdp-type=IPV4V6,auth=,username=,password=,no-roaming=yes

インターフェースのWANの設定を変更します。

  • APN: rakuten.jp
  • PIN: (空欄)
  • Authentication Type: NONE
  • APNプロトコル: IPv4/IPv6

QoS

HowToにはQoSには2つの方式があると書かれてます。SQM方式の方が優れているということなのでそちらを導入します。

tcコマンドが使えればトラフィックをコントロールできるのですが、ダッシュボードでSmart Queue Managementを使えるようにしてみます。

tcコマンドに依存しているカーネルモジュールが必要なのでカーネールを再ビルドします。

CONFIG_PACKAGE_kmod-nf-conntrack-netlink=y
CONFIG_PACKAGE_kmod-ifb=y
CONFIG_PACKAGE_kmod-sched=y
CONFIG_PACKAGE_kmod-sched-cake=y
CONFIG_PACKAGE_kmod-sched-core=y
CONFIG_PACKAGE_kmod-nft-bridge=y
CONFIG_PACKAGE_kmod-nft-core=y
CONFIG_PACKAGE_kmod-nft-netdev=y

カーネルを再構築して新たなファームウェアを作り再起動します。

opkg install tc luci-app-sqm

ダッシュボードのSmart Queue ManagementInterface nameQueue setup scriptpiece_of_cake.qosにセットします。とりあえずこれでしばらく運用してみます。

参考

  • https://nodemand.hatenablog.com/entry/2020/11/24/155129。
  • https://ameblo.jp/kawamura-tokei-megane/entry-12674651576.html
  • https://qiita.com/himalock/items/b863a92ed43baf8d85fb
  • https://himahima.ldblog.jp/archives/57666526.html
  • https://tetsupc.wordpress.com/2021/02/25/ncp-hg100%e9%80%b2%e6%8d%97%e5%a0%b1%e5%91%8a/
  • https://firejp.com/2021/10/07/post-695/
  • https://openwrt.org/docs/guide-user/network/traffic-shaping/packet.scheduler
Posted in OpenWrt | Comments Off on Sony NCP-HG100/CellularにOpenWrtを入れる

デジタルカメラのPhotoにGPSデータを付ける

普段使ってるYamapのサービスでスマホのPhotoを使ってますがあまり綺麗ではありません。そこでデジカメのPhotoを使ってみることにしました。YamapはPhotoの作成時間とGPXデータを照らし合わせて位置情報を取得しています。このアイディアを使ってGPXデータから位置情報を抜き出してJpegのEXIFにGPSデータを書き込もうと言うのが今回の目的です。

GPXデータの位置情報はUTCで統一されています。一方、デジカメはタイムゾーンに合わせたローカル時間で記録されているのですり合わせが必要です。そのローカル時間はテキストデータなので一旦datetimeフォーマットに変換することになりますが、国によってもメーカーによっても表記がバラバラなのでどうか解決するかも悩みの一つです。半分くらいプログラムを書き上げたところで、偶然、私と同じことをしているプロジェクトが見つかりました。

  • gpx2exif: https://pypi.org/project/gpx2exif/

使い方

シンプルです。引数にimageの後、GPXデータ、次にJpegファイルです。時差は日本の場合-9hとなります。

gpx2exif image yamap_2021-06-28_13_30.gpx FJIMG_20210628_160048.jpg --delta -9h

使用機会

主に使うところはGooglemapです。他のマップサービスでも使えるところがあるはずです。Photoの整理にも活躍しそうです。

追記:

途中で終わらせるのは嫌だったのでプログラムを完成させました。出来は自分用には十分です。

  • https://github.com/Neelakurinji123/gpsadd2exif
Posted in Multimedia | Comments Off on デジタルカメラのPhotoにGPSデータを付ける

TerminalImageViewer (tiv)を使ってみる

サーバーに置かれた画像をターミナル経由で見る方法はないものかと考えて検索したらTerminalImageViewerというプロジェクトがありました。このアプリケーションは画像をユニコード・キャラクターに変換して表示できるのでターミナルから見ることができます。GitHubではsnapを使ったインストール方法が紹介されてもますが、サーバはDebianなのでコンパイルしてインストールしました。

sudo apt install imagemagick
git clone https://github.com/stefanhaustein/TerminalImageViewer.git
cd TerminalImageViewer/src/main/cpp
make
sudo make install

表示してみるとユニコードキャラクタの割に綺麗に表示できてました。解像度はもちろん期待できませんが、うまくユニコード・キャラクタを応用してマッピングできています。

ソース

  • https://github.com/stefanhaustein/TerminalImageViewer
Posted in Linux | Comments Off on TerminalImageViewer (tiv)を使ってみる

box86 + wine

arm機でx86のWindowsアプリケーションが動くという情報を得て試して見ました。以前にqemuを使ってWindowsを動かそうと試みたのですが、あまりの遅さで断念したことがあるので、レビュー見る限り期待できそうです。

box86のインストールはarmhfのみなのでarm64には直接インストールできませんがchrootを使えば間接的にインストールができます。

次のサイトの通りにインストールします。

  • https://forum.armbian.com/topic/16584-install-box86-on-arm64/

色々試してみたのですがまだ開発途上なので動くアプリケーションも限られますが今後期待できそうです。

どうもAllwinnerはまだ使えません。スタートで取り残されてしまいました。

libGL error: unable to load driver: sun4i-drm_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: sun4i-drm
libGL error: unable to load driver: sun4i-drm_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: sun4i-drm
0024:fixme:d3d:wined3d_guess_card No card selector available for card vendor 0000 (using GL_RENDERER "llvmpipe (LLVM 7.0, 128 bits)").
Posted in Armbian | Comments Off on box86 + wine

OpenWrt: Orange Pi zeroにインストール

ヤオフクでOrange Pi zeroを入手したのでインストール作業に取り掛かりました。Orange Pi zeroはLanポートが100Mbpsなので本命ではないのですが、定評があるモデルなので持っている価値はある上、今ある条件で経験を積んでおきたいということとでやってみることにしました。Allwinner系のSBCはWi-Fi周りが弱いという欠点がありますが、他のルータと比べて処理能力が格段優れています。従来のルーターとこのSBCを組み合わせることで素晴らしい効果が期待できます。

このSBCボードで特にやりたかったことはShorewallの導入です。以前、Armbianに改造したTVBOXのルータで1年程度稼働したのですが、突然eMMCが壊れたという経験をしてから、ルータは極力ストレージアクセスを避けるべきだという方針に変えてました。仕方なく非力なルーターを使わざるを得なかったのですがShorewallを動かすには非力すぎました。そこでOpenWrtに対応する機器を調べていたらAllwinner系のSoCが使えるということがわかり、これを使えばShorewallが使えるのではと考えました。

問題はSBCの入手ですが、元の値段に対してどういうわけかみな高額でなかなかチャンスが見つけられないことが続いてたのですが、偶然ヤオフクでOrange Pi zeroを見つけました。本命ではないのですが、Orange Pi zeroなら今のADSL環境でもスペック的に十分対応可能なので入手することにしました。

入手したボードを調べてみるとv1.5でしたので最新のLTSバージョンということになります。調べたところ前バージョンのv1.4だと発熱の問題があり、あまり宜しくないようです。v1.5(LTS版)は発熱等ほかいくつか不具合が改善されているというアナウンスがされており実際に期待通りの結果でした。

インストールはOpenWrtのサイトからopenwrt-19.07.5-sunxi-cortexa7-sun8i-h2-plus-orangepi-zero-ext4-sdcard.img.gzというファイルをダウンロードしてTFカードに焼き付けるだけです。

gunzip -c openwrt-19.07.5-sunxi-cortexa7-sun8i-h2-plus-orangepi-zero-ext4-sdcard.img.gz | dd of=/dev/mmcblk(1) bs=1M

TFカードをOrange PiにセットしてUSBケーブルから電源を送り込めばOopenWrtが立ち上がります。リセットボタンが見当たらないのでfailsafeをどうするのかわかりませんが、UARTポートのシリアルアクセスができるのでこれで対処できそうです。参考にログ出力を載せておきます。

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.14.209 (builder@buildhost) (gcc version 7.5.0 (OpenWrt GCC 7.5.0 r11257-5090152ae3)) #0 SMP PREEMPT Sun Dec 6 07:31:03 2020
[    0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=30c5387d
[    0.000000] CPU: div instructions available: patching division code
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] OF: fdt: Machine model: Xunlong Orange Pi Zero
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] On node 0 totalpages: 131072
[    0.000000] free_area_init_node: node 0, pgdat c0c58880, node_mem_map dfbac000
[    0.000000]   Normal zone: 1024 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 131072 pages, LIFO batch:31
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: Using PSCI v0.1 Function IDs from DT
[    0.000000] random: get_random_bytes called from 0xc0a00908 with crng_init=0
[    0.000000] percpu: Embedded 15 pages/cpu s30796 r8192 d22452 u61440
[    0.000000] pcpu-alloc: s30796 r8192 d22452 u61440 alloc=15*4096
[    0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 130048
[    0.000000] Kernel command line: console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait
[    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Memory: 508560K/524288K available (5648K kernel code, 356K rwdata, 956K rodata, 2048K init, 250K bss, 15728K reserved, 0K cma-reserved, 0K highmem)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
[    0.000000]     vmalloc : 0xe0800000 - 0xff800000   ( 496 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xe0000000   ( 512 MB)
[    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
[    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)
[    0.000000]       .text : 0xc0008000 - 0xc0784188   (7665 kB)
[    0.000000]       .init : 0xc0a00000 - 0xc0c00000   (2048 kB)
[    0.000000]       .data : 0xc0c00000 - 0xc0c59180   ( 357 kB)
[    0.000000]        .bss : 0xc0c6052c - 0xc0c9f010   ( 251 kB)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000] 	RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=4.
[    0.000000] 	Tasks RCU enabled.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000] GIC: Using split EOI/Deactivate mode
[    0.000000] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[    0.000000] arch_timer: cp15 timer(s) running at 24.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[    0.000006] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[    0.000017] Switching to timer-based delay loop, resolution 41ns
[    0.000150] Console: colour dummy device 80x30
[    0.000188] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000)
[    0.000202] pid_max: default: 32768 minimum: 301
[    0.000315] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.000327] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.000818] CPU: Testing write buffer coherency: ok
[    0.001132] /cpus/cpu@0 missing clock-frequency property
[    0.001154] /cpus/cpu@1 missing clock-frequency property
[    0.001169] /cpus/cpu@2 missing clock-frequency property
[    0.001187] /cpus/cpu@3 missing clock-frequency property
[    0.001199] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[    0.040054] Setting up static identity map for 0x40200000 - 0x40200060
[    0.060049] Hierarchical SRCU implementation.
[    0.100107] smp: Bringing up secondary CPUs ...
[    0.180499] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[    0.260622] CPU2: thread -1, cpu 2, socket 0, mpidr 80000002
[    0.340762] CPU3: thread -1, cpu 3, socket 0, mpidr 80000003
[    0.340839] smp: Brought up 1 node, 4 CPUs
[    0.340861] SMP: Total of 4 processors activated (192.00 BogoMIPS).
[    0.340867] CPU: All CPU(s) started in HYP mode.
[    0.340872] CPU: Virtualization extensions available.
[    0.344335] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5
[    0.344792] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.344815] futex hash table entries: 1024 (order: 4, 65536 bytes)
[    0.345005] pinctrl core: initialized pinctrl subsystem
[    0.346156] NET: Registered protocol family 16
[    0.346464] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.347919] No ATAGs?
[    0.373147] SCSI subsystem initialized
[    0.373445] libata version 3.00 loaded.
[    0.373721] usbcore: registered new interface driver usbfs
[    0.373789] usbcore: registered new interface driver hub
[    0.373882] usbcore: registered new device driver usb
[    0.374018] Linux video capture interface: v2.00
[    0.374075] pps_core: LinuxPPS API ver. 1 registered
[    0.374083] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.374109] PTP clock support registered
[    0.374424] Advanced Linux Sound Architecture Driver Initialized.
[    0.380913] clocksource: Switched to clocksource arch_sys_counter
[    0.386265] NET: Registered protocol family 2
[    0.386885] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
[    0.386932] TCP bind hash table entries: 4096 (order: 3, 32768 bytes)
[    0.386995] TCP: Hash tables configured (established 4096 bind 4096)
[    0.387085] UDP hash table entries: 256 (order: 1, 8192 bytes)
[    0.387123] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
[    0.387287] NET: Registered protocol family 1
[    0.387632] kvm [1]: 8-bit VMID
[    0.388062] kvm [1]: vgic interrupt IRQ16
[    0.388166] kvm [1]: Hyp mode initialized successfully
[    0.389251] No memory allocated for crashlog
[    0.389393] workingset: timestamp_bits=30 max_order=17 bucket_order=0
[    0.393640] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.393796] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
[    0.396124] io scheduler noop registered
[    0.396138] io scheduler deadline registered
[    0.396276] io scheduler cfq registered (default)
[    0.396836] sun4i-usb-phy 1c19400.phy: Couldn't request ID GPIO
[    0.400047] sun8i-h3-pinctrl 1c20800.pinctrl: initialized sunXi PIO driver
[    0.401531] sun8i-h3-r-pinctrl 1f02c00.pinctrl: initialized sunXi PIO driver
[    0.406281] Serial: 8250/16550 driver, 16 ports, IRQ sharing enabled
[    0.408898] console [ttyS0] disabled
[    0.429199] 1c28000.serial: ttyS0 at MMIO 0x1c28000 (irq = 35, base_baud = 1500000) is a U6_16550A
[    1.035240] console [ttyS0] enabled
[    1.043397] loop: module loaded
[    1.047865] libphy: Fixed MDIO Bus: probed
[    1.052393] dwmac-sun8i 1c30000.ethernet: PTP uses main clock
[    1.058172] dwmac-sun8i 1c30000.ethernet: No regulator found
[    1.063943] dwmac-sun8i 1c30000.ethernet: Current syscon value is not the default 148000 (expect 58000)
[    1.073351] dwmac-sun8i 1c30000.ethernet: Chain mode enabled
[    1.079004] dwmac-sun8i 1c30000.ethernet: No HW DMA feature register supported
[    1.086231] dwmac-sun8i 1c30000.ethernet: Normal descriptors
[    1.091898] dwmac-sun8i 1c30000.ethernet: RX Checksum Offload Engine supported
[    1.099110] dwmac-sun8i 1c30000.ethernet: COE Type 2
[    1.104083] dwmac-sun8i 1c30000.ethernet: TX Checksum insertion supported
[    1.111000] libphy: stmmac: probed
[    1.114918] dwmac-sun8i 1c30000.ethernet: Found internal PHY node
[    1.121217] libphy: mdio_mux: probed
[    1.124810] dwmac-sun8i 1c30000.ethernet: Switch mux to internal PHY
[    1.131184] dwmac-sun8i 1c30000.ethernet: Powering internal PHY
[    1.137846] libphy: mdio_mux: probed
[    1.141942] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.148463] ehci-platform: EHCI generic platform driver
[    1.153879] ehci-platform 1c1a000.usb: EHCI Host Controller
[    1.159470] ehci-platform 1c1a000.usb: new USB bus registered, assigned bus number 1
[    1.167356] ehci-platform 1c1a000.usb: irq 26, io mem 0x01c1a000
[    1.200929] ehci-platform 1c1a000.usb: USB 2.0 started, EHCI 1.00
[    1.207189] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    1.213994] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.221219] usb usb1: Product: EHCI Host Controller
[    1.226091] usb usb1: Manufacturer: Linux 4.14.209 ehci_hcd
[    1.231670] usb usb1: SerialNumber: 1c1a000.usb
[    1.236589] hub 1-0:1.0: USB hub found
[    1.240371] hub 1-0:1.0: 1 port detected
[    1.244849] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    1.251068] ohci-platform: OHCI generic platform driver
[    1.256459] ohci-platform 1c1a400.usb: Generic Platform OHCI controller
[    1.263110] ohci-platform 1c1a400.usb: new USB bus registered, assigned bus number 2
[    1.270957] ohci-platform 1c1a400.usb: irq 27, io mem 0x01c1a400
[    1.345080] usb usb2: New USB device found, idVendor=1d6b, idProduct=0001
[    1.354246] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.361479] usb usb2: Product: Generic Platform OHCI controller
[    1.367392] usb usb2: Manufacturer: Linux 4.14.209 ohci_hcd
[    1.372970] usb usb2: SerialNumber: 1c1a400.usb
[    1.377862] hub 2-0:1.0: USB hub found
[    1.381657] hub 2-0:1.0: 1 port detected
[    1.386161] usbcore: registered new interface driver usb-storage
[    1.392410] mousedev: PS/2 mouse device common for all mice
[    1.398324] i2c /dev entries driver
[    1.402459] sunxi-wdt 1c20ca0.watchdog: Watchdog enabled (timeout=16 sec, nowayout=0)
[    1.411641] sunxi-mmc 1c0f000.mmc: Got CD GPIO
[    1.470944] sunxi-mmc 1c0f000.mmc: base:0xe08c9000 irq:23
[    1.481148] NET: Registered protocol family 10
[    1.486658] Segment Routing with IPv6
[    1.490381] NET: Registered protocol family 17
[    1.494985] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    1.507970] can: controller area network core (rev 20170425 abi 9)
[    1.514269] NET: Registered protocol family 29
[    1.518715] 8021q: 802.1Q VLAN Support v1.8
[    1.520185] mmc0: host does not support reading read-only switch, assuming write-enable
[    1.523028] Registering SWP/SWPB emulation handler
[    1.535128] mmc0: new high speed SD card at address e624
[    1.541597] mmcblk0: mmc0:e624 SU02G 1.84 GiB
[    1.542620] ehci-platform 1c1b000.usb: EHCI Host Controller
[    1.550783]  mmcblk0: p1 p2 p3
[    1.551674] ehci-platform 1c1b000.usb: new USB bus registered, assigned bus number 3
[    1.562573] ehci-platform 1c1b000.usb: irq 28, io mem 0x01c1b000
[    1.590919] ehci-platform 1c1b000.usb: USB 2.0 started, EHCI 1.00
[    1.597187] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002
[    1.603987] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.611211] usb usb3: Product: EHCI Host Controller
[    1.616083] usb usb3: Manufacturer: Linux 4.14.209 ehci_hcd
[    1.621660] usb usb3: SerialNumber: 1c1b000.usb
[    1.626599] hub 3-0:1.0: USB hub found
[    1.630380] hub 3-0:1.0: 1 port detected
[    1.635017] ohci-platform 1c1b400.usb: Generic Platform OHCI controller
[    1.641668] ohci-platform 1c1b400.usb: new USB bus registered, assigned bus number 4
[    1.649521] ohci-platform 1c1b400.usb: irq 29, io mem 0x01c1b400
[    1.725081] usb usb4: New USB device found, idVendor=1d6b, idProduct=0001
[    1.731886] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.739099] usb usb4: Product: Generic Platform OHCI controller
[    1.745029] usb usb4: Manufacturer: Linux 4.14.209 ohci_hcd
[    1.750595] usb usb4: SerialNumber: 1c1b400.usb
[    1.755515] hub 4-0:1.0: USB hub found
[    1.759295] hub 4-0:1.0: 1 port detected
[    1.764472] sunxi-mmc 1c10000.mmc: allocated mmc-pwrseq
[    2.040932] sunxi-mmc 1c10000.mmc: base:0xe08ec000 irq:24
[    2.046402] hctosys: unable to open rtc device (rtc0)
[    2.051915] vcc3v0: disabling
[    2.054884] vcc5v0: disabling
[    2.057848] ALSA device list:
[    2.060811]   No soundcards found.
[    2.060861] mmc1: new high speed SDIO card at address 0001
[    2.076580] EXT4-fs (mmcblk0p2): mounted filesystem without journal. Opts: (null)
[    2.084128] VFS: Mounted root (ext4 filesystem) readonly on device 179:2.
[    2.093001] Freeing unused kernel memory: 2048K
[    2.154678] init: Console is alive
[    2.158264] init: - watchdog -
[    2.361121] random: fast init done
[    2.565592] kmodloader: loading kernel modules from /etc/modules-boot.d/*
[    2.586880] kmodloader: done loading kernel modules from /etc/modules-boot.d/*
[    2.594995] init: - preinit -
[    2.773287] random: jshn: uninitialized urandom read (4 bytes read)
[    2.811730] random: jshn: uninitialized urandom read (4 bytes read)
[    2.830024] random: jshn: uninitialized urandom read (4 bytes read)
[    2.889439] Generic PHY 0.1:01: attached PHY driver [Generic PHY] (mii_bus:phy_addr=0.1:01, irq=POLL)
[    2.900305] dwmac-sun8i 1c30000.ethernet eth0: No MAC Management Counters available
[    2.907984] dwmac-sun8i 1c30000.ethernet eth0: PTP not supported by HW
[    2.915843] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[    5.997796] mount_root: mounting /dev/root
[    6.001556] dwmac-sun8i 1c30000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[    6.003022] EXT4-fs (mmcblk0p2): warning: mounting unchecked fs, running e2fsck is recommended
[    6.010450] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[    6.027263] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[    6.145751] urandom-seed: Seeding with /etc/urandom.seed
[    6.190702] procd: - early -
[    6.194277] procd: - watchdog -
[    6.364729] urandom_read: 4 callbacks suppressed
[    6.364737] random: jshn: uninitialized urandom read (4 bytes read)
[    6.435126] random: jshn: uninitialized urandom read (4 bytes read)
[    6.499021] random: jshn: uninitialized urandom read (4 bytes read)
[    6.827996] procd: - watchdog -
[    6.831391] procd: - ubus -
[    6.885724] procd: - init -
[    7.187323] kmodloader: loading kernel modules from /etc/modules.d/*
[    7.197657] urngd: v1.0.2 started.
[    7.219194] NET: Registered protocol family 38
[    7.242415] device-mapper: ioctl: 4.37.0-ioctl (2017-09-20) initialised: dm-devel@redhat.com
[    7.247361] random: crng init done
[    7.257250] ntfs: driver 2.1.32 [Flags: R/O MODULE].
[    7.266502] NET: Registered protocol family 15
[    7.272409] Initializing XFRM netlink socket
[    7.278975] tun: Universal TUN/TAP device driver, 1.6
[    7.309471] gre: GRE over IPv4 demultiplexor driver
[    7.315702] ip_gre: GRE over IPv4 tunneling driver
[    7.325671] ip6_gre: GRE over IPv6 tunneling driver
[    7.340487] ip6_tables: (C) 2000-2006 Netfilter Core Team
[    7.353126] Mirror/redirect action on
[    7.363026] u32 classifier
[    7.365757]     input device check on
[    7.369443]     Actions configured
[    7.383419] nf_conntrack version 0.5.0 (8192 buckets, 32768 max)
[    7.427427] Bridge firewalling registered
[    7.432743] Loading modules backported from Linux version v4.19.137-0-gc076c79e03c6
[    7.440419] Backport generated by backports.git v4.19.137-1-0-g60c3a249
[    7.449300] ip_tables: (C) 2000-2006 Netfilter Core Team
[    7.558324] Netfilter messages via NETLINK v0.30.
[    7.568531] wireguard: WireGuard 1.0.20200611 loaded. See www.wireguard.com for information.
[    7.577513] wireguard: Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
[    7.617146] xt_time: kernel timezone is -0000
[    7.678639] ctnetlink v0.93: registering with nfnetlink.
[    7.692385] nf_tables: (c) 2007-2009 Patrick McHardy <kaber@trash.net>
[    7.719833] PPP generic driver version 2.4.2
[    7.725762] NET: Registered protocol family 24
[    7.751876] usbcore: registered new interface driver rt2800usb
[    7.758028] kmodloader: done loading kernel modules from /etc/modules.d/*
[   10.702139] Generic PHY 0.1:01: attached PHY driver [Generic PHY] (mii_bus:phy_addr=0.1:01, irq=POLL)
[   10.713199] dwmac-sun8i 1c30000.ethernet eth0: No MAC Management Counters available
[   10.720961] dwmac-sun8i 1c30000.ethernet eth0: PTP not supported by HW
[   10.727882] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   10.737450] br-lan: port 1(eth0.111) entered blocking state
[   10.743280] br-lan: port 1(eth0.111) entered disabled state
[   10.749369] device eth0.111 entered promiscuous mode
[   10.754495] device eth0 entered promiscuous mode
[   10.761427] IPv6: ADDRCONF(NETDEV_UP): br-lan: link is not ready
[   10.838577] IPv6: ADDRCONF(NETDEV_UP): eth0.666: link is not ready
[   10.850833] IPv6: ADDRCONF(NETDEV_UP): eth0.999: link is not ready
[   11.054724] br-lan: port 2(vxlan0) entered blocking state
[   11.061555] br-lan: port 2(vxlan0) entered disabled state
[   11.068242] device vxlan0 entered promiscuous mode
[   11.074359] br-lan: port 2(vxlan0) entered blocking state
[   11.079813] br-lan: port 2(vxlan0) entered forwarding state
[   11.128490] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready
[   12.801589] dwmac-sun8i 1c30000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[   12.810166] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[   12.817550] br-lan: port 1(eth0.111) entered blocking state
[   12.823214] br-lan: port 1(eth0.111) entered forwarding state
[   12.830242] IPv6: ADDRCONF(NETDEV_CHANGE): eth0.666: link becomes ready
[   12.837853] IPv6: ADDRCONF(NETDEV_CHANGE): eth0.999: link becomes ready
[   13.173942] pppoe-wan: renamed from ppp0
[   13.529989] xt_CT: No such helper "netbios-ns"
[   13.681391] xt_CT: No such helper "sane"
[   13.755089] xt_CT: No such helper "sane-0"
[   14.056347] xt_CT: No such helper "netbios-ns"
[   14.137165] xt_CT: No such helper "sane"
[   14.172282] xt_CT: No such helper "sane-0"

LANポートが一つしかないのでVLANを使いました。

レイアウト図です。

       vlan111                    vlan999
   LAN --------| Openwrt router |-------- Wan
                      |  |
             eth0.111 |  | eth0.999
                      |  |
               | Orange Pi zero |

VLANの設定はダッシュボードではなく/etc/config/networkを編集します。

config interface 'lan'
	option type 'bridge'
	option ifname 'eth0.111'
	option proto 'static'
	option ip6assign '60'
	list dns '8.8.8.8'
	list dns '1.1.1.1'
	list ipaddr '192.168.1.1/26'

config interface 'wan'
	option ifname 'eth0.999'
	option proto 'pppoe'
	option password '****************'
	option ipv6 'auto'
	option username '******.******.ne.jp'

OpenWrtのダッシュボードの設定からShorewallに変えてみるとさすがにシンプルで設定が楽です。ダッシュボードだと複雑な設定にすると乱雑になりすぎて間違いやすく、結果やはり変えてよかった思いました。

Post-installation

luci-firewallのアンインストール

opkg remove --force-depends luci-app-firewall

shorewallを有効にする

/etc/shorewall/shorewall.conf: STARTUP_ENABLED=Yes

/etc/init.d/firewwall disable

/etc/init.d/shorewall enable

/etc/init.d/shorewall start or reload

参考

  • https://linux-sunxi.org/Xunlong_Orange_Pi_Zero#Compatibility
Posted in OpenWrt | Comments Off on OpenWrt: Orange Pi zeroにインストール

POP! OS 20.10アップグレードで言語設定の不具合

POP! OS 20.04からPOP! OS 20.10へアップグレードしたところ、言語設定のfcitxの不具合がありました。そこで試しにfcitx5にしてみてもやはり不具合は解消されてませんでした。

原因はおそらく言語設定の変更が追いついていないためだと思いますが、とりあえず使えるようにしました。

echo -e "export XMODIFIERS=@im=fcitx\nexport GTK_IM_MODULE=\"xim\"\nexport QT_IM_MODULE=\"xim\"\nfcitx &">>~/.profile

fcitx5というのが前から気にかかっていたのですが、今回使えるようにしてみました。fcitxの改良版とでも言うのでしょうか、あまり違いはわかりませんがことのついでに設定してみました。

公式パッケージにはfcitx5-mozcがないので、外部リポジトリからインストールします。

$ sudo add-apt-repository ppa:ikuya-fruitsbasket/fcitx5
$ sudo apt upgrade
$ sudo apt install fcitx5 fcitx5-config-qt fcitx5-data fcitx5-frontend-gtk2 \
  fcitx5-frontend-gtk3 fcitx5-frontend-qt5 fcitx5-module-dbus fcitx5-module-emoji \
  fcitx5-module-ibus fcitx5-module-kimpanel fcitx5-module-quickphrase \
  fcitx5-module-quickphrase-editor fcitx5-module-wayland fcitx5-module-xorg \
  fcitx5-modules fcitx5-mozc kde-config-fcitx5 libfcitx5-qt-data libfcitx5-qt1 \
  libfcitx5config6 libfcitx5core7 libfcitx5gclient1 libfcitx5utils1 libfcitx5utils2
$  sed -i 's/fcitx/fcitx5/' .profile

ログアウトして入り直します。

Skinの追加

まだ公式リポジトリにないのでGitHubから導入してみます。テーマを/usr/share/fcitx5/themesにコピーします。fcitx5の設定でThemeを変更します。

参考

  • https://github.com/xuzhao9/fcitx5-theme-opensuse
Posted in Linux | Comments Off on POP! OS 20.10アップグレードで言語設定の不具合

OpenWrt: 802.11ac の 802.11s + wpa3 sae を使う

前日セットアップしたVxlanが遅すぎて絶望的な気分に浸っていたところで、802.11acで802.11sのメッシュがひょっとしたらできるのではないかと思いつきました。acモードの802.11sは以前に試してみたのですがうまく行きませんでしたが、WG1200CRは比較的新しい機種なのでひょっとしたらと思ったわけです。結論から言うと出来ました。ただし、Mediatekのルーター、WCR-1166DSはWG1200CRにはメッシュは繋がるもののファイル転送に失敗しました。と言うことでacモードの802.11sは機種限定ですが可能だと言うことを発見しました。

wpa3 saeを有効にする

opkg remove  wpad-basic
opkg install wpad-wolfssl

パッケージはこれだけです。あとはダッシュボードで802.11sの設定をするのみです。Channelは固定しておきます。

テスト:iperf3 (==: 有線LAN, –: Wi-Fi)

PC (macOS) — AP1 == NAS

[  5] local 192.168.211.20 port 5201 connected to 192.168.211.4 port 54092
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec  32.2 MBytes   270 Mbits/sec
[  5]   1.00-2.00   sec  34.9 MBytes   293 Mbits/sec
[  5]   2.00-3.00   sec  35.5 MBytes   298 Mbits/sec
[  5]   3.00-4.00   sec  35.8 MBytes   300 Mbits/sec
[  5]   4.00-5.00   sec  35.9 MBytes   301 Mbits/sec
[  5]   5.00-6.00   sec  34.3 MBytes   287 Mbits/sec
[  5]   6.00-7.00   sec  34.4 MBytes   289 Mbits/sec
[  5]   7.00-8.00   sec  34.7 MBytes   291 Mbits/sec
[  5]   8.00-9.00   sec  34.7 MBytes   291 Mbits/sec
[  5]   9.00-10.00  sec  34.3 MBytes   288 Mbits/sec
[  5]  10.00-10.02  sec   758 KBytes   260 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.02  sec   349 MBytes   292 Mbits/sec                  sender
[  5]   0.00-10.02  sec   347 MBytes   291 Mbits/sec                  receiver

PC (macOS) == AP2 — (802.11s) — AP1 == NAS

[  5] local 192.168.211.20 port 5201 connected to 192.168.211.2 port 51689
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec  19.9 MBytes   167 Mbits/sec
[  5]   1.00-2.00   sec  20.6 MBytes   173 Mbits/sec
[  5]   2.00-3.00   sec  21.2 MBytes   178 Mbits/sec
[  5]   3.00-4.00   sec  21.2 MBytes   179 Mbits/sec
[  5]   4.00-5.00   sec  20.8 MBytes   174 Mbits/sec
[  5]   5.00-6.00   sec  13.7 MBytes   115 Mbits/sec
[  5]   6.00-7.00   sec  17.4 MBytes   146 Mbits/sec
[  5]   7.00-8.00   sec  21.0 MBytes   176 Mbits/sec
[  5]   8.00-9.00   sec  21.2 MBytes   178 Mbits/sec
[  5]   9.00-10.00  sec  21.2 MBytes   178 Mbits/sec
[  5]  10.00-10.02  sec   334 KBytes   167 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.02  sec   199 MBytes   167 Mbits/sec                  sender
[  5]   0.00-10.02  sec   199 MBytes   166 Mbits/sec                  receiver

メッシュネットワーク越えでもそれほど速度低下はなくこれなら使えそうです。

Bug

11ac meshで有効にしたままファームウェアをアップグレードしようとすると失敗する → メッシュを一時的にオフにしてアップグレードする。

Posted in Linux, OpenWrt | Comments Off on OpenWrt: 802.11ac の 802.11s + wpa3 sae を使う

OpenWrt: Vxlanのセットアップ

前回、NEC Aterm WG1200CRにOpenWrtをインストールしました。この機種はヤオフクで手に入れたものですが、実は3台まとめての落札だったので、今回、この3台を使ってネットワーク周りをアップグレードすることにしました。現在のネットワークは11n(2.4GHz)の11s(メッシュ)+WPA3 SAEで、通信速度は150Mbpsです。メッシュネットワークは柔軟性のあるネットワークですが遅いという欠点があります。そこでAPモードを使って11acの性能を引き出そうというのが今回の試みです。

11acのWPA3 SAEのAPモード、Clientモードのネットワーク・セットアップまでは問題ないのですが、子機のClientモードの方が仕様上ブリッジできないという欠点があります。プライベートネットワーク上でnat超えは避けて同一のネットワークを透過的に使いたいところです。いろいろ検討してみたところ、トンネリング・インターフェースを使えば出来そうです。以前にWireGurad上にGreTapをのせてネットワークデバイスをブリッジしました。今回も同じ方法が使えます。

GreTap vs. Vxlan

L2ネットワークをトンネリングする方法としてGreTapの他にVxlanがあります。どちらも同じ目的で使いますが、何が違い、どちらがメリットがあるのかが疑問だったので調べてみたところ、Vxlanはudpプロトコルを使い、マルチキャストができることがわかりました。一方、GreTapはユニキャストのみです。ネットワーク同士をつなげるとしたらVxlanの方が有利なのは明らかです。そこで今回はVxlanを採用することにしました。

Vxlanのセットアップ

OpenWrtのドキュメントを調べたのですがどうも上手くいきません。そこでGoogleで調べて、何が欠けているのか、情報を収集してみました。

まずパッケージのインストールから始めました。

opkg install vxlan kmod-vxlan ip-full ip-bridge

しかし、これだけでは上手くいかず、前回、GreTapでnat周りのカーネルモジュールをインストールしたことを思い出しました。そこで手当たり次第に関連するカーネルモジュールをインストールしてみました。

opkg install kmod-ip6-tunnel kmod-ip6tables kmod-ipt-conntrack kmod-ipt-conntrack-extra \
    kmod-ipt-nat kmod-ipt-nat-extra kmod-iptunnel kmod-iptunnel6 kmod-nf-conntrack \
    kmod-nf-conntrack-netlink kmod-nf-conntrack6 kmod-nf-nat kmod-nf-nat6 kmod-nf-nathelper \
    kmod-nf-nathelper-extra kmod-nfnetlink kmod-udptunnel4 kmod-udptunnel6 kmod-vxlan

AP、Clientの両方の/etc/config/networkに追加します。peeraddrとipaddrはネット環境に合わせて調整します。またインターフェースvxlan0をbr-lan(LAN環境)にブリッジします。

config interface 'vxlan0'
	option proto 'vxlan'
	option port '4789'
	option vid '8'
	option ipaddr '10.201.0.53'
	option peeraddr '10.201.0.50'
	#option tunlink 'l2vpn'
	#option mtu '1400'

config interface 'l2vpn'
#	option ifname '@vxlan0'
	option ifname 'l2vpn0'
	option proto 'static'
	option ipaddr '10.201.0.53'
	option netmask '255.255.255.192'
	#option layer '2'
	option delegate '0'

インターフェースのセットアップ

wi-fiのセットアップ

firewallはVxlan用に作成します。

ネットワークトポロジー

 PCs                                             redius server2
  |                                                   ||
 wifi AP == wifi Client -- (vxlan) -- wifi AP == GW router == WAN
  ||                                   |              |
 radius server1                 (mesh network,  (mesh network,2.4G
                          2.4G,11s + wpa3 sae)  11s + wireguard + gretap)
                                       |              |              
                                      PCs          IP camera

ルーター種別

  • Vxlan: 11acルーター(wi-fi:866Mbps, lan:1Gbps)
  • 11s + wpa3 sae: Atheros router, mt7621以降 (wi-fi:150Mbps, lan:100Mbps)
  • 11s + wireguard + gretap: rt3050, rt5350, mt7620 (wi-fi:150Mbps, lan:100Mbps)

Multi network化

Vxlanは柔軟性あるネットワーキングができるのでクラウド環境でよく使われています。余っている11acルーターを使って試しに自宅ネットワーク環境で試してみます。

config interface 'vxlan0'
	option proto 'vxlan'
	option port '4789'
	option vid '8'
	option ipaddr '10.201.0.53'
	option peeraddr '10.201.0.50'

config interface 'vxlan1'
	option proto 'vxlan'
	option port '4790'
	option vid '8'
	option ipaddr '10.201.0.53'
	option peeraddr '10.201.0.60'

config interface 'l2vpn'
	option ifname 'l2vpn0'
	option proto 'static'
	option ipaddr '10.201.0.53'
	option netmask '255.255.255.192'
	option delegate '0'

ポートを+1ずらして設定しました。

テスト:iperf (==: 有線LAN, –: Wi-Fi)

1 ) AP router == NAS

[  4] local 192.168.211.20 port 5001 connected with 192.168.211.52 port 46574
[  4]  0.0-10.0 sec   146 MBytes   122 Mbits/sec

2) ThinkPad x230 (macOS) — AP router == NAS

[  4] local 192.168.211.20 port 5001 connected with 192.168.211.4 port 54857
[  4]  0.0-10.1 sec   281 MBytes   234 Mbits/sec

3) AP router 2 (Vxlan) == AP router == NAS

[  4] local 192.168.211.20 port 5001 connected with 192.168.211.53 port 34536
[  4]  0.0-10.0 sec   305 MBytes   256 Mbits/sec

4) Client router (vxlan) — AP router 2 (vxlan) == AP router == NAS

[  5] local 192.168.211.20 port 5001 connected with 192.168.211.60 port 46286
[  5]  0.0-10.1 sec  91.7 MBytes  76.5 Mbits/sec

5) ThinkPad x220 (Linux) == Client router (vxlan) — AP router 2 (vxlan) == AP router == NAS

[  5] local 192.168.211.20 port 5001 connected with 192.168.211.2 port 44770
[  5]  0.0-10.4 sec  94.1 MBytes  76.2 Mbits/sec

1図はarproxyのためか速度が半分になってます。2図は通常のAPルーターとして使った場合、十分な速度が出ています。3図は二つ目のAPルーターです。想定通りの速度です。4図はVxlanを通してClientルーターからの速度です。速度が約1/3になっています。ここがボトルネックのようです。仮想状のトンネルはCPUパワーが必要なのか設定の問題なのかわかりませんが調査が必要です。5図はエンドポイントです。4図とほぼ同じです。

総括するとOpenWrtでVxlanで実現しようとしてもかなり遅くなってしまうので11nモードのメッシュでもいいかもと言う結果でした。

参考

  • https://forum.openwrt.org/t/wireguard-vxlan-and-multicast/39405/7
  • https://openwrt.org/docs/guide-user/network/tunneling_interface_protocols#examples
  • https://www.reddit.com/r/networking/comments/4bko87/vxlan_vs_gre/

Posted in Linux, OpenWrt | Comments Off on OpenWrt: Vxlanのセットアップ

OpenWrt: Aterm WG1200CRにインストール

今回初めてNEC製ルータにOpenWrtをインストールしました。NEC製でOpenWrtをインストールできる機種は3種のみ(2020年11月現在)です。NECのルーターはクオリティが高いという評判なのでいつか使ってみたとは思ってたのですが、人気があるため手に入りづらくなかなかチャンスはありませんでした。たまたまヤオフクで手ごろな製品を見つけたので落札してみました。

この機種はBuffalo WCR-1166DSに近いスペックなのですが、有線LANの1Gbpsが2ポートあります。将来的に光インターネットにした場合、WCR-1166DSのLANポートの100Mbpsではボトルネックの可能性があるので、持っていて損のない製品です。

このWG1200CRのインストールには一つハードルがあり、最新のファームウェアでは直接、OpenWrtがインストールできないということがあります。なので手元届いたら真っ先にこのルーターにアクセスしてファームウェアのバージョンを調べました。幸運にも古いものだったので直接Factoryイメージをインストールできました。なおu-bootからインストールする場合、パスワードがかかってるので解除する必要があります。

通信速度はACモードで今まで使っていたものより1.5倍くらい速い結果でした。ただ、たまたまだったのか、じっくり検証をしてみないと何とも言えません。

その他

hardware/software offload

opkgのssl化

opkg install wget ca-certificates libustream-openssl

/etc/opkg/distfeeds.confを編集してhttp→httpsに変更

SQM

opkg install sqm-scripts luci-app-sqm

参考

  • https://tetsupc.wordpress.com/2019/04/07/nec-aterm-wg1200cr/
  • https://openwrt.org/toh/hwdata/nec/nec_aterm_wg1200cr
Posted in OpenWrt | Comments Off on OpenWrt: Aterm WG1200CRにインストール