2021年7月17日 星期六

樹莓派架站 (十一) : 設定固定 IP 的方法

上週將 Pi 4 交給湘雲老師帶回學校, 用網路線連接到研究室網路 RJ45 插槽後開機, 我在遠端用 VNC Cloud 卻怎麼也無法與 Pi 4 連線. 經與圖資的劉老師請教, 原來學校的網路環境是有特別規劃的, 聯網主機必須指定 IP, gatway, mask, 以及 DNS server 等網址設定才可以連到學校網路, 我對網路底層一知半解, 以為像家裡一樣直接接上網路線就能讓 Pi 4 上 Internet, 實在太天真了. 

我之前在學習樹莓派時也做過固定 IP 的設定測試, 作法有兩種,例如下面這篇是透過 /etc/network/interface 這個檔案設定固定的無線網路 IP, 但在新版 Raspbian 已不管用了 :


下面這篇是新的做法, 是透過 /etc/dhcpcd.conf 這個檔來設定無線網路之固定 IP : 


所以之前都是在設定無線網路, 那固定網路該怎麼做呢? 我查詢了一些網路上的作法, 發現只要將 wlan0 改成 eth0 應該就可以, 參考 : 





綜合上面的資料, 可知設定固網 IP 基本上有兩種做法 : 


1. 使用 /etc/network/interfaces.d/eth0 檔 :

也可以直接使用 /etc/network/interface, 但這個檔案的預設內容為 :

source-directory /etc/network/interfaces.d

亦即此網路介面檔預設會從 /etc/network/interfaces.d 這目錄匯入底下的設定檔, 所以就沒有必要直接將網路設定資訊寫在這裡, 而是寫在此目錄下的檔案中, 例如固網就用 eth0 這檔名, 用 nano 編輯如下內容, 然後存成 eth0 檔案 :

auto eth0
iface eth0 inet static
        address 192.168.2.193
        netmask 255.255.255.0
        gateway 192.168.2.1
        dns-nameservers 168.95.1.1 8.8.8.8

此處 address 就是我要的固定 IP=192.168.2.193, 網路遮罩 netmask=255.255.255.0 表示最後一個 byte 為主機位址, 預設閘道 gateway=192.168.2.1 為我家基地台的 IP, 而 dns-server 所列兩個網址是 Google 的 DNS 伺服器網址. 網路遮罩可以在樹莓派聯網情況下用 ifconfig 查得; 而預設閘道則可用 route -ne 指令查得, 參考 :


pi@raspberrypi:~ $ route -ne
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.2.1     0.0.0.0         UG        0 0          0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0




也可以用 Windows 的 ipconfig 指令查詢 : 




將上面的 /etc/network/interfaces.d/eth0 存檔後檢視內容如下 :

pi@raspberrypi:~ $ cat /etc/network/interfaces.d/eth0    
auto eth0
iface eth0 inet static
        address 192.168.2.193
        netmask 255.255.255.0
        gateway 192.168.2.1
        dns-nameservers 168.95.1.1 8.8.8.8

然後下 sudo reboot 重開機, 果然順利取得固定 IP :




2. 使用 /etc/dhcpcd.conf 檔 :

為了確定這種方式可行, 不受上面第一種方法干擾, 所以先將上面的 /etc/network/interfaces.d/eth0 這個檔備份到 pi 目錄下保存然後刪除 : 

pi@raspberrypi:~ $ sudo mv /etc/network/interfaces.d/eth0 eth0     
pi@raspberrypi:~ $ cat /etc/network/interfaces.d/eth0    
cat: /etc/network/interfaces.d/eth0: 沒有此一檔案或目錄

確定檔案已刪除後, 將系統預設的 /etc/dhcpcd.conf 複製到根目錄下保存 : 

pi@raspberrypi:~ $ sudo cp /etc/dhcpcd.conf Downloads/dhcpcd.conf

然後編輯一個 dhcpcd.conf 檔, 內容如下 : 

interface eth0 
static ip_address=192.168.2.193/24 
static routers=192.168.2.1 
static domain_name_servers=168.95.1.1 8.8.8.8

pi@raspberrypi:~ $ nano dhcpcd.conf    

然後將其複製到 /etc 下覆蓋同名檔案 : 

pi@raspberrypi:~ $ sudo mv dhcpcd.conf /etc/dhcpcd.conf     
pi@raspberrypi:~ $ cat /etc/dhcpcd.conf    
interface eth0 
static ip_address=192.168.2.193/255.255.255.0 
static routers=192.168.2.1 
static domain_name_servers=168.95.1.1 8.8.8.8

確定內容無誤後重開機 : 

pi@raspberrypi:~ $ sudo reboot    

結果亦可成功取得指定之固定 IP 並連上 Internet : 

pi@raspberrypi:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.193  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe00::ba27:ebff:fe60:2e70  prefixlen 64  scopeid 0x20<link>
        ether b8:07:e0:63:20:7b  txqueuelen 1000  (Ethernet)
        RX packets 678  bytes 88315 (86.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 595  bytes 288638 (281.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


2021-07-18 補充 :

檢查鄉下的 Pi 3 網路設定, 採用的是第二種方法 (/etc/dhcpcd.conf), 內容如下 :

pi@raspberrypi:~ $ cat /etc/dhcpcd.conf     
interface wlan0 
static ip_address=192.168.2.192 
static routers=192.168.2.2 
static domain_name_servers=192.168.2.2

而無線網路上網設定檔則是放在 /etc/wpa_supplicant/wpa_supplicant.conf 中, 內容為 : 

pi@raspberrypi:~ $ cat /etc/wpa_supplicant/wpa_supplicant.conf    
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=TW

network={
ssid="TonyNote8"
psk="a123456"
key_mgmt=WPA-PSK
}

network={
ssid="EDIMAX-tony"
psk="a123456"
key_mgmt=WPA-PSK
}

network={
ssid="EDIMAX-meinung"
psk="a123456"
key_mgmt=WPA-PSK
}
 
總結來說, 新的 Raspbian 映像檔燒錄好後先不要拔除讀卡機, 先準備一個空白的 ssh 檔案與含有如下內容的 wpa_supplicant.conf 檔 (ssid 與 psk 要改成自己的基地台帳密), 複製到燒錄好映象檔的 boot 碟下 : 

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev 
update_config=1
country=TW

network={
    ssid="TonyNote8"
    psk="a123456"
    }

注意, 這個放在 root 碟下的 wpa_supplicant.conf 在開機後會被複製到 /etc/wpa_supplicant/wpa_supplicant.conf 這個檔. 

這樣在開機後樹莓派就會自動連上指定的基地台, 因為 Raspbian 預設已開啟 ssh 功能, 因此就可以用 Putty 連線樹莓派 (預設帳號 pi, 密碼 raspberry) 進行無頭存取, 即樹莓派開機前不需接螢幕與鍵鼠組, 直接用 PC 遠端存取, 用 ifconfig 取得樹莓派區網 IP 後, 就可以用 VNC viewer (local) 從 PC 連線樹莓派進行遠端桌面存取. 進入遠端桌面後首先開啟瀏覽器登入 VNC cloud 帳號, 並為這台樹莓派取一個容易辨識的名稱, 這樣以後就可以用 VNC viewer (cloud) 從外網遠端存取樹莓派了. 

如果要讓樹莓派取得固定 IP, 就可以用本篇的兩個方法設定, 例如用 dhcpcd.conf 設定的話, 可以編輯 /etc/dhcpcd.conf 加入如下內容 :

interface eth0 
static ip_address=192.168.2.193/255.255.255.0 
static routers=192.168.2.2 
static domain_name_servers=168.95.1.1 8.8.8.8

interface wlan0 
static ip_address=192.168.2.193/255.255.255.0 
static routers=192.168.2.2 
static domain_name_servers=168.95.1.1 8.8.8.8

這樣樹莓派不論是用有線還是無線方式上網都能獲得指定之固定 IP 了, 方便區網存取或做伺服器時用 (避免系統重啟後 IP 跑掉). 

以上補充說明總結樹莓派從燒錄映像檔到無頭存取的網路設定, 以及透過 VNC Cloud 進行外網遠端存取的過程, 作為以後裝機的參考. 

2 則留言 :

匿名 提到...

謝謝你的整理
幫助我省去很多時間!

小狐狸事務所 提到...

哪裡, 我不記下來很快就會忘記啦