Share Network between PC and Mobile through WiFi on Debian GNU/Linux 10

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無線基地台]
  設定 [網路名稱] 和 [密碼] 後,[儲存]。
  以下用 MobileWiFiWiFiPassword 做範例。

[設定] > [更多] > [網路共用與可攜式無線基地台],[可攜式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:驅動程式。nl80211wext 任一皆可,也可並列如上。

可用 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

註一:若無法再開始,可能要重新開機。

註二:可將此等指令分別存成檔案,設為可執行,甚至指定快捷鍵。


發表留言