以前CentOS7でRTL8812AUの設定をしましたが、CentOS8でも使えるようにしたのでメモ
今回はドライバも進化したようで、802.11acで高速なアクセスポイントをたてることができました
※初版時点ではCentOS8を使ってましたが、最終更新時点ではRocky Linux 8.9 です
更新履歴
2023/12/06 カーネル4.18.0-513向けに書き直し
2023/05/23 カーネル4.18.0-477向けに書き直し
2022/01/15 モジュールロード時のオプション設定一部変更
2021/12/08 CentOS8.5用に追記
2021/10/26 モジュールロード時のオプション設定追記
2021/10/19 カーネル4.18.0-305-xx向けに書き直し
2021/08/12 新カーネル用に追記
2021/06/22 CentOS8.4用に修正
CentOS7の記事:CentOS7でRTL8812AUのUSB子機を使って5GHzのAPを立てる
記事執筆時の私のカーネルは
1 2 |
# uname -r 4.18.0-513.9.1.el8_9.x86_64 |
上記の通りです。使った子機はPLANEXのGW-900Dです
※カーネルのバージョンやドライバのバージョン等の環境次第で下記の通りにならないと思いますが、ご了承ください
前準備
1 2 |
# dnf group install "Development Tools" # dnf install kernel-headers kernel-devel elfutils-libelf-devel dkms |
必要なパッケージ等を用意します
ドライバは複数見つけられますが、今回も
こちらのものを使います。物が違うとAPが立てられないこともあるのでご注意ください。この記事ではバージョン 5.6.4.2 を使いました(記事執筆時ではコミット数1283でした)
※カーネル4.18.0-305系では 5.7.0 や下記の新ドライバは、執筆時点では認識に失敗しました
https://github.com/morrownr/8812au-20210629
1 2 |
# git clone https://github.com/aircrack-ng/rtl8812au.git # cd rtl8812au |
ソースを入手します。
コンパイル
とりあえずmakeをしてみて、こけたらソースを修正するという方針にします。カーネルやドライバのバージョン次第でまた変わってくると思いますので参考程度にしてください。gccはパッケージの8.3.1を使用しました
1 |
# make dkms_install |
dkms用のスクリプトが用意されているので、インストール自体はそちらにやってもらうことにしました。カーネル更新ごとにソース修正になるケースが多いので、dkms使わなくてもいいかもしれませんが…
1 |
# vim ./os_dep/linux/os_intfs.c |
1737行目の不等号を逆にします
1 2 3 4 5 |
#if (LINUX_VERSION_CODE < KERNEL_VERSION(6, 1, 0)) netif_napi_add_weight(ndev, &adapter->napi, rtw_recv_napi_poll, RTL_NAPI_WEIGHT); #else netif_napi_add(ndev, &adapter->napi, rtw_recv_napi_poll, RTL_NAPI_WEIGHT); #endif |
1 |
# vim ./os_dep/linux/ioctl_cfg80211.c |
463行目の不等号を逆にします
1 2 3 4 5 6 7 |
#if (LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0)) cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, 0, false, 0); #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, 0, false); #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0)) || (RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(8,0)) cfg80211_ch_switch_started_notify(adapter->pnetdev, &chdef, 0, false); #else |
479行目の不等号を逆にします
1 2 3 4 5 6 7 |
#if (LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0)) cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, 0, 0); #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 2)) cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, 0); #else cfg80211_ch_switch_notify(adapter->pnetdev, &chdef); #endif |
1158行目の不等号を逆にします
1 2 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) #if LINUX_VERSION_CODE > KERNEL_VERSION(6, 0, 0) |
1741,1888,2056,2080,2132行目付近の不等号を逆にします
1 2 |
#if (LINUX_VERSION_CODE < KERNEL_VERSION(6, 1, 0)) , int link_id |
5311行目の不等号を逆にします
1 2 3 4 5 |
#if (LINUX_VERSION_CODE > KERNEL_VERSION(5, 19, 2)) static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev) #else static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev, unsigned int link_id) #endif |
6187行目の不等号を逆にします
1 2 3 4 5 |
#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 19, 2)) static int cfg80211_rtw_get_channel(struct wiphy *wiphy, struct wireless_dev *wdev, unsigned int link_id, struct cfg80211_chan_def *chandef){ #else static int cfg80211_rtw_get_channel(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_chan_def *chandef){ #endif |
10482行目の不等号を逆にします
1 2 3 4 5 |
#elif (LINUX_VERSION_CODE < KERNEL_VERSION(5, 19, 2)) if (wdev->connected) { #else if (wdev->current_bss) { #endif |
1 2 |
# make dkms_remove # make dkms_install |
インストールをやり直します
ドライバ(モジュール)ロード時のオプション設定
デフォルトでは5GHzのAPが建てられる設定でドライバをロードしてくれません。5GHzのAPをたてる場合のオプションを設定します
1 |
# vim /etc/modprobe.d/88XXau.conf |
1 |
options 88XXau rtw_drv_log_level=0 rtw_led_ctrl=1 rtw_vht_enable=2 rtw_beamform_cap=10 rtw_switch_usb_mode=1 |
rtw_switch_usb_modeは1でUSB3.0、2でUSB2.0動作になります。5GHzで動かす場合はUSB3.0推奨です
1 2 |
# modprobe -r 88XXau # modprobe 88XXau |
ロードしなおします。次回以降の起動時は不要です
ネットワークマネージャーの設定
認証失敗回避のための設定を追加します
1 |
# vim /etc/NetworkManager/NetworkManager.conf |
ネットワークマネージャーの設定を変更します
1 2 3 4 5 |
[connection-mac-randomization] wifi.cloned-mac-address=permanent [device] wifi.scan-rand-mac-address=no |
最終行に追記します
1 |
# systemctl restart NetworkManager |
ネットワークマネージャーを再起動します
hostapdの設定
1 2 |
# dnf install iw # iw phy |
まず仕様を確認します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
Band 2: Capabilities: 0x1962 HT20/HT40 Static SM Power Save RX HT20 SGI RX HT40 SGI RX STBC 1-stream Max AMSDU length: 7935 bytes DSSS/CCK HT40 Maximum RX AMPDU length 65535 bytes (exponent: 0x003) Minimum RX AMPDU time spacing: 16 usec (0x07) HT Max RX data rate: 300 Mbps HT TX/RX MCS rate indexes supported: 0-15 VHT Capabilities (0x03c031a2): Max MPDU length: 11454 Supported Channel Width: neither 160 nor 80+80 short GI (80 MHz) TX STBC SU Beamformee +HTC-VHT VHT RX MCS set: 1 streams: MCS 0-9 2 streams: MCS 0-9 3 streams: not supported 4 streams: not supported 5 streams: not supported 6 streams: not supported 7 streams: not supported 8 streams: not supported VHT RX highest supported: 867 Mbps VHT TX MCS set: 1 streams: MCS 0-9 2 streams: MCS 0-9 3 streams: not supported 4 streams: not supported 5 streams: not supported 6 streams: not supported 7 streams: not supported 8 streams: not supported VHT TX highest supported: 867 Mbps Bitrates (non-HT): * 6.0 Mbps * 9.0 Mbps * 12.0 Mbps * 18.0 Mbps * 24.0 Mbps * 36.0 Mbps * 48.0 Mbps * 54.0 Mbps Frequencies: * 5180 MHz [36] (30.0 dBm) * 5200 MHz [40] (30.0 dBm) * 5220 MHz [44] (30.0 dBm) * 5240 MHz [48] (30.0 dBm) * 5260 MHz [52] (30.0 dBm) (no IR, radar detection) * 5280 MHz [56] (30.0 dBm) (no IR, radar detection) * 5300 MHz [60] (30.0 dBm) (no IR, radar detection) * 5320 MHz [64] (30.0 dBm) (no IR, radar detection) |
Band 2の方が5GHzの方。Capabilities と VHT Capabilitiesを確認します。ドライバのバージョン次第ではFrequencies:の全てのチャンネルで no IR になってしまっていて、5GHzが使えないこともあります
1 |
# vi /etc/hostapd/hostapd.conf |
hostapdの設定をします
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
ctrl_interface=/var/run/hostapd ctrl_interface_group=wheel macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP ssid=えすえすあいでぃ wpa_passphrase=ぱすわーど interface=wlp0s20u8 # 例 bridge=br0 # 例 hw_mode=a channel=36 ieee80211n=1 ht_capab=[HT20-][HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40][MAX-AMSDU-7935] ieee80211ac=1 vht_capab=[SHORT-GI-80][TX-STBC-1][+HTC-VHT][MAX-A-MPDU-LEN-11454] vht_oper_chwidth=1 vht_oper_centr_freq_seg0_idx=42 |
802.11acでAPをたてます。Capabilities や VHT Capabilities を参考に ht_capab と vht_capab を設定します
1 2 |
# systemctl start hostapd # systemctl enable hostapd |
起動と自動起動の有効
systemdの設定
これで無事設定が終わった、と思ってPCを再起動してみたところ、hostapdが起動しているにも関わらずAPにアクセスできませんでした
hostapdを再起動してみたところ、ブリッジしているブリッジインターフェイスが落ちました。hostapdの起動タイミングに問題がありそうです
1 |
# vi /usr/lib/systemd/system/hostapd.service |
サービスファイルを編集します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Unit] Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator BindsTo=sys-subsystem-net-devices-br0.device After=sys-subsystem-net-devices-br0.device #After=network.target [Service] Type=forking PIDFile=/run/hostapd.pid ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /run/hostapd.pid -B [Install] WantedBy=multi-user.target |
このようにしました。3行目と4行目を追加し、5行目をコメントアウト
ブリッジデバイス(br0)を認識してからhostapdを起動するようにしたつもり。br0の部分はデバイス名で置き換えてください。ブリッジを使っていない場合は無線LANデバイス名を指定します
1 |
# reboot |
再起動して確認。これで問題なく起動時にAPがたつようになりました
コメント