NetworkManager(nmtui, nmcliコマンド)

Orangepi PCのRTL8188によるルータ化で NetworkManager を無効にしてアクセスポイントの設定をしましたが、アップグレードした Armbian ではこれをデフォルトで利用します( nmtui,nmcli による設定)。以下 NetworkManager による設定手順とトラブルシュートへの対応です。

Screenshot from 2023-02-27 16-24-04

ハードウェアとシステム

  • Orange Pi PC
  • Armbian 22.11.4 Bullseye with Linux 5.15.89-sunxi

NetworkManagerドキュメント

NetworkManagerdnsmasqを利用するため、以下の設定ファイルで dns=dnsmasq とします。

/etc/NetworkManager/NetworkManager.conf

[main]
#dns=default
dns=dnsmasq
......
.....

DNS management

注) NetworkManagerdnsmaqを利用する場合、dnsmasqのインストールは必要ありません(デフォルトでインストールされているdnsmasq-baseを利用しているため)。

Wi-Fi device must support AP mode


トラブルシュート

設定ファイル一覧

$ ls /etc/NetworkManager
conf.d  dispatcher.d  dnsmasq.d  dnsmasq-shared.d  NetworkManager.conf  system-connections

接続設定ファイルディレクトリ

$ ls /etc/NetworkManager/system-connections/*

オプション設定ディレクトリ

$ ls /etc/NetworkManager/conf.d
10-ignore-interfaces.conf  10-override-wifi-random-mac-disable.conf  20-override-wifi-powersave-disable.conf  armbian-default-metric.conf

10-ignore-interfaces.confにインターフェイスがリストアップされていると強制的にunmanagedとなります。

インターフェイス毎の接続設定削除

$ sudo rm -i /etc/NetworkManager/system-connections/*

アクセスポイントの設定

注) hostapdの設定を有効にしている場合、無効(デフォルト)に戻して下さい(hostapdによるDHCPサーバ設定との干渉回避のため)。

nmcliによるアクセスポイントの作成手順は以下の通りです。

# nmcli con add type wifi ifname wlan0 mode ap con-name WIFI_AP ssid MY_AP
# nmcli con modify WIFI_AP 802-11-wireless.band bg
# nmcli con modify WIFI_AP 802-11-wireless.channel 1
# nmcli con modify WIFI_AP 802-11-wireless-security.key-mgmt wpa-psk
# nmcli con modify WIFI_AP 802-11-wireless-security.proto rsn
# nmcli con modify WIFI_AP 802-11-wireless-security.group ccmp
# nmcli con modify WIFI_AP 802-11-wireless-security.pairwise ccmp
# nmcli con modify WIFI_AP 802-11-wireless-security.psk 11223344
# nmcli con modify WIFI_AP ipv4.method shared
# nmcli con up WIFI_AP

上記設定はnmtuiでも同様です。
nmtui->Edit a connection->Add->Wi-Fiで設定します。

NetworkManager - Debian Wiki

Q. How to setup a connection sharing (“hotspot”) for a wired interface ?

A) First make sure to install dnsmasq-base (but not dnsmasq unless you disable the system daemon in /etc/default/dnsmasq). Then use nm-connection-editor and setup a new profile using “shared to other computer” as the method for IPv4 (not possible from Gnome3’s gnome-control-center). This hides all the complexity (dnsmasq, iptables, sysctl). Finally, use that profile for the network interface connected to the shared network. For Wi-Fi interfaces, a hotspot functionality is provided which uses the same functionality besides setting up an ad-hoc WiFi network.

デフォルトのサブネット:10.42.0.x/24192.168.5.1/24 変更する場合

$ sudo nmcli con modify WIFI_AP ipv4.addr 192.168.5.1/24

アクセスポイント設定の留意点

以下のように2つの個々の物理インターフェイスをWiFiクライアントアクセスポイントとして利用する際のポイント(NetworkManager(nmtui)でクライアント、アクセスポイントを設定)。


dnsmasqDNSサーバ、DHCPサーバ機能(dnsmasq-base)を使用することにより、アクセスポイントの設定が容易になりますが以下注意が必要です。

上記 dnsmasq リンク先から抜粋

Note that the package “dnsmasq” interferes with Network Manager which can use “dnsmasq-base” to provide DHCP services when sharing an internet connection. Therefore, if you use network manager (fine in simple set-ups only), then install dnsmasq-base, but not dnsmasq. If you have a more complicated set-up, uninstall network manager, use dnsmasq, or similar software (bind9, dhcpd, etc), and configure things by hand.

NetworkManagerが利用するdnsmasqは、 dnsmasq-base(Ubuntuにはデフォルトでインストール) のため、dnsmasq(dnsmasq-baseとは別パッケージ)のインストールは必要ありません。

但し、上記の記事にも掲載しましたが、NetworkManagerdnsmasqDNSサーバ機能(プラグイン)を利用するため、以下の設定ファイルで dns=dnsmasq とする必要があります。

/etc/NetworkManager/NetworkManager.conf

[main]
#dns=default
dns=dnsmasq
......
.....

アクセスポイント設定の際にもDHCPサーバの設定にdnsmasq-baseが利用されます。

もし以前にhostapdの設定を有効にした場合には無効にする必要があります。
hostapdはデフォルトでデーモン起動しますが、設定ファイル /etc/default/hostapd 内で以下の箇所をコメントアウトしてNetworkManagerdnsmasq-baseによるDHCPサーバ機能と干渉しないようにします(デフォルトではコメントアウトした状態)。

#DAEMON_CONF="/etc/hostapd/hostapd.conf"


以上を簡単に纏めると、

NetworkManagerを利用してネットワーク設定を行う場合、dnsmasq(dnsmasq-baseとは別パッケージ)hostapdは必要ない

となります。


NetworkManager内でのdnsmasqの設定ディレクトリは、以下用途別になっています。

  • DNSサーバとしての設定ディレクトリ: /etc/NetworkManager/dnsmasq-shared.d
  • DHCPサーバとしての設定ディレクトリ: /etc/NetworkManager/dnsmasq.d

オプションを追加指定する場合には、上記ディレクトリ内に*.confファイルを作成して下さい。

$ sudo service NetworkManager status
● NetworkManager.service - Network Manager
     Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-03-09 13:33:44 JST; 1h 12min ago
       Docs: man:NetworkManager(8)
   Main PID: 642 (NetworkManager)
      Tasks: 5 (limit: 2052)
     Memory: 10.9M
        CPU: 5.678s
     CGroup: /system.slice/NetworkManager.service
             ├─ 642 /usr/sbin/NetworkManager --no-daemon
             ├─1182 /usr/sbin/dnsmasq --conf-file=/dev/null --no-hosts --keep-in-foreground --bind-interfaces --except-interface=lo --clear-on-reload --strict-order --listen-address=10.42.0.1 --dhcp-range=10.42.0.10,10.42.0.254,60m --dhcp-lease-max=50 --dhcp-leasefile=/var/lib/NetworkManager/dnsmasq-wlan1.leases --pid-file=/run/nm-dnsmasq-wlan1.pid --conf-dir=/etc/NetworkManager/dnsmasq-shared.d
             └─1270 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/NetworkManager/dnsmasq.pid --listen-address=127.0.0.1 --cache-size=400 --clear-on-reload --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d