※そもそもTP-LINK製品を買うな、という定説は省略する
ホスト機Proxmox VE 8.3なマシンで、TP-Link Archer T2U PLUS [RTL8821AU]を使ってプライマリNICとしたい(有線を引き回したくない場所に設置したいので)
前提
- 蟹チップ Realtek RTL8821AU こいつのドライバはUbuntuでは勝手に当たらない
- rtl8812auドライバ https://github.com/aircrack-ng/rtl8812au.git を当てる方法が出てくるが(実際ドライバ側も88xxauを名乗っていてrtl8821auでも動く製品もあるらしい?)うまく動かない(ssid scanができない)
- 厄介なのは、scanプロセスを殺さないとデバイスがbusy状態になって何もできなくなる。
ps aux
あたりで探してkillall
すると良い
- 厄介なのは、scanプロセスを殺さないとデバイスがbusy状態になって何もできなくなる。
必要なパッケージのインストール
# apt install build-essential dkms git iw wpasupplicant
今回接続するためのCLIインタフェースはiw
を使うが、たとえばNetworkManager (nmcli
)を入れてしまうと、proxmox veで使っているsystemd-networkd
と競合し、管理画面につながらなくなる(ip unreachableになる)ので注意
morrownr/8821au-20210708 ドライバを使う
# git clone https://github.com/morrownr/8821au-20210708.git
# cd 8821au-20210708
# sh ./install-driver.sh
: ---------------------------
: install-driver.sh v20240314
: x86_64 (kernel architecture)
: x86_64 (architecture to send to gcc)
: 6/6 (in-use/total processing units)
: 65765324 (total system memory)
: 6.8.12-4-pve (kernel version)
: gcc (version of gcc used to compile the kernel)
: gcc (Debian 12.2.0-14) 12.2.0
: dkms-3.0.10
: SecureBoot disabled
: ---------------------------
Checking for previously installed drivers...
Finished checking for and removing previously installed drivers.
: ---------------------------
Starting installation.
Installing 8821au.conf to /etc/modprobe.d
The dkms installation routines are in use.
Copying source files to /usr/src/rtl8821au-5.12.5.2
Creating symlink /var/lib/dkms/rtl8821au/5.12.5.2/source -> /usr/src/rtl8821au-5.12.5.2
The driver was added to dkms successfully.
: ---------------------------
Sign command: /lib/modules/6.8.12-4-pve/build/scripts/sign-file
Signing key: /var/lib/dkms/mok.key
Public certificate (MOK): /var/lib/dkms/mok.pub
Certificate or key are missing, generating self signed certificate for MOK...
Building module:
Cleaning build area...
kernelver=6.8.12-4-pve ./dkms-make.sh............
Signing module /var/lib/dkms/rtl8821au/5.12.5.2/build/8821au.ko
Cleaning build area...
Compile time: 116.47 seconds
The driver was built by dkms successfully.
: ---------------------------
8821au.ko:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/6.8.12-4-pve/updates/dkms/
depmod...
The driver was installed by dkms successfully.
: ---------------------------
Info: Update this driver with the following commands as needed:
# git pull
# sudo sh install-driver.sh
Note: Updates to this driver SHOULD be performed before distro
upgrades such as Ubuntu 23.10 to 24.04.
Note: Updates to this driver SHOULD be performed before major
upgrades such as kernel 6.5 to 6.6.
Note: Updates can be performed as often as you like. It is
recommended to update at least every 3 months.
Note: Work on this driver, like the Linux kernel, is continuous.
Enjoy!
Unable to run $ rfkill unblock wlan
Do you want to edit the driver options file now? (recommended) [Y/n] y
Do you want to apply the new options by rebooting now? (recommended) [Y/n] n
うまくいけば問題なく終わる、最後のドライバオプション編集とかは見る必要ないかも。
推奨は再起動することのようだが、しなくても別に動く
確認
dkmsで確認すればドライバがインストール済みであるかわかる。
# dkms status
8812au/5.6.4.2_35491.20191025: added
rtl8821au/5.12.5.2, 6.8.12-4-pve, x86_64: installed
もし8812auを試していて不安なら $ modprobe -r 88XXau
しておいても良いかも
そのあとmodprobeで8821auを念のため追加、iw
やethtool
でデバイス状況を確認してみる;
# modprobe 8821au
# iw dev
phy#0
Interface wlx984827e06e24
ifindex 11
wdev 0x1
addr 98:48:27:e0:6e:24
type managed
txpower -100.00 dBm
# ethtool -i wlx984827e06e24
driver: rtl8821au
version: v5.12.5.2-0-g70054197b.20210708
firmware-version: 0.0
expansion-rom-version:
bus-info: 3-2.4:1.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
ssid scan
※インタフェース名はwlx984827e06e24
となっているが、ここは環境によって違うので注意
インタフェースをupさせて、scanしてみる($ ip a
してDOWNと書いてあったらupさせる必要がある)
# ip link set wlx984827e06e24 up
# iw dev wlx984827e06e24 scan
...数秒後ずらずらと出てくる...
なんか色々出てきたら成功。失敗してる場合、何も応答しない状態が続く。その場合はドライバが間違ってるのでやり直し。DOWNうんたらと出ていたら、set upせよ
実際のSSID scanはこのようなコマンドが便利
# iw dev wlx984827e06e24 scan | grep SSID
SSID: aterm-xxxxx-g_EXT
SSID: IO-Guest-xxxxx-2G
SSID: aterm-xxxxx-g
SSID: DXXXXXXXXXXX-2G
SSID: AXXXXXXXXXXX-2G
SSID: xxxxx
* SSID List
SSID: xxxxx
* SSID List
...
接続
wpasupplicant
で接続をしてみる。まずはSSID接続するための認証情報configをwpa_passphrase
を使って作る;
# wpa_passphrase "Unko" "dechatta" > /etc/wpa_supplicant/unko.conf
# cat /etc/wpa_supplicant/unko.conf
network={
ssid="Unko"
#psk="dechatta"
psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}
そのconfigをもとに、wpa_supplicant
で接続させる。-B
はバックエンド稼働、-i
でインタフェース名を指定、-c
でconfig pathを与えて問題なければ成功と帰ってくる
# wpa_supplicant -B -i wlx984827e06e24 -c /etc/wpa_supplicant/unko.conf
Successfully initialized wpa_supplicant
# ip a
~略~
11: wlx984827e06e24: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 98:48:27:e0:6e:24 brd ff:ff:ff:ff:ff:ff
inet6 fe80::9a48:27ff:fee0:6e24/64 scope link
valid_lft forever preferred_lft forever
このようにまだIPは貰えていない。dhcpが動いてる一般的環境であるなら、取りに行くようにする;
# dhclient wlx984827e06e24
# ip a
~略~
11: wlx984827e06e24: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 98:48:27:e0:6e:24 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.112/24 brd 192.168.100.255 scope global dynamic wlx984827e06e24
valid_lft 14397sec preferred_lft 14397sec
inet6 fe80::9a48:27ff:fee0:6e24/64 scope link
valid_lft forever preferred_lft forever
問題なくIPがきて外部と疎通できれば成功。
接続先の固定化
作ったwpa_supplicant configで稼働するようなserviceを作って登録すればよい
vmbr0のデバイス指定先を変えるなり、vmbr1とか作って切り替えるなりすればよい