ArchLinuxをNetworkManagerでWi-FiホットスポットにしてiPhoneとSFTPでファイル共有する
固定回線が無い環境に数日行くから、書き物用にArchLinuxラップトップ持っていこうと思ったんだけど、Linux⇔iPhone間でインターネットや追加の機器無しでファイル共有できる方法を用意しておきたかった。
今回はLinuxラップトップをWi-Fiホットスポット (AP) にして、iPhoneからSFTPで接続する方法を採用。それをやった時のメモ。
前提
SFTPで接続するので、iPhoneにはSFTPクライアントアプリをインストールしておく必要がある。自分は Textastic を持っているのでここでは Textastic を使用するが、無料の FTPManager などでも同じことは可能。
また、Linux側はSSH接続を許可しておく必要がある。それと表題通りNetworkManagerを使うので、NetworkManagerもインストール済みである前提。
ArchLinuxへのNetworkManagerの導入方法は以下参照。
手順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.AP
が yes
なので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
以上。
参考にさせていただいたページ
Creating a Wireless Access Point and Sharing Internet Using nmcli | Baeldung on Linux
network\_manager\_create\_wifi\_hotspot - network - commands - linux [ともやん・どっと・ねっと]
NetworkManagerを用いて構築したアクセスポイントのWPSを無効化する方法 | Armadilloサイト