2017年2月19日 星期日

設定樹莓派 WiFi 無線網卡固定 IP 的方法

之前在樹莓派上設定無線網卡時都採用 DHCP 方式由無線路由器自動指派 IP, 但是由於不知道 DHCP 會指定甚麼 IP 給樹莓派, 如果要從遠端 PC 做 Headless (無頭) 存取, 勢必要登入無線路由器管理頁面透過無線網卡的 MAC 位址找到所分派的 IP, 這樣有點麻煩, 參考下面幾篇文章 :

# 樹莓派的 Wifi 設定 : 使用迅捷 FW150US
# Raspberry Pi B+ WiFi 無法連線問題
# 樹莓派的 "無頭存取" (headless access)

如果樹莓派是透過手機分享上網, 查 IP 會比較方便一點, 可在 "設定/更多內容/網路共用與可攜式無線基地台/可攜式 WiFi 無線基地台設定" 中查到所分派的 IP). 不過, 我還是希望樹莓派連上基地台時獲得固定 IP, 這樣用 Putty 遠端連線時 IP 就不用改來改去.

下面是根據柯博文寫的 "Raspberry Pi 最佳入門與實戰應用第二版" 第 3.3.3 節測試固定 IP 設定方法的實驗記錄.

首先用 ifconfig 查詢 wlan0 的網路資訊 :

pi@raspberrypi:~ $ ifconfig
eth0      Link encap:Ethernet  HWaddr b9:27:eb:2d:74:39
          inet6 addr: fe80::f6a5:9334:bd66:f9a7/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:4478 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4478 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:936384 (914.4 KiB)  TX bytes:936384 (914.4 KiB)

wlan0     Link encap:Ethernet  HWaddr 09:1d:43:20:0b:26   (MAC 位址)
          inet addr:192.168.43.26  Bcast:192.168.43.255  Mask:255.255.255.0
          inet6 addr: fe80::21d:43ff:fe20:b26/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:36546 errors:0 dropped:13624 overruns:0 frame:0
          TX packets:33900 errors:0 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:128164113 (122.2 MiB)  TX bytes:10314492 (9.8 MiB)

主要是 inet address (我想要的固定 IP), Bcast (廣播位址), 以及 Mask (遮罩). 可見我的手機基地台分派 192.168.43 網域之網址.

然後編輯網路介面設定檔 /etc/network/interfaces :

pi@raspberrypi:~ $ sudo nano /etc/network/interfaces

原來 DHCP 的設定是 : 

source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp        
wpa-ssid "H30-L02-webbot"
wpa-psk "1234567890"

將其修改為 (藍色部分) :

source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
auto wlan0
iface wlan0 inet static              #固定 IP
address 192.168.43.26             #我想要的 IP
gateway 192.168.43.254          #閘道器位址
netmask 255.255.255.0            #網路遮罩
network 192.168.43.1              #網路位址
broadcast 192.168.43.255        #廣播位址
wpa-ssid "H30-L02-webbot"
wpa-psk "1234567890"

按 Ctrl+O 存檔後按 Ctrl+X 跳出, 再輸入下列指令重啟網路介面 :

pi@raspberrypi:~ $ sudo /etc/init.d/networking restart 

重啟後從手機的可攜式 WiFi 無線基地台設定中看到確實再次連線成功, 其 IP 即我所要的 192.168.43.26 :





這樣當突然停電造成樹莓派重新開機時, 就會固定獲得所要的 IP, 不會變來變去. 雖然在使用 DHCP 時, 每次樹莓派重開機都能獲得同樣的 IP, 不過我想那是因為當時剛好沒別的設備連線的關係, 使用固定 IP 仍有必要.

參考 :

#  Tutorial - How to give your Raspberry Pi a Static IP Address


2017-09-24 補充 :

今天將鄉下的 Pi 3 改為固定 IP, 如此一來用 PC 做 headless access 時才不用去查目前 Pi 3 的 IP 是多少. 原先用 DHCP 取得 IP 的設定 :

pi@raspberrypi:~ $ ifconfig
eth0      Link encap:Ethernet  HWaddr b8:27:eb:54:a9:XX
          inet6 addr: fe80::4387:9902:66d9:3062/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:524 (524.0 B)  TX bytes:524 (524.0 B)

wlan0     Link encap:Ethernet  HWaddr b8:27:eb:01:fc:XX
          inet addr:192.168.2.116  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::ba27:ebff:fe01:fca3/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:66 errors:0 dropped:0 overruns:0 frame:0
          TX packets:91 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:9593 (9.3 KiB)  TX bytes:14030 (13.7 KiB)

上面的 inet addr 為 DHCP 指派給 Pi 3 的 IP; Bcast 是廣播位址要抄下來給 broadcast, 而 Mask 則是要給 netmask. 先用 nano 在 home 下編輯一個 interfaces_fix 檔案 :

pi@raspberrypi:~ $ nano interfaces_fix
pi@raspberrypi:~ $ cat interfaces_fix
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
auto wlan0
iface wlan0 inet static          
address 192.168.2.192       #我要的 IP        
gateway 192.168.2.2          #無線基地台 IP    
netmask 255.255.255.0      #從 ifconfig 得到 
network 192.168.2.1          #無線基地台起始位址  
broadcast 192.168.2.255    #從 ifconfig 得到
wpa-ssid "EDIMAX-meixxxx"
wpa-psk "a5572056"

注意, 上面 # 與後面的註解都要拿掉, 否則無法運作.

上面 Gateway IP 即無線基地台 IP, 與 netmask 可在基地台管理網頁查得 :




然後將 interfaces_fix 複製到 /etc/network/interfaces 將 interfaces 蓋掉, 再重新起始網路介面 :

pi@raspberrypi:~ $ sudo cp interfaces_fix /etc/network/interfaces
pi@raspberrypi:~ $ sudo /etc/init.d/networking restart  
[....] Restarting networking (via systemctl): networking.serviceWarning: Unit file of networking.service changed on disk, 'systemctl daemon-reload' recommended.
. ok
pi@raspberrypi:~ $ ifconfig
eth0      Link encap:Ethernet  HWaddr b8:27:eb:54:a9:f6
          inet6 addr: fe80::4387:9902:66d9:3062/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:69 errors:0 dropped:0 overruns:0 frame:0
          TX packets:69 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:4852 (4.7 KiB)  TX bytes:4852 (4.7 KiB)

wlan0     Link encap:Ethernet  HWaddr b8:27:eb:01:fc:a3
          inet addr:192.168.2.192  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a434:e9f3:65ef:6334/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24192 errors:0 dropped:2 overruns:0 frame:0
          TX packets:14960 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:13299614 (12.6 MiB)  TX bytes:2151929 (2.0 MiB)

可見已向基地台取得固定 IP 192.168.2.192 了.

沒有留言 :