Share Network between PC and Mobile through WiFi on Debian GNU/Linux 10
【摘要】敘述全用指令行程式,經由 WiFi,讓「電腦使用智慧手機的上網功能」和「智慧手機使用電腦網路」的方法。
【目錄】
【前言】【電腦用手機網路】
【手機用電腦網路】
【前言】
一、通常電腦要上網是直接或間接使用網路線,而智慧手機上網是用電信數據服務或 WiFi。但如果電腦有網路線可上網而手機無 SIM 卡,手機要如何上網?反過來,若手機可經由電信上網,而電腦無網路線,那電腦要如何上網?
二、本文曾在三年半前發表為「電腦-手機互用網路」,那時電腦作業系統是 Ubuntu Linux 14;近日在自製的 FluxBox Debian GNU/Linux 10 測試,更新內容,分享於此。
三、本例手機仍是 Asus Zenfone 2 Laser (Android M),是有點老了,但原理是一樣的。
四、以下內容中,
USER
是使用者名稱/帳戶名ETH0
是有線網路的界面名稱WLAN0
是無線網路界面名稱
這三個請更改為自己系統的名稱,不再一一提醒。界面名稱可用 ip a
指令查出。
【電腦用手機網路】
⑴ 安裝工具程式
sudo apt install iw wpasupplicant
前者管理無線網路,後者管理密碼。
⑵ 設定手機
SIM 卡要先啟用。
[設定], [Wi-Fi] 開啟。
[設定] > [更多] > [數據網路],[啟用行動數據服務] 開啟。
[設定] > [更多] > [網路共用與可攜式無線基地台] > [設定Wi-Fi無線基地台]
設定 [網路名稱] 和 [密碼] 後,[儲存]。
以下用 MobileWiFi
和 WiFiPassword
做範例。
[設定] > [更多] > [網路共用與可攜式無線基地台],[可攜式Wi-Fi無線基地台] 開啟。
⑶ 檢查電腦是否能收到訊號
sudo iw dev WLAN0 scan | grep SSID
若可,會新增設定的網路名稱 MobileWiFi
。
⑷ 建立密碼設定檔
wpa_passphrase MobileWiFi WiFiPassword >> /home/USER/.config/wpa_supplicant.conf
註:>>
是附加;若用 >
是取代,原內容會消失。
⑸ 列出可用的驅動程式
wpa_supplicant
本例為:
nl80211 = Linux nl80211/cfg80211 wext = Linux wireless extensions (generic) wired = Wired Ethernet driver none = no driver (RADIUS server/WPS ER)
⑹ 連線
sudo wpa_supplicant -B -c/home/USER/.config/wpa_supplicant.conf -iWLAN0 -Dnl80211,wext
-B
:背景執行。
-c
:設定檔。
-i
:界面名稱。
-D
:驅動程式。nl80211
、wext
任一皆可,也可並列如上。
可用 sudo iw dev WLAN0 link
檢查有無連上。
⑺ 取得 ip
sudo dhclient WLAN0
電腦應該可以透過手機網路上網了。
⑻ 電腦端斷線
sudo dhclient -r WLAN0
再連線,用第⑺步驟。
⑼ 電腦重啟
電腦重新開機,要再執行第⑹⑺步驟,才可透過手機網路上網,如果第⑵步驟手機設定皆已完成。
⑽ 自動連線
若想電腦開機即自動連線,以 root 權限編輯 /etc/network/interfaces 檔,含以下內容。
auto WLAN0 iface WLAN0 inet dhcp wpa-conf /home/USER/.config/wpa_supplicant.conf
註:WLAN0
的設定只能有一個。現在是"電腦用手機網路",若原有"手機用電腦網路"的設定,要在其行首加 #
。
【手機用電腦網路】
⑴ 檢查電腦硬體是否支援
sudo iw list
本例輸出:
Supported interface modes: * IBSS * managed * AP * AP/VLAN * monitor
支援的界面模式要有 AP
(Access Point) 才行。 Access Point 相當於 Hotspot (熱點)。
⑵ 安裝工具程式
sudo apt install hostapd isc-dhcp-server
前者提供熱點,後者提供 ip。
⑶ 編輯 hostapd 檔
以 root 權限開啟 /etc/default/hostapd,指定設定檔的位置。放在自己家比較容易管理。
DAEMON_CONF="/home/USER/.config/hostapd.conf"
⑷ 新增 hostapd.conf 檔
/home/USER/.config/hostapd.conf 檔的內容如下:
interface=WLAN0 driver=nl80211 ssid=wifi_host hw_mode=g channel=1 auth_algs=3 wpa=3 wpa_passphrase=wifi_host_password wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
註一:請參考 /usr/share/doc/hostapd/examples/hostapd.conf。
註二:interface
是無線界面名稱。
註三:ssid
是 WiFi 名稱,請隨意自定。
註四:wpa_passphrase
是密碼,請自定。
註五:行末不要有空白,也不要有空白末行。
註六:注意此檔 owner。
⑸ 編輯 interfaces 檔
以 root 權限開啟 /etc/network/interfaces,要有如下內容:
allow-hotplug WLAN0 auto WLAN0 iface WLAN0 inet static address 192.168.10.1 netmask 255.255.255.0
註一:此處設為固定位址。
註二:netmask
幾乎固定不變。
註三:WLAN0
的設定只能有一個。現在是"手機用電腦網路",若原有"電腦用手機網路"的設定,要在其行首加 #
。
⑹ 編輯 isc-dhcp-server 檔
以 root 權限開啟 /etc/default/isc-dhcp-server,修改為:
INTERFACESv4="WLAN0" INTERFACESv6=""
⑺ 編輯 dhcpd.conf 檔
以 root 權限開啟 /etc/dhcp/dhcpd.conf,基本內容如下:
ddns-update-style none; authoritative; subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.10 192.168.10.20; option subnet-mask 255.255.255.0; option routers 192.168.10.1; option broadcast-address 192.168.10.255; option domain-name-servers 8.8.8.8, 8.8.4.4; }
註一:前兩項原檔有說明。
註二:subnet
片段可加在檔案最後。
subnet
後面的位址第四碼是 0
。前三碼不要和有線的一樣;連上網路線,執行 ip a
便會列出有線的 inet
addr。
routers
第四碼是 1
。這和 /etc/network/interfaces 設定的一樣。
broadcast-address
第四碼是 255
。
range
第四碼就選上面三值以外的。設 5、10、15、20 甚至 100 個都沒關係。
Domain-name-servers
(DNS)用 Google 的就可以了;曾試過中華電信的,不能用。
註三:可用 sudo dhcpd -t
指令檢查 dhcpd.conf 語法是否正確。除基本訊息外,若無多餘訊息,表示語法正確,但不表示可用。
⑻ 重新開機
以上設定完成,請重新開機使這些設定生效。
⑼ 檢查狀態
用以下指令確認 hostapd 和 isc-dhcp-server 有無執行:
systemctl status hostapd systemctl status isc-dhcp-server
若有 Failed to start hostapd.service: Unit hostapd.service is masked,請試:
sudo systemctl unmask hostapd sudo systemctl enable hostapd sudo systemctl start hostapd
若有 Operation not possible due to RF-kill,請試:
sudo apt install rfkill sudo rfkill list 若有Soft blocked: yes
,請執行: sudo rfkill unblock wifi
⑽ 打開防火牆
sudo sysctl net.ipv4.ip_forward=1 sudo sysctl net.ipv6.conf.all.forwarding=1 sudo iptables -t nat -A POSTROUTING -o ETH0 -j MASQUERADE sudo iptables -A FORWARD -i WLAN0 -j ACCEPT
註一:前兩個設定若想設為預設值,可編輯 /etc/sysctl.conf 檔。
註二:可執行 sudo sysctl -a | grep forward
看目前設定值。
⑾ 設定手機
手機 [設定] > [Wi-Fi] 開啟。
[設定] > [更多] > [數據網路],[啟用行動數據服務] 關閉。
[設定] > [更多] > [網路共用與可攜式無線基地台],[可攜式Wi-Fi無線基地台] 關閉。
手機應有此 WiFi 網路可用,即使沒裝 SIM 卡也可以。
⑿ 中止 WiFi
電腦要中止 WiFi,請執行以下指令:
sudo sysctl net.ipv4.ip_forward=0 sudo sysctl net.ipv6.conf.all.forwarding=0 sudo systemctl stop isc-dhcp-server sudo systemctl stop hostapd
⒀ 再啟 WiFi
電腦要重啟 WiFi,請執行以下指令:
sudo sysctl net.ipv4.ip_forward=1 sudo sysctl net.ipv6.conf.all.forwarding=1 sudo systemctl start isc-dhcp-server sudo systemctl start hostapd
註一:若無法再開始,可能要重新開機。
註二:可將此等指令分別存成檔案,設為可執行,甚至指定快捷鍵。