Tại sao Wi-Fi công cộng cần một “người gác cổng”?
Chắc hẳn bạn đã từng gặp cảnh vào quán cafe, kết nối Wi-Fi và một trang web hiện ra yêu cầu nhấn “Kết nối” hoặc nhập mã voucher. Đó chính là Captive Portal. Về mặt kỹ thuật, nó hoạt động như một trạm kiểm soát. Dù bạn đã bắt được sóng Wi-Fi, mọi yêu cầu truy cập web vẫn bị chặn lại cho đến khi bạn thực hiện một hành động cụ thể trên trang chào.
Thay vì dùng mật khẩu WPA2 truyền thống dễ bị lộ, Captive Portal mang lại sự chuyên nghiệp và an toàn vượt trội. Với giải pháp này, bạn có thể:
- Buộc người dùng nhấn đồng ý với điều khoản sử dụng (TOS) để tránh rắc rối pháp lý.
- Quảng bá thương hiệu hoặc thu thập email khách hàng.
- Giới hạn mỗi phiên truy cập chỉ kéo dài 60-120 phút để tránh việc dùng “chùa” quá lâu.
- Khống chế băng thông ở mức 2-5Mbps, ngăn chặn các máy tải torrent làm nghẽn toàn bộ đường truyền của quán.
Tôi nhớ mãi lần xử lý sự cố tại một điểm phát Wi-Fi có tới 50 thiết bị kết nối nhưng mạng gần như tê liệt. Sau khi kiểm tra, hóa ra có 5-6 chiếc smartphone tự động chạy backup cloud ngay khi thấy Wi-Fi. Triển khai Captive Portal ngay lúc đó đã giúp tôi lọc bớt các kết nối vãng lai và ổn định lại hệ thống chỉ trong vài phút.
Trong bài hướng dẫn này, chúng ta sẽ sử dụng nodogsplash. Đây là một công cụ cực kỳ nhẹ (chỉ chiếm khoảng 2-5MB RAM), cực kỳ ổn định và chạy mượt trên cả Raspberry Pi lẫn các router cũ chạy OpenWrt.
Quy trình cài đặt nodogsplash trên Linux
Bạn cần một máy tính Linux (Ubuntu/Debian) có hai card mạng. Một card nhận Internet (WAN) và một card dùng để phát Wi-Fi hoặc nối vào Switch cho người dùng (LAN).
1. Chuẩn bị môi trường
Đầu tiên, hãy cập nhật hệ thống và cài đặt các thư viện cần thiết để biên dịch mã nguồn:
sudo apt update
sudo apt install git libmicrohttpd-dev build-essential -y
2. Biên dịch nodogsplash từ source
Để sở hữu phiên bản mới nhất với đầy đủ tính năng, build từ source là lựa chọn tối ưu nhất:
git clone https://github.com/nodogsplash/nodogsplash.git
cd nodogsplash
make
sudo make install
Sau khi hoàn tất, toàn bộ file cấu hình của bạn sẽ nằm gọn trong thư mục /etc/nodogsplash.
Cấu hình bộ máy điều hướng
Nhiệm vụ tiếp theo là chỉ định cho nodogsplash biết nó cần canh giữ ở cổng mạng nào.
1. Thiết lập file nodogsplash.conf
Dùng trình soạn thảo nano để mở file cấu hình:
sudo nano /etc/nodogsplash/nodogsplash.conf
Hãy chú ý các thông số quan trọng sau:
- GatewayInterface: Tên card mạng phía người dùng (ví dụ:
wlan0hoặceth1). Kiểm tra nhanh bằng lệnhip link show. - GatewayAddress: IP tĩnh của máy Linux trong mạng nội bộ (thường là
192.168.1.1). - MaxClients: Giới hạn số người dùng (ví dụ: 50) để đảm bảo phần cứng không bị quá tải.
Cấu hình mẫu thực tế:
GatewayInterface eth1
GatewayAddress 192.168.10.1
MaxClients 50
AuthIdleTimeout 60
CheckInterval 30
Thông số AuthIdleTimeout 60 rất đáng giá. Nếu khách hàng không dùng mạng trong 60 phút, hệ thống sẽ tự động ngắt kết nối để nhường chỗ cho người khác.
2. Tùy biến Splash Page theo chất riêng
Trang chào mặc định nằm tại /etc/nodogsplash/htdocs/splash.html. Bạn có thể thay đổi logo, màu sắc hoặc thêm các chương trình khuyến mãi bằng HTML/CSS đơn giản. Tuy nhiên, đừng quên giữ lại đoạn code xác thực quan trọng này:
<form method="GET" action="$authaction">
<input type="hidden" name="tok" value="$tok">
<input type="hidden" name="redir" value="$redir">
<input type="submit" value="Kết nối ngay">
</form>
Vận hành và Quản trị
Khởi động dịch vụ bằng lệnh:
sudo nodogsplash
Hãy dùng điện thoại cá nhân kết nối thử. Nếu màn hình tự động bật lên thông báo “Đăng nhập vào mạng Wi-Fi”, chúc mừng bạn đã thành công!
Quản lý người dùng với ndsctl
Công cụ ndsctl là trợ thủ đắc lực giúp bạn quan sát hệ thống thời gian thực.
Để xem danh sách ai đang online:
sudo ndsctl status
Nếu gặp đối tượng dùng quá nhiều băng thông hoặc có hành vi phá hoại, bạn có thể “mời” họ ra khỏi mạng ngay lập tức:
sudo ndsctl deauth [MAC_ADDRESS]
Lưu ý kỹ thuật: Đôi khi trang chào không tự hiện ra trên các trang HTTPS do cơ chế bảo mật HSTS. Nếu khách phàn nàn, hãy hướng dẫn họ truy cập một trang web chỉ dùng HTTP như neverssl.com để kích hoạt lại bộ lọc của nodogsplash.
Tự động hóa hệ thống
Để hệ thống tự chạy mỗi khi mất điện hoặc khởi động lại server, bạn nên thêm nodogsplash vào systemd. Điều này giúp hạ tầng mạng của bạn luôn ở trạng thái sẵn sàng mà không cần can thiệp thủ công.
Triển khai Captive Portal không chỉ là về kỹ thuật, mà còn là cách bạn nâng tầm trải nghiệm người dùng. Với nodogsplash, bạn có một giải pháp vừa nhẹ nhàng, vừa mạnh mẽ hơn hẳn những hệ thống cồng kềnh như PacketFence.

