From Camera to Ethernet: A Journey into Networking
Một câu chuyện thực tế về việc kết nối camera và PC qua Ethernet, khám phá các khái niệm từ PoE, static IP, đến việc biến laptop thành DHCP server.
Bài viết này là nhật ký về một hành trình gỡ rối mạng (troubleshooting) đầy thú vị, bắt đầu từ một yêu cầu tưởng chừng đơn giản: kết nối camera công nghiệp vào laptop. Nó đã dẫn tôi đi từ thất vọng này đến "Aha!" moment khác, và cuối cùng là khám phá ra nhiều khái niệm cốt lõi của network.
Phần 1: Thất bại đầu tiên - PoE#
Tôi có một bài toán: lấy dữ liệu hình ảnh từ một camera công nghiệp về laptop. Tôi để ý camera dùng cáp RJ45 — một dây Ethernet tiêu chuẩn.
Một ý tưởng rất tự nhiên: cắm trực tiếp camera vào cổng Ethernet của laptop.
Nhưng... không có gì xảy ra. Không tín hiệu, không đèn nháy, không gì cả. Điều kỳ lạ là, khi kết nối camera này với một cụm PC nhỏ do hãng cung cấp, nó lại stream bình thường.
Sau một hồi loay hoay, tôi nhận ra vấn đề: PoE (Power over Ethernet).
PoE là gì?#
PoE là một công nghệ cho phép cáp Ethernet truyền tải cả dữ liệu và nguồn điện trên cùng một sợi cáp. Camera công nghiệp (và nhiều thiết bị như camera IP, Access Point) thường dùng PoE để không cần phải kéo thêm dây nguồn.
- Vấn đề: Laptop và PC thông thường không cấp nguồn qua cổng Ethernet.
- Giải pháp (của hãng): Cụm PC nhỏ kia chắc chắn đã tích hợp PoE.
- Thất vọng của tôi: Con switch tôi mới mua (TL-SG1016D) là một switch unmanaged tuyệt vời, nhưng nó không hỗ trợ PoE. Tôi đã mua nhầm, lẽ ra tôi phải mua bản TL-SG1016PE (chữ "P" thường chỉ PoE).
Trong lúc chờ đặt mua một chiếc PoE Injector, tôi quyết định làm một "nhiệm vụ phụ" để kiểm tra hệ thống mạng của mình.
Phần 2: Nhiệm vụ phụ - SSH qua Ethernet#
Mạng Wi-Fi trong phòng tôi thỉnh thoảng rất yếu, làm gián đoạn nghiêm trọng các phiên SSH từ laptop (Ubuntu) sang PC (Ubuntu) của tôi.
Tại sao không dùng PC mà phải SSH? Tôi đã quen với môi trường dev trên laptop, và việc này giúp tôi làm quen với việc dev trên server—một kỹ năng quan trọng trong thời đại cloud.
Tôi nghĩ: sao không kết nối hai máy qua Ethernet? Chắc chắn sẽ nhanh hơn, và quan trọng là... mất mạng vẫn kết nối được!
Thử nghiệm 1: Laptop PC (trực tiếp) Tôi dùng một dây RJ45 kết nối thẳng hai máy. Và lại... không có gì. Không tín hiệu. 1
Thử nghiệm 2: Laptop Switch PC Tôi dùng con switch TL-SG1016D làm trung gian. Lần này, đèn tín hiệu trên switch và cả hai máy đều sáng!
Kiểm tra trên cả hai máy:
# Laptop
$ ip a
enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
link/ether 60:18:95:56:8e:ff brd ff:ff:ff:ff:ff:ff
# PC
$ ip a
enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
link/ether d8:43:ae:c7:d6:76 brd ff:ff:ff:ff:ff:ffCả hai card mạng đều UP,LOWER_UP (nghĩa là link vật lý đã thông). Nhưng tôi không thể ping hay ssh được.
"Aha!" Moment: Switch không phải là Router#
Đây chính là lúc tôi nhận ra một khái niệm cơ bản:
- Switch (Unmanaged - Layer 2): Con switch của tôi hoạt động ở Layer 2 (Data Link) trong mô hình OSI. Nó chỉ quan tâm đến địa chỉ MAC. Nó chuyển các khung (frame) dữ liệu dựa trên MAC, giống như một người đưa thư thông minh trong một tòa nhà.
- Giao tiếp (Layer 3): Để
sshhayping, các máy tính cần nói chuyện với nhau bằng địa chỉ IP (Layer 3 - Network). - Vấn đề: Các thiết bị của tôi không có địa chỉ IP trong mạng này! Chúng đang chờ một ai đó cấp phát IP.

Hầu hết chúng ta quen với việc cắm vào là chạy, vì Router ở nhà (hoặc ở công ty) có tích hợp một dịch vụ gọi là DHCP Server, tự động cấp phát IP cho mọi thiết bị. Con switch "câm" của tôi không có khả năng đó.
Giải pháp: Cấp phát IP tĩnh (Static IP).
Tôi quyết định tạo một mạng cục bộ 10.0.0.0/24 (một dải IP riêng).
# Trên Laptop
sudo ip addr add 10.0.0.1/24 dev enp2s0
sudo ip link set enp2s0 up
# Trên PC
sudo ip addr add 10.0.0.2/24 dev enp3s0
sudo ip link set enp3s0 upVà...
# Trên Laptop
$ ssh my-user@10.0.0.2
Welcome to Ubuntu ...Thành công! Tôi tắt Wi-Fi trên cả hai máy, phiên SSH vẫn mượt mà.
Phần 3: Trở lại với Camera (Bản dân dụng)#
Trong lúc chờ PoE injector, tôi lấy một con camera dân dụng (Tapo) ra thử. Mục tiêu của tôi là thiết lập stream RTSP nội bộ: vừa bảo mật (không qua cloud của hãng), vừa nhanh.
Tôi cắm camera vào con switch. Và vấn đề nghiêm trọng bắt đầu:
- Tôi đã có mạng
10.0.0.0/24(với laptop ở10.0.0.1). - Nhưng camera không có giao diện để tôi gán static IP. Nó được thiết kế để "cắm vào là chạy"—nghĩa là, nó mong đợi một DHCP Server.
Lúc này, mạng của tôi gồm Laptop (10.0.0.1) và Camera (không có IP), cả hai cắm vào switch. Làm sao để biết camera đang làm gì?
Giai đoạn điều tra: Lắng nghe mạng#
arp-scan
Tôi thử quét ARP xem có thiết bị nào trong mạng không. ARP (Address Resolution Protocol) là giao thức giúp ánh xạ từ IP (Layer 3) sang MAC (Layer 2).
$ sudo arp-scan --interface=enp2s0 --localnet
...
Ending arp-scan 1.10.0: 256 hosts scanned in 1.842 seconds. 0 respondedKhông có gì. Điều này hợp lý: camera chưa có IP, nên nó không thể trả lời một gói tin ARP "hỏi xem ai có IP...".
tcpdump
Đây là lúc lắng nghe "tiếng kêu cứu" của camera. Tôi chạy tcpdump để bắt tất cả các gói tin trên cổng enp2s0.
$ sudo tcpdump -i enp2s0 -n
...
11:32:31.913390 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 8c:90:2d:13:ba:e6, length 285Đây chính là nó! Một phát hiện tuyệt vời.
Giải phẫu gói tin DHCPDISCOVER#
Hãy phân tích gói tin "cầu cứu" này:
11:32:31.913390: Thời điểm.IP 0.0.0.0.68: Gói tin từ (Source). Camera chưa có IP, nên nó dùng0.0.0.0. Port68là port của DHCP client.> 255.255.255.255.67: Gửi đến (Destination). Đây là địa chỉ Broadcast. Camera đang "hét" lên cho tất cả mọi người trong mạng: "CÓ AI LÀ DHCP SERVER KHÔNG?". Port67là port của DHCP server.Request from 8c:90:2d:13:ba:e6: Gói tin này được gửi từ địa chỉ MAC này. Tôi kiểm tra dưới đáy camera, chính xác là nó!
Đây là gói tin DHCPDISCOVER, bước đầu tiên của quy trình 4 bước DORA.
Phần 4: Giải pháp - Laptop trở thành DHCP Server#
Nếu camera cần một DHCP Server, vậy... tôi sẽ trở thành một DHCP Server. Laptop của tôi (Ubuntu) hoàn toàn có thể làm được việc này.
Tôi cài đặt isc-dhcp-server và cấu hình file /etc/dhcp/dhcpd.conf. Tôi không chỉ muốn cấp một IP ngẫu nhiên, tôi muốn ghim camera này vào một IP cố định.
# /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
authoritative;
# Mạng nội bộ của tôi
subnet 10.0.0.0 netmask 255.255.255.0 {
# Cấp phát IP trong dải này
range 10.0.0.10 10.0.0.20;
# Gateway (là laptop của tôi)
option routers 10.0.0.1;
}
# Đây là phần quan trọng: DHCP Reservation
# Tôi ghim địa chỉ MAC của camera
# với một IP cố định mà tôi muốn
host tapo_cam {
hardware ethernet 8c:90:2d:13:ba:e6;
fixed-address 10.0.0.50;
}Sau khi khởi động service, tôi kiểm tra log (journalctl -u isc-dhcp-server -f):
Nov 08 11:37:28 midori dhcpd[12418]: DHCPDISCOVER from 8c:90:2d:13:ba:e6 via enp2s0
Nov 08 11:37:29 midori dhcpd[12418]: DHCPOFFER on 10.0.0.50 to 8c:90:2d:13:ba:e6 via enp2s0
Nov 08 11:37:29 midori dhcpd[12418]: DHCPREQUEST for 10.0.0.50 (10.0.0.1) from 8c:90:2d:13:ba:e6 via enp2s0
Nov 08 11:37:29 midori dhcpd[12418]: DHCPACK on 10.0.0.50 to 8c:90:2d:13:ba:e6 via enp2s0Quy trình DORA hoàn hảo#
Log này cho thấy chính xác quy trình 4 bước:
- Discover: Camera (
8c:90:2d:13:ba:e6) hét lên (DHCPDISCOVER). - Offer: Laptop tôi (
dhcpd) trả lời: "Tôi có IP10.0.0.50cho bạn đây" (DHCPOFFER). - Request: Camera xác nhận: "Tuyệt, tôi xin nhận IP
10.0.0.50" (DHCPREQUEST). - Acknowledge: Laptop chốt lệnh: "Ok, IP
10.0.0.50là của bạn" (DHCPACK).
Và kết quả:
# Trên Laptop
$ ping 10.0.0.50
PING 10.0.0.50 (10.0.0.50) 56(84) bytes of data.
64 bytes from 10.0.0.50: icmp_seq=1 ttl=64 time=1.56 msTôi đã thành công! Camera đã có IP, và tôi có thể xem stream qua: rtsp://<user>:<pass>@10.0.0.50:554/stream
Lời kết#
Từ một thất bại tưởng chừng đơn giản với PoE, tôi đã đi một vòng từ static IP, phân biệt Switch/Router, phân tích gói tin tcpdump, và cuối cùng là tự dựng một DHCP server với static reservation.
Hành trình này nhắc tôi rằng, hiểu rõ các lớp (layer) của hệ thống mạng không phải là lý thuyết suông, mà là công cụ gỡ rối mạnh mẽ nhất.
Giờ thì... tôi không chắc con camera công nghiệp kia có "ngoan ngoãn" chờ DHCP như con camera này không. Nhưng đó là câu chuyện của ngày mà cái PoE Injector của tôi về đến.
lượt xem
— lượt xem
Nguyen Xuan Hoa
nguyenxuanhoakhtn@gmail.com