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


