讓iPhone使用Linux電腦的網路上網,並非手機分享網路給電腦(USB Tethering),而是電腦分享網路給手機(USB Reverse Tethering)。免越獄。
如圖,iPhone自身沒有連上Wifi,只靠USB連線到電腦,然後用電腦的乙太網路連線。因此兩者的對外IP是一樣的。

適用場合:iPhone的Wifi反灰燒壞、行動網路也無法使用的場合。在iPhone透過Linux網路上網的時候能抓取封包分析。
又或者是在iPhone與電腦做串流投影的時候,達成極低延遲的畫面傳輸。
iPhone是可以用乙太網路有線上網啦,但是你需要針對Lighting或Type-C買RJ45的轉接器。而這個方法只需要普通的USB線連到電腦即可。
這個功能在macOS似乎是內建的,叫做網路分享,Linux可透過usbmuxd達成。
iPhone在連接到電腦的時候會有多個devices modes能切換,其中的Mode 3會讓iOS裝置額外暴露CDC-NCM網路介面,使電腦可以透過USB線與iPhone建立一條Ethernet-over-USB 連線。這個模式也是macOS網路分享會使用的模式之一。
本文討論的操作主要在Linux進行,Windows的話請參閱:iPhone USB Reverse Tethering on Windows
1. 測試環境 #
CDC-NCM是iOS device mode 3的功能,需要iOS 10以上系統才有。
usbmuxd需要使用最新版1.1.1,令其支援USBMUXD_DEFAULT_DEVICE_MODE=3。Ubuntu 26.04收的版本不支援,需要手動編譯。
我測試的裝置:
- Ubuntu 26.04
- iPhone 12 Mini,iOS 27
2. 調整usbmuxd模式 #
-
編輯usbmuxd的Systemd服務
sudo systemctl edit --full usbmuxd- 指定Device mode為3
[Unit]
Description=Socket daemon for the usbmux protocol used by Apple devices
Documentation=man:usbmuxd(8)
[Service]
Environment="USBMUXD_DEFAULT_DEVICE_MODE=3"
ExecStart=/usr/sbin/usbmuxd --user usbmux --systemd- 重新啟動服務
sudo systemctl daemon-reload
sudo systemctl restart usbmuxd- 註:另一種測試方法,直接執行usbmuxd指令
sudo systemctl stop usbmuxd
which usbmuxd
sudo USBMUXD_DEFAULT_DEVICE_MODE=3 usbmuxd -f -v3. 連接iPhone #
-
在iOS系統設定關閉Wifi網路,拔出SIM卡,確認無法上網
-
將iPhone插入電腦,點選信任電腦
-
檢視USB連接類型
lsusb -t- iPhone的Driver應該會出現
cdc_ncm
/: Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/10p, 480M
|__ Port 001: Dev 033, If 0, Class=Imaging, Driver=[none], 480M
|__ Port 001: Dev 033, If 1, Class=Vendor Specific Class, Driver=usbfs, 480M
|__ Port 001: Dev 033, If 2, Class=Communications, Driver=cdc_ncm, 480M
|__ Port 001: Dev 033, If 3, Class=CDC Data, Driver=cdc_ncm, 480M
|__ Port 001: Dev 033, If 4, Class=Communications, Driver=cdc_ncm, 480M- 使用
ip addr指令檢視,Linux應該會多出一個網路界面
範例:
12: enx0e19f811f321: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether 0e:19:f8:11:f3:21 brd ff:ff:ff:ff:ff:ff- 使用NetworkManager列出裝置,例如會看到enx0e19f811f321
nmcli device- 新增網路設定,類型為以太網路,自動分配IP,
ifname填寫上面顯示的device
sudo nmcli connection add \
type ethernet \
ifname enx0e19f811f321 \
con-name iphone-usb \
ipv4.method shared \
ipv6.method disabled- 啟用連線
sudo nmcli connection up iphone-usb- 檢視連線情況
nmcli -f GENERAL.STATE,GENERAL.CONNECTION,IP4.ADDRESS device show enx0e19f811f321
nmcli -f ipv4.method,ipv4.addresses connection show iphone-usb-
iOS雖然沒有顯示乙太網路連線,但還是能上網的。
-
然後電腦和iPhone用瀏覽器打開網站,查看外部IP,應該會是一樣的。
