こうこく
作 ▸

ArchLinuxをNetworkManagerでWi-FiホットスポットにしてiPhoneとSFTPでファイル共有する

固定回線が無い環境に数日行くから、書き物用にArchLinuxラップトップ持っていこうと思ったんだけど、Linux⇔iPhone間でインターネットや追加の機器無しでファイル共有できる方法を用意しておきたかった。

今回はLinuxラップトップをWi-Fiホットスポット (AP) にして、iPhoneからSFTPで接続する方法を採用。それをやった時のメモ。

ArchLinuxNetworkManager 1.48.8-1dnsmasq 2.90
もくじ

前提

SFTPで接続するので、iPhoneにはSFTPクライアントアプリをインストールしておく必要がある。自分は Textastic を持っているのでここでは Textastic を使用するが、無料の FTPManager などでも同じことは可能。

また、Linux側はSSH接続を許可しておく必要がある。それと表題通りNetworkManagerを使うので、NetworkManagerもインストール済みである前提。

ArchLinuxへのNetworkManagerの導入方法は以下参照。

NetworkManager - ArchWiki

手順1. ネットワークインターフェースの確認

Linuxマシンのネットワークインターフェースを確認。

ip address
実行結果 (例)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
4: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 28:c6:3f:8e:ae:a4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.106/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
       valid_lft 82211sec preferred_lft 82211sec
    inet6 2408:211:1f42:1900:7081:d582:abea:598f/64 scope global dynamic noprefixroute
       valid_lft 273sec preferred_lft 273sec
    inet6 2408:211:1f42:1900:2ac6:3fff:fe8e:aea4/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 273sec preferred_lft 273sec
    inet6 fe80::be0:e6a8:e751:1199/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

無線インターフェースは wlan0 のほう。ここではこのネットワークインターフェースを使ってホットスポットを作る。

続けて、このネットワークインターフェースをAPとして動作させられるか確認。

nmcli -f WIFI-PROPERTIES device show wlan0
実行結果
WIFI-PROPERTIES.WEP:                    yes
WIFI-PROPERTIES.WPA:                    yes
WIFI-PROPERTIES.WPA2:                   yes
WIFI-PROPERTIES.TKIP:                   yes
WIFI-PROPERTIES.CCMP:                   yes
WIFI-PROPERTIES.AP:                     yes
WIFI-PROPERTIES.ADHOC:                  yes
WIFI-PROPERTIES.2GHZ:                   yes
WIFI-PROPERTIES.5GHZ:                   yes
WIFI-PROPERTIES.6GHZ:                   no
WIFI-PROPERTIES.MESH:                   no
WIFI-PROPERTIES.IBSS-RSN:               yes

WIFI-PROPERTIES.APyes なのでOK。

手順2. dnsmasq 導入

LinuxマシンをAPにするとき、iPhone側には自動的にIPアドレスを割り振ってほしいので、DHCPサーバーとして動けるようにする。

NetworkManagerは dnsmasq がインストールされてる時、デフォルトでは内部的に dnsmasq を使ってDHCPサーバーをやるらしい。なので dnsmasq をインストールする。

sudo pacman -S dnsmasq

ただこのあたり、調べても正直よくわからなかった。ただ dnsmasq をインストールしないと想定通りに動作しなかったことと、dnsmasq を start したりサービス有効にしたりする必要が無いことは試してみたので確か。

Note

NetworkManagerの設定ファイル (/etc/NetworkManager/ 以下) で設定できる dns 値は、ここでは未設定。なのでこれがデフォルトの動作だと思うけど、ここを変更してる人は、キーごと削除しないと同じように動かないと思う。

手順3. ホットスポット作成

ここでは以下の設定でホットスポットを作成する。

  • SSID … 呪いのアクセスポイント
  • パスワード … piyopiyoppiyo

以下コマンドで、Wi-Fiホットスポットを作成できる。

nmcli dev wifi hotspot ifname wlan0 ssid "呪いのアクセスポイント" password "piyopiyoppiyo"
実行結果
Device 'wlan0' successfully activated with 'f0cf31d2-99f3-4866-b52f-7189b58a0424'.
Hint: "nmcli dev wifi show-password" shows the Wi-Fi name and password.

なお、このときインターフェース wlan0 が使用中だと 802.1X supplicant took too long to authenticate. エラーが出る。何が使用中にあたるのかよくわからなかったので、Linuxマシンを再起動して、その直後にやり直したら通った。

作成したコネクションは以下コマンドで確認できる。

nmcli con show
実行結果 (例)
MyHome5GHz  4c9cf870-3176-48ce-84a3-f77eeeb5ffa1  wifi      wlan0
lo          fedc3623-c402-41d1-b412-ae49129e3be5  loopback  lo
Hotspot     f0cf31d2-99f3-4866-b52f-7189b58a0424  wifi      --

作成したホットスポットのConnection nameは、デフォルトだと Hotspot となる。

手順4. WPS無効化

ホットスポットを作成できたが、このままだと接続時にWPSのPINの入力を求められてしまう。

正確には、Windows PCから接続しようとするとPINを求められて止まるが、iPhoneから接続しようとするとPINの入力欄などは出てこないのでいつまで経っても接続が成功しないように見えた。

調べたところ、PINを調べる方法よりもWPSを無効化する方法ばかり見つかったので、そういうものだと考えて無効化することにした。以下コマンドでWPSを無効化できる。

nmcli con modify Hotspot 802-11-wireless-security.wps-method disabled

コネクションに対する変更なので、modify の次の引数はSSIDではなくConnection nameであることを留意。

手順5. ホットスポット有効化

作成したホットスポットは、以下コマンドで有効化できる。

nmcli con up id Hotspot
実行結果 (例)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9)

Note

ここではLinuxマシンの普段使いの wlan0 をAPに使っているので、これを行った時点でLinuxマシンからのインターネット接続は行えなくなる。

これで周囲の無線デバイスからSSIDが見えるようになる。

なおGUIを使用している場合、nm-appletから『Create New Wi-Fi Network』でも同様に有効化できる。

手順6. iPhoneからホットスポットに接続

iPhoneのWi-Fi設定を開くと、ホットスポットに設定したSSIDが見えているので、それを選択して接続。パスワードは手順3で設定したものを入力。

また、同設定画面からルーターのIPアドレス (デフォルトゲートウェイ) を確認できる。それがiPhoneから見たPCのIP。

以後はiPhoneのSFTPクライアントから、PCのIPを入力して接続可能。

やることやったら、以下コマンドでホットスポットは無効化しておこう。

nmcli con down id Hotspot

以上。

参考にさせていただいたページ

ソフトウェアアクセスポイント - ArchWiki

Creating a Wireless Access Point and Sharing Internet Using nmcli | Baeldung on Linux

network\_manager\_create\_wifi\_hotspot - network - commands - linux [ともやん・どっと・ねっと]

NetworkManagerを用いて構築したアクセスポイントのWPSを無効化する方法 | Armadilloサイト


この記事の内容に関するChatGPT (GPT-4o) との会話ログ

この記事に何かあればこちらまで (非公開)