Skip to main content

Tạo wifi hotspot với TP-Link WR1043ND, OpenWRT, Nodogsplash

Mình có mua một router wifi TP-Link TL-WR1043ND và cần phát wifi cho một số người dùng. Ngoài việc phát wifi ra mình còn muốn tạo một trang web mặc định mỗi khi người dùng truy cập vào (captive portal) để hiện một số nhắc nhở, thông báo, và kiểm soát lưu lượng theo từng máy để không có máy nào chiếm hết băng thông. Bằng cách sử dụng OpenWRTNodogsplash và wshaper, mình đã có thể làm được hết các yêu cầu trên.

Cài đặt OpenWRT cho router

Sau đó đăng nhập vào router, phần System Tools -> Firmware Upgrade, bấm Browse rồi chọn file vừa tải về. Sau đó bấm Upgrade. Sẽ mất một vài phút để router cập nhật firmware, sau đó nó sẽ tự khởi động lại.

Cập nhật firmware cho router TP-Link
Khi router khởi động lại xong, bạn sẽ cần đăng nhập vào router và setup một vài thứ như password root, giao diện web… Trước tiên telnet vào router:
Đặt mật khẩu cho root:
Sau khi đã đặt mật khẩu xong, bạn có thể làm việc qua SSH với router này. Bấm Ctrl + D để thoát ra và kết nối SSH bằng mật khẩu bạn vừa tạo:
Sau đó cài đặt giao diện web cho router (LuCI) để bạn có thể quản lý được nhiều thứ trực quan hơn:
Sau khi đã có giao diện web, chúng ta có thể thao tác với router thông qua địa chỉ:
http://192.168.1.1, với user là root và mật khẩu bạn đã đặt:
Đăng nhập giao diện LuCI
Đăng nhập giao diện LuCI
Mặc định sau khi cài đặt, OpenWRT sẽ phát một mạng wifi là OpenWRT không có password. Bạn có thể thay đổi cài đặt trong mục Network -> Wifi. Ở đây mình sẽ không đi chi tiết vào việc cài đặt này.

Cài đặt Nodogsplash

Nodogsplash là chương trình giúp tạo captive portal, là trang web mặc định bạn sẽ thấy sau khi đăng nhập vào một hotspot. Trên trang captive portal này cũng có thể yêu cầu bạn nhập thêm username hoặc password để sử dụng được Internet. Để cài đặt, từ cửa sổ kết nối SSH lúc nãy:
Cho phép nodogsplash chạy khi router khởi động:
Sau đó thay đổi một số thiết lập của Nodogsplash
Bạn có thể đọc kỹ hơn các ghi chú trong file config này để tùy chỉnh theo ý mình tốt hơn. Hoặc tham khảo file cấu hình của mình tại đây:https://gist.github.com/minhdanh/14c379a31b71c5a85c02. Có một số điểm cần chú ý:
Block FirewallRuleSet authenticated-users thiết lập các rule tường lửa cho những user đã authenticated (tức là nhập vào đúng username/password, hoặc nhấn vào một link trên trang captive portal). Trong config của mình, mình chỉ cho phép user sử dụng dịch vụ Web, DNS, SSH.
Block FirewallRuleSet preauthenticated-users cũng tương tự, nhưng áp dụng cho những user chưa authenticated (là chỉ mới đăng nhập vào mạng wifi, chưa “đụng chạm” gì tới trang captive portal). Trong file cấu hình ví dụ, mình cho phép dùng dịch vụ DNS, và cho phép truy cập đến cổng 80, 443 của chính router để người dùng có thể xem được trang splash.
Block FirewallRuleSet users-to-router cho phép user truy cập đến cổng nào của router.
GatewayName Wifi Login: Thiết lập tên cho gateway là Wifi Login. Bạn không dùng được tiếng Việt có dấu đâu nhé.
MaxClients 50: Số lượng user tối đa được kết nối vào router.
ClientIdleTimeout 300: Thời gian nếu user không hoạt động sẽ phải authenticate lại (300 giây).
ClientForceTimeout 3600: Sau một giờ (3600 giây) bắt buộc user phải authenticate lại.
PasswordAuthentication no: Bắt buộc user nhập password vào hay không. Nếu có thì bạn cần chỉnh lại mật khẩu ở parameter tiếp theo Password.
UsernameAuthentication yes: Yêu cầu nhập username hay không. Tương tự như trên.
GatewayPort 2050: Cổng mặc định mà nodogsplash chạy. Bạn có thể để mặc định.
Trang web mặc định của nodogplash đặt ở /etc/nodogsplash/htdocs/splash.html. Bạn có thể sửa đổi tùy theo ý thích, mà khả năng là bạn sẽ muốn sửa nó vì trang mặc định của nodogsplash rất xấu >_<. Mình đã sửa lại thành một trang bootstrap dễ coi hơn, bạn có thể tham khảo tại đây:https://github.com/minhdanh/nodogsplash-splash
Lưu ý: Nodogsplash sử dụng web server không hỗ trợ mime-type text/css, text/javascript nên bạn không bỏ file css, js trong thư mục /etc/nodogsplash/htdocs/ được. Do đó mình sử dụng thư mục web của LuCI (chạy trên cổng 80):
Sau khi thay đổi cài đặt theo ý muốn, bạn khởi động nodogsplash:
Để xem tình trạng của nodogsplash:

Kiểm soát băng thông

Nodogsplash có hỗ trợ việc giới hạn bandwidth, nhưng mình đã thử mà không thành công. Nên mình dùng một package riêng để kiểm soát việc này, đó là wshaper:
Sau đó chỉnh lại tốc độ bạn muốn giới hạn
Ở đây mình giới hạn tốc độ download là 800Kb/s, tốc độ upload là 128Kb/s.
Tự chạy wshaper khi khởi động:
Chạy wshaper:
Sau đó thử đăng nhập vào mạng wifi bạn vừa cấu hình, trang đăng nhập sẽ hiện ra, và đây là thành quả:
Trang splash mới của wifi hotspot
Trang splash mới của wifi hotspot
Để kiểm tra tốc độ download:
Xong rồi đó. :)

Popular posts from this blog

Làm một hệ thống wifi maketing bằng Captive Portal pfSense

Captive Portal: là một trang Web trung gian, dùng để bảo vệ hệ thống mạng. Khi người dùng muốn tham gia vào hệ thống mạng sẽ được yêu cầu nhập tên và mật khẩu hợp lệ ( đôi khi chỉ cần click tham gia ), chức năng này thường được sử dụng ở những hệ thống mạng không dây. Captive portal pfsense: mang đến một giải pháp cấu hình dễ dàng. Sử dụng một trang trung gian để yêu cầu người dùng chứng thực, giúp nâng cao khả năng bảo mật. Trang Web trung gian này có thể thiết kế đơn giản, với hướng dẫn và điều khoản sử dụng, hoặc sử dụng ô Username và Password để đăng nhập. Như đã trình bày ở trên, những hệ thống mạng Wifi thường sử dụng Captive portal nhiều nhất. Tại những sân bay hoặc khách sạn, khi kết nối vào hệ thống mạng Wifi, thường xuất hiện màn hình Captive portal, bạn phải bấm vào nút truy cập để có thể truy cập Internet. Ngày càng phổ biến hơn, captive portal cũng có thể được dùng tại văn phòng, quán cafe, hoặc nhà ở của bạn. Khi đã cấu hình captive portal pfsense, bất cứ má...

Tâm thư của người Nhật gửi Việt Nam

Nội dung bài viết như sau: "Việt Nam – nhà giàu và những đứa con chưa ngoan Tôi đang là một du học sinh Nhật, có hơn 4 năm sinh sống tại Việt Nam. Với ngần ấy thời gian, tôi đã kịp hiểu một đạo lý giản đơn của người Việt: “Sự thật mất lòng”. Song không vì thế mà tôi sẽ ngoảnh ngơ trước những điều chưa hay, chưa đẹp ở đây. Hy vọng những gì mình viết ra, không gì ngoài sự thật, như một ly cà phê ngon tặng cho mảnh đất này, tuy đắng nhưng sẽ giúp người ta thoát khỏi cơn ngủ gục - ngủ gật trước những giá trị ảo và vô tình để những giá trị thật bị mai một. Tôi có một nước Nhật để tự hào Tôi tự hào vì nơi tôi lớn lên, không có rừng vàng biển bạc. Song, “trong đêm tối nhất, người ta mới thấy được, đâu là ngôi sao sáng nhất". Thế đấy, với một xứ sở thua thiệt về mọi mặt, nghèo tài nguyên, hàng năm gánh chịu sự đe dọa của hàng trăm trận động đất lớn nhỏ lại oằn mình gánh chịu vết thương chiến tranh nặng nề, vươn lên là cách duy nhất để nhân dân Nhật tồn tại và cho ...

Hàm COUNTIF đếm số ô thoả 1 điều kiện

Giả sử bạn có một danh sách vài ngàn học sinh, mỗi học sinh đạt một trong các loại học lực sau: xuất sắc, giỏi, khá, trung bình, yếu. Bạn muốn đếm tổng số học sinh xuất sắc để chuẩn bị khinh phí đi thi học sinh giỏi quốc gia, hay tổng số học sinh giỏi đi dự thi học sinh cháu ngoan bác hồ, hay số học sinh yếu kém để có kế hoạch phụ đạo. Hàm  COUNTIF  đếm tổng số ô thỏa 1 điều kiện truyền vào.  Không phân biệt chữ  hoa hay chữ thường. Cú pháp : = COUNTIF ( range ,  criteria ) Trong đó : range : một mãng (dãy) các ô cần đếm, giá trị các ô có thể là text, tên, mảng, hay tham chiếu đến các ô chứa số. Ô rỗng sẽ được bỏ qua không đếm. c riteria : điều kiện để đếm (số, chuỗi, biểu thức, …). Có thể dùng ký tự đại diện như sau: ? đại diện 1 ký tự * đại diện nhiều ký tự Giả sử ta có bảng dữ liệu sau: A B C D E 1 Tên Nam Nữ Học lực Điểm 2 Nguyễn Khánh Hưng x Khá 7 3 Trần Xuân Vũ x Giỏi 9 4 Nguyễn Văn Hòa x Giỏi 8 5 Nguyễn ...