【Ubuntu 24.04】【netplan】 WiFi ホットスポット化

ネットワーク設定情報

WiFi インタフェースと Ethernet インタフェースを持つ Ubuntu Server で、WiFi インタフェースをホットスポットとして使用して無線LANルータ化を行う。
また、この時インターネット可能なように Source NAPT を行う。
※ WiFi ホットスポット有効化の際に【netplan】のレンダラーは【NetworkManager】が必須

項目WiFi ホットスポットWiFi クライアント
物理インタフェースwlp6s0(OS 依存)
IPv4 Address192.168.252.254/24DHCPv4
Gateway上位 NWDHCPv4
(192.168.252.254)
DNSサーバ動作
(192.168.252.254)
DHCPv4
(192.168.252.254)
DHCPサーバ動作
(192.168.252.254)
DHCPv4 クライアント
インタフェース設定
項目設定値
セキュリティ (RSN)WPA2
暗号方式AES (CCMP)
認証方式Pre-Shared Key
WiFi 規制ドメインJP
周波数2.4GHz
ステルス ESSID無効
ESSIDhotspot-01
BSSIDインタフェースのMACアドレス
WiFi 設定

Source NAT は UFW を使用して行う。WiFi ホットスポット用のポリシー情報は以下となる。
※ UFW の NAPT は別記事を参照

ActionSource
(Address, Port)
Destination
(Address, Port)
DeviceProtocol
Allow IN0.0.0.0
port 68
255.255.255.255
port 67
wlp6s0UDP
Allow IN192.168.252.0/24192.168.252.0/24wlp6s0Any
Route Allow192.168.252.0/24AnyIN: wlp6s0
OUT: en0
UFW 設定

設定前のハードウェア情報を確認する。

$ sudo lshw -C network -short
H/W path             Device     Class          Description
==========================================================
/0/100/1c.1/0        wlp6s0           network        Wireless 7265
/10                  enx000000aaaaaa  network        Ethernet interface

インタフェース設定

Wi-Fi ホットスポット化に必要な Network Manager をインストールする。

$ sudo apt install network-manager

Netplan の config 設定を行う。作成するファイルは適用順番を考慮し、番号を大きくする。
【/etc/netplan/56-network.yaml】
※【renderer】は必ず【NetworkManager】にすること。
※【passthrough】関連の設定が無いとNetworkManager側に設定が反映されない為注意

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    enx000000aaaaaa:
      match:
        macaddress: 00:00:00:aa:aa:aa
      set-name: en0
      dhcp4: true
      dhcp6: false
      accept-ra: true
  wifis:
    wlp6s0:
      dhcp4: false
      dhcp6: false
      addresses:
        - 192.168.252.254/24
      optional: true
      regulatory-domain: "JP"
      access-points:
        "hotspot-01":
          mode: ap
          band: 2.4GHz
          hidden: false
          auth:
            key-management: psk
            password: "[PRE-SHARED KEY]"
          networkmanager:
            passthrough:
              wifi-security.proto: "rsn"
              wifi-security.group: "ccmp"
              wifi-security.pairwise: "ccmp"

設定を反映する。問題なければ制限時間以内に【Enter】キーを押す。

$ sudo netplan try
Do you want to keep these settings?


Press ENTER before the timeout to accept the new configuration


Changes will revert in 116 seconds

【Enter】
Configuration accepted.

Wi-Fi 設定 (802-11-wireless 関連)、IP アドレス (ipv4.method が shared になっている事)

$ nmcli connection show netplan-wlp6s0-hotspot-01
connection.id:                          netplan-wlp6s0-hotspot-01
connection.uuid:                        xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
connection.stable-id:                   --
connection.type:                        802-11-wireless
connection.interface-name:              wlp6s0
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
connection.timestamp:                   1730014786
connection.permissions:                 --
connection.zone:                        --
connection.controller:                  --
connection.master:                      --
connection.slave-type:                  --
connection.port-type:                   --
connection.autoconnect-slaves:          -1 (default)
connection.autoconnect-ports:           -1 (default)
connection.secondaries:                 --
connection.gateway-ping-timeout:        0
connection.metered:                     unknown
connection.lldp:                        default
connection.mdns:                        -1 (default)
connection.llmnr:                       -1 (default)
connection.dns-over-tls:                -1 (default)
connection.mptcp-flags:                 0x0 (default)
connection.wait-device-timeout:         -1
connection.wait-activation-delay:       -1
802-11-wireless.ssid:                   hotspot-01
802-11-wireless.mode:                   ap
802-11-wireless.band:                   bg
802-11-wireless.channel:                0
802-11-wireless.bssid:                  --
802-11-wireless.mac-address:            --
802-11-wireless.cloned-mac-address:     --
802-11-wireless.generate-mac-address-mask:--
802-11-wireless.mac-address-blacklist:  --
802-11-wireless.mac-address-randomization:default
802-11-wireless.mtu:                    auto
802-11-wireless.seen-bssids:            xx:xx:xx:xx:xx:xx
802-11-wireless.hidden:                 no
802-11-wireless.powersave:              0 (default)
802-11-wireless.wake-on-wlan:           0x1 (default)
802-11-wireless.ap-isolation:           -1 (default)
802-11-wireless-security.key-mgmt:      wpa-psk
802-11-wireless-security.wep-tx-keyidx: 0
802-11-wireless-security.auth-alg:      --
802-11-wireless-security.proto:         rsn
802-11-wireless-security.pairwise:      ccmp
802-11-wireless-security.group:         ccmp
802-11-wireless-security.pmf:           0 (default)
802-11-wireless-security.leap-username: --
802-11-wireless-security.wep-key0:      <hidden>
802-11-wireless-security.wep-key1:      <hidden>
802-11-wireless-security.wep-key2:      <hidden>
802-11-wireless-security.wep-key3:      <hidden>
802-11-wireless-security.wep-key-flags: 0 (none)
802-11-wireless-security.wep-key-type:  unknown
802-11-wireless-security.psk:           <hidden>
802-11-wireless-security.psk-flags:     0 (none)
802-11-wireless-security.leap-password: <hidden>
802-11-wireless-security.leap-password-flags:0 (none)
802-11-wireless-security.wps-method:    0x0 (default)
802-11-wireless-security.fils:          0 (default)
ipv4.method:                            shared
ipv4.dns:                               --
ipv4.dns-search:                        --
ipv4.dns-options:                       --
ipv4.dns-priority:                      0
ipv4.addresses:                         192.168.252.254/24
ipv4.gateway:                           --
ipv4.routes:                            --
ipv4.route-metric:                      -1
ipv4.route-table:                       0 (unspec)
ipv4.routing-rules:                     --
ipv4.replace-local-rule:                -1 (default)
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-iaid:                         --
ipv4.dhcp-dscp:                         --
ipv4.dhcp-timeout:                      0 (default)
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.dhcp-hostname-flags:               0x0 (none)
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv4.required-timeout:                  -1 (default)
ipv4.dad-timeout:                       -1 (default)
ipv4.dhcp-vendor-class-identifier:      --
ipv4.link-local:                        0 (default)
ipv4.dhcp-reject-servers:               --
ipv4.auto-route-ext-gw:                 -1 (default)

DNSサーバ、DHCPサーバが動作していることを確認する。

$ sudo ss -tanpl | grep 53
LISTEN 0      32       192.168.252.254:53         0.0.0.0:*    users:(("dnsmasq",pid=32194,fd=7))

$ sudo ss -uanpl | grep 67
UNCONN 0      0        0.0.0.0:67        0.0.0.0:*    users:(("dnsmasq",pid=32194,fd=4))

Firewall 設定

UFW の通信許可設定を行う。DHCP、及び内部からのトラフィック許可、およびルーティングの許可を実施。

$ sudo ufw allow in on wlp6s0 from 0.0.0.0 port 68 to 255.255.255.255 port 67 proto udp
$ sudo ufw allow in on wlp6s0 from 192.168.252.0/24 to 192.168.252.0/24
$ sudo ufw route allow in on wlp6s0 out on en0 from 192.168.252.0/24

設定値を確認する。

$ sudo ufw show added
Added user rules (see 'ufw status' for running firewall):
ufw allow in on wlp6s0 from 0.0.0.0 port 68 to 255.255.255.255 port 67 proto udp
ufw allow in on wlp6s0 from 192.168.252.0/24 to 192.168.252.0/24
ufw route allow in on wlp6s0 out on en0 from 192.168.252.0/24

状態確認

WiFi クライアントから接続し、状態を確認する。
QRコードから接続する場合は以下のコマンドにてQRコード画像の表示が可能。

$ nmcli device wifi show
SSID: hotspot-01
Security: WPA
[ここにQRコード画像が表示される]

WiFi クライアント接続後、IPがアサインされている事が分かる。
なんか権限エラーが出ているのは取り敢えず放置・・・(^ν^)

$ journalctl -exb | grep dnsmasq
Oct 27 16:39:46 helix NetworkManager[32011]: <info>  [1730014786.2457] dnsmasq-manager: starting dnsmasq...
Oct 27 16:39:46 helix dnsmasq[32194]: started, version 2.90 cachesize 150
Oct 27 16:39:46 helix dnsmasq[32194]: compile time options: IPv6 GNU-getopt DBus no-UBus i18n IDN2 DHCP DHCPv6 no-Lua TFTP conntrack ipset nftset auth cryptohash DNSSEC loop-detect inotify dumpfile
Oct 27 16:39:46 helix dnsmasq[32194]: chown of PID file /run/nm-dnsmasq-wlp6s0.pid failed: Operation not permitted
Oct 27 16:39:46 helix dnsmasq-dhcp[32194]: DHCP, IP range 192.168.252.1 -- 192.168.252.245, lease time 1h
Oct 27 16:39:46 helix dnsmasq[32194]: reading /etc/resolv.conf
Oct 27 16:39:46 helix dnsmasq[32194]: using nameserver 127.0.0.53#53
Oct 27 16:39:46 helix dnsmasq[32194]: cleared cache
Oct 27 16:49:45 helix dnsmasq-dhcp[32194]: DHCPREQUEST(wlp6s0) 192.168.252.176 xx:xx:xx:xx:xx:xx
Oct 27 16:49:45 helix dnsmasq-dhcp[32194]: DHCPACK(wlp6s0) 192.168.252.176 xx:xx:xx:xx:xx:xx

【参考URL】
Netplan documentation
Cannot connect to Raspberry Pi 4 WiFI access point Ubuntu 22.04 server Netplan NetworkManager
WPA3のはなし
Netplan: Access Point setup with WPA2 authentication
Wifi NetworkManager – Variscite Wiki