上週將 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 則留言 :
謝謝你的整理
幫助我省去很多時間!
哪裡, 我不記下來很快就會忘記啦
張貼留言