IoTLabs

Nghiên cứu, Sáng tạo và Thử nghiệm

Series: Lập trình Raspberry Pi – Bài 4: Networking cơ bản trên Raspberry Pi (Wi-Fi/Ethernet, IP tĩnh, mDNS, port & firewall)

Series: Lập trình Raspberry Pi & Ứng dụng thực tế Phần 1 — Nền tảng Raspberry Pi Bài 4: Networking cơ bản trên Raspberry Pi (Wi-Fi/Ethernet, IP tĩnh, mDNS, port & firewall)


1) Mục tiêu bài học

Sau bài này bạn sẽ:

  • Kết nối Pi ổn định qua Wi-Fi/Ethernet.
  • Thiết lập IP tĩnh (ưu tiên cách “đúng bài”: DHCP reservation; và cách cấu hình trên Pi).
  • Dùng mDNS .local để SSH không cần nhớ IP.
  • Mở/đóng port và cấu hình UFW firewall an toàn cho chạy 24/7.

2) Kiểm tra nhanh trạng thái mạng

Xem IP & interface

ip a

Bạn sẽ thấy:

  • wlan0 (Wi-Fi) hoặc eth0 (Ethernet)
  • inet x.x.x.x/.. là IP hiện tại

Test internet + DNS

ping -c 3 1.1.1.1
ping -c 3 google.com

3) Wi-Fi vs Ethernet: chọn cái nào?

  • Ethernet: ổn định nhất cho gateway/server.
  • Wi-Fi: tiện, nhưng cần tối ưu sóng và tránh nguồn yếu (Wi-Fi dễ chập chờn khi sụt áp).

Nếu làm gateway IoT cho khách hàng: ưu tiên Ethernet khi có thể.

4) IP tĩnh: 2 cách chuẩn (khuyên dùng cách 1)

Cách 1 (khuyến nghị): DHCP Reservation trên Router

Bạn cấu hình trên router: “gán IP cố định theo MAC address”.

  • Ưu: Pi vẫn để DHCP bình thường, ít lỗi, dễ quản trị.
  • Nhược: cần truy cập cấu hình router.

Lấy MAC address:

ip link show wlan0
ip link show eth0

Tìm dòng link/ether xx:xx:xx:xx:xx:xx

Cách 2: Static IP ngay trên Raspberry Pi (khi bạn không quản trị router)

Raspberry Pi OS thường dùng dhcpcd, cấu hình ở:

sudo nano /etc/dhcpcd.conf

Ví dụ đặt IP tĩnh cho eth0:

interface eth0
static ip_address=192.168.1.50/24
static routers=192.168.1.1
static domain_name_servers=1.1.1.1 8.8.8.8

Hoặc cho wlan0:

interface wlan0
static ip_address=192.168.1.51/24
static routers=192.168.1.1
static domain_name_servers=1.1.1.1 8.8.8.8

Áp dụng:

sudo reboot

Lưu ý: chọn IP “trống” và cùng subnet với router (ví dụ 192.168.1.x). Tránh trùng IP.

5) mDNS , .local, SSH bằng hostname (không cần nhớ IP)

Nếu bạn đặt hostname ở bài 2 (ví dụ iotlabs-pi), bạn có thể:

ssh developer@iotlabs-pi.local

Nếu chưa hoạt động, cài/kiểm tra Avahi:

sudo apt update
sudo apt -y install avahi-daemon
sudo systemctl enable --now avahi-daemon

Kiểm tra hostname:

hostname

Windows đôi khi cần Bonjour/mDNS support; macOS/Linux thường dùng được ngay.

6) Kiểm tra port đang lắng nghe (listening)

sudo ss -lntp
  • LISTEN là service đang mở port
  • Ví dụ SSH thường là :22

Muốn biết process nào dùng port:

sudo lsof -i -P -n | grep LISTEN

7) Firewall với UFW: mở tối thiểu, đủ dùng

7.1 Bật UFW an toàn

sudo apt -y install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp   # SSH
sudo ufw enable
sudo ufw status verbose

7.2 Mở port theo use-case

Ví dụ:

  • API Node/FastAPI: 3000/8000
  • MQTT client thường là outbound (không cần mở inbound), trừ khi Pi chạy broker.

Mở port API:

sudo ufw allow 3000/tcp

Giới hạn chỉ cho phép 1 IP (máy bạn) truy cập port (khuyến nghị):

sudo ufw allow from 192.168.1.10 to any port 3000 proto tcp

Xoá rule (nếu cần):

sudo ufw status numbered
sudo ufw delete <number>

8) “Checklist chống lỗi mạng” cho Pi chạy lâu

  • Dùng nguồn/cáp tốt (rất hay gây “mạng chập chờn giả”).
  • Ưu tiên DHCP reservation (ổn định, dễ vận hành).
  • Đặt hostname rõ ràng: iotlabs-gw-01.
  • Firewall: chỉ mở port cần thiết, hạn chế theo IP.

9) Bài tập nâng cấp

  1. Đặt IP tĩnh theo DHCP reservation (nếu bạn quản trị router).
  2. Bật mDNS và SSH bằng hostname.local.
  3. Bật UFW và chỉ mở SSH + 1 port app (nếu bạn có app).