Lưu trữ điểm phát sóng Wi-Fi bằng Raspberry Pi

Lưu trữ điểm phát sóng Wi-Fi bằng Raspberry Pi

Hướng dẫn này mô tả cách lưu trữ điểm phát sóng từ mạng Wi-Fi của khách sạn hoặc cho bất kỳ kết nối mạng Wi-Fi công cộng nào.

Hướng dẫn này mô tả cách lưu trữ điểm phát sóng từ kết nối mạng Wi-Fi của khách sạn, nhưng quy trình tương tự cũng có thể áp dụng cho bất kỳ mạng Wi-Fi công cộng nào sử dụng cổng cố định, bao gồm mạng dành cho khách tại sân bay, khuôn viên trường đại học và quán cà phê.

Chúng ta sẽ bắt đầu bằng cách thiết lập điểm phát sóng tại nhà. Để sử dụng điểm phát sóng khi bạn thực sự ở khách sạn, hãy xem Sử dụng điểm phát sóng .

Quân nhu

Để thiết lập thẻ SD ban đầu, bạn sẽ cần:

  • Một máy tính khác được kết nối với mạng của bạn. Chúng tôi sẽ gọi đây là máy tính thông thường của bạn để phân biệt với máy tính Raspberry Pi mà bạn đang thiết lập làm NAS.

Chọn Raspberry Pi phù hợp

Raspberry Pi của bạn càng nhanh thì hiệu suất càng tốt. Đối với hướng dẫn này, chúng tôi sẽ sử dụng Raspberry Pi 4 2GB .

Bạn nên chọn Raspberry Pi có tích hợp mô-đun Wi-Fi vì bạn sẽ cần hai thiết bị Wi-Fi để lưu trữ điểm phát sóng Wi-Fi của khách sạn: một để kết nối với mạng khách sạn và một để phát mạng tới các thiết bị khác của bạn.

Chọn bộ chuyển đổi USB Wi-Fi phù hợp

Hầu hết các bộ điều hợp Wi-Fi USB có hỗ trợ trình điều khiển Linux đều có thể sử dụng được.

Trong hướng dẫn này, chúng tôi đã sử dụng bộ điều hợp 802.11 b/g/n 2,4 GHz được tích hợp trên chipset MediaTek MT7601U.

mẹo

Nếu bạn chọn Raspberry Pi không có mô-đun Wi-Fi tích hợp, bạn sẽ cần hai bộ điều hợp Wi-Fi USB. Ít nhất một trong các bộ điều hợp Wi-Fi của bạn phải hỗ trợ chế độ AP (Điểm truy cập) để phát mạng điểm phát sóng.

Cấu hình Raspberry Pi của bạn

Để bắt đầu, hãy làm theo tài liệu Bắt đầu để thiết lập Raspberry Pi của bạn . Đối với hệ điều hành của bạn, hãy chọn Raspberry Pi OS Lite (32-bit) để chạy không cần màn hình (không cần chuột và bàn phím).

Trong giai đoạn tùy chỉnh hệ điều hành, hãy chỉnh sửa cài đặt như sau:

  • Nhập tên máy chủ theo ý bạn (chúng tôi gợi ý pi-hotspot cho hướng dẫn này).
  • Nhập tên người dùng và mật khẩu ; bạn sẽ cần những thông tin này để xác thực sau.
  • Đánh dấu vào ô bên cạnh Cấu hình mạng LAN không dây để Pi của bạn có thể tự động kết nối với Wi-Fi.
    • Nhập SSID (tên) và mật khẩu mạng của bạn ; bạn có thể tìm thấy những thông tin này trong phần cài đặt Wi-Fi hoặc trên nhãn dán trên bộ định tuyến.
  • Trong tab Dịch vụ, hãy đánh dấu vào ô bên cạnh Bật SSH để chúng ta có thể kết nối với Pi mà không cần chuột và bàn phím.
    • Bật xác thực mật khẩu cho kết nối SSH.

Thiết lập Raspberry Pi của bạn

Tắt Raspberry Pi bằng cách ngắt kết nối khỏi nguồn điện. Sau đó, gắn bộ điều hợp WiFi USB (hoặc các bộ điều hợp) vào Raspberry Pi. Cuối cùng, cấp nguồn cho Raspberry Pi bằng cách cắm lại vào nguồn điện.

Kết nối từ xa với Raspberry Pi của bạn

SSH cho phép bạn kết nối từ xa với Raspberry Pi, loại bỏ nhu cầu sử dụng bàn phím và chuột. Hoàn hảo nếu Raspberry Pi của bạn nằm ở vị trí khó tiếp cận như mặt sau màn hình.

ghi chú

Để SSH vào Raspberry Pi, bạn sẽ sử dụng tên máy chủ bạn đặt bằng Raspberry Pi Imager. Nếu bạn gặp sự cố khi kết nối bằng phương pháp này, bạn có thể muốn sử dụng địa chỉ IP của Raspberry Pi thay thế. Để biết thêm thông tin về cách tìm địa chỉ IP và truy cập Raspberry Pi từ xa, hãy xem tài liệu truy cập từ xa .

Kết nối qua SSH

Mở phiên terminal trên máy tính thông thường của bạn . Để truy cập Raspberry Pi qua SSH, hãy chạy lệnh sau, thay thế <username> bằng tên người dùng bạn đã chọn trong Imager:

$ ssh <username>@pi-hotspot.local
$ ssh <username>@pi-hotspot.local
The authenticity of host 'pi-hotspot.local (fd81:b8a1:261d:1:acd4:610c:b069:ac16)' can't be established.
ED25519 key fingerprint is SHA256:s6aWAEe8xrbPmJzhctei7/gEQitO9mj2ilXigelBm04.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/
[fingerprint])? yes
Warning: Permanently added 'pi-hotspot.local' (ED25519) to the list of known hosts.

Khi được yêu cầu nhập mật khẩu, hãy sử dụng mật khẩu bạn đã tạo trong Raspberry Pi Imager.

Cấu hình điểm phát sóng

Bây giờ Raspberry Pi của bạn đã hoạt động, đã đến lúc biến nó thành điểm phát sóng.

Tìm bộ điều hợp Wi-Fi USB của bạn

Đầu tiên, chúng ta cần tìm bộ điều hợp USB. Chạy lệnh sau để xác định thiết bị Wi-Fi bằng Network Manager CLI:

$ nmcli device

Bạn sẽ thấy kết quả tương tự như sau:

DEVICE         TYPE      STATE                   CONNECTION
wlan1          wifi      connected               Example Wi-Fi
lo             loopback  connected (externally)  lo
wlan0          wifi      disconnected            --
p2p-dev-wlan0  wifi-p2p  disconnected            --
eth0           ethernet  unavailable             --

Trong đầu ra ở trên, mô-đun USB Wi-Fi, wlan1, được kết nối với mạng Wi-Fi có tên "Ví dụ Wi-Fi". Thiết bị Wi-Fi tích hợp, wlan0, hiện không được sử dụng, do đó trạng thái hiện tại là "đã ngắt kết nối".

Nếu Raspberry Pi của bạn có mô-đun Wi-Fi tích hợp, theo mặc định, nó sẽ hiển thị là wlan0. Mô-đun Wi-Fi đầu tiên bạn kết nối sẽ hiển thị là wlan1, và các bộ điều hợp tiếp theo sẽ hiển thị là wlan2, wlan3, v.v. Tùy thuộc vào cấu hình cụ thể của bạn, Raspberry Pi của bạn có thể kết nối với mạng của bạn bằng bộ điều hợp USB hoặc mô-đun Wi-Fi tích hợp.

Tạo mạng điểm phát sóng

Tiếp theo, chúng ta sẽ sử dụng mô-đun Wi-Fi tích hợp để phát mạng điểm phát sóng. Chạy lệnh sau để tạo điểm phát sóng, thay thế các ký tự giữ chỗ <hotspot name> và <hotspot password> bằng tên điểm phát sóng và mật khẩu bạn chọn:

$ sudo nmcli device wifi hotspot ssid <hotspot name> password <hotspot password> ifname wlan0

mẹo

Tùy ifname wlan0 chọn ở cuối lệnh này chỉ định rằng điểm phát sóng phải sử dụng mô-đun Wi-Fi tích hợp, hỗ trợ chế độ AP (Điểm truy cập) cần thiết để phát sóng mạng điểm phát sóng. Để lưu trữ điểm phát sóng từ Raspberry Pi không có mô-đun Wi-Fi tích hợp, hãy chỉ định giao diện tương ứng với bộ điều hợp USB hỗ trợ chế độ AP.

Sau khi tạo mạng điểm phát sóng, điểm phát sóng của bạn sẽ tự động hoạt động.

Tiếp theo, kết nối với mạng Wi-Fi hotspot từ máy tính thông thường của bạn. Tìm mạng có SSID khớp với tên hotspot bạn đã chọn ở bước trước. Sử dụng mật khẩu bạn cũng cung cấp ở bước đó để xác thực.

Sau đó, kết nối với Raspberry Pi của bạn bằng SSH:

$ ssh <username>@pi-hotspot.local

Và chạy lệnh sau để xem các kết nối hiện tại của bạn:

$ nmcli connection

Bạn sẽ thấy kết quả tương tự như sau:

NAME       UUID                                  TYPE      DEVICE
Hotspot    69d77a03-1cd1-4ec7-bd78-2eb6cd5f1386  wifi      wlan0
lo         f0209dd9-8416-40a0-971d-860d3ff3501b  loopback  lo
Ethernet   4c8098c7-9f7d-4e3e-a27a-70d54235ec9a  ethernet  --
Example 1  f0c4fbcc-ac88-4791-98c2-e75685c70e9f  wifi      --
Example 2  9c6098a7-ac88-40a0-5ac2-b75695c70e9e  wifi      --

Kết nối có tên Hotspot đại diện cho mạng điểm phát sóng mới của bạn. Các kết nối Example 1 và Example 2 ở trên đại diện cho các kết nối Wi-Fi đã lưu không hoạt động.

Cấu hình mạng điểm phát sóng

Hãy cấu hình mạng điểm phát sóng của bạn để tự động phát sóng bất cứ khi nào Raspberry Pi của bạn khởi động. Khi Raspberry Pi của bạn khởi động, nó sẽ khởi động bất kỳ kết nối nào đã bật tính năng tự động kết nối với mức ưu tiên cao nhất. Để đảm bảo điểm phát sóng của bạn luôn khởi động khi khởi động, chúng tôi sẽ bật tính năng tự động kết nối cho điểm phát sóng và cấu hình mức ưu tiên cao hơn bất kỳ kết nối nào khác.

Chạy lại nmcli connection lệnh trên và sao chép UUID cho mạng hotspot của bạn từ bảng. Sau đó, chạy lệnh sau để xem thuộc tính kết nối cho mạng hotspot của bạn, thay thế chỗ <hotspot UUID> giữ chỗ bằng UUID cho hotspot của bạn:

$ nmcli connection show <hotspot UUID>

Đầu ra sẽ chứa nhiều thuộc tính mô tả mạng điểm phát sóng của bạn. Nhưng hiện tại chúng tôi chỉ quan tâm đến hai thuộc tính sau:

connection.autoconnect:                 no
connection.autoconnect-priority:        0

Chạy lệnh sau để thay đổi thuộc tính ưu tiên và tự động kết nối cho điểm phát sóng của bạn, thay thế <hotspot UUID> chỗ giữ chỗ bằng UUID cho điểm phát sóng mà bạn đã sao chép vào bảng tạm trước đó:

$ sudo nmcli connection modify <hotspot UUID> connection.autoconnect yes connection.autoconnect-priority 100

$ sudo nmcli kết nối sửa đổi <điểm phát sóng UUID> kết nối.tự động kết nối có kết nối.tự động kết nối-ưu tiên 100

Nếu lệnh của bạn được thực thi thành công, chúng ta sẽ thấy các giá trị mới sau cho các thuộc tính đó khi chạy lại nmcli connection show <hotspot UUID>:

connection.autoconnect:                 yes
connection.autoconnect-priority:        100

Cấu hình cổng kết nối

Tiếp theo, chúng ta hãy cấu hình một trang web cổng thông tin cho phép bạn dễ dàng kết nối Raspberry Pi với mạng Wi-Fi của khách sạn từ trình duyệt.

Cài đặt các công cụ sau:

$ sudo apt install python3-flask

Sau đó, chạy lệnh sau để tạo một thư mục nơi chúng ta có thể tạo cổng thông tin của mình, có tên là wifi-portal:

$ mkdir ~/wifi-portal

Sau đó, điều hướng đến thư mục cổng thông tin:

$ cd ~/wifi-portal

Mở app.py trong thư mục cổng thông tin, chứa logic cho trang web cổng thông tin:

$ sudo nano app.py

Sao chép và dán đoạn mã sau vào app.py:

from flask import Flask,request
import subprocess

app = Flask(__name__)

wifi_device = "wlan1"

@app.route('/')
def index():
    result = subprocess.check_output(["nmcli", "--colors", "no", "-m", "multiline", "--get-value", "SSID", "dev", "wifi", "list", "ifname", wifi_device])
    ssids_list = result.decode().split('\n')
    dropdowndisplay = f"""
        <!DOCTYPE html>
        <html>
        <head>
            <title>Wifi Control</title>
        </head>
        <body>
            <h1>Wifi Control</h1>
            <form action="/submit" method="post">
                <label for="ssid">Choose a WiFi network:</label>
                <select name="ssid" id="ssid">
        """
    for ssid in ssids_list:
        only_ssid = ssid.removeprefix("SSID:")
        if len(only_ssid) > 0:
            dropdowndisplay += f"""
                    <option value="{only_ssid}">{only_ssid}</option>
            """
    dropdowndisplay += f"""
                </select>
                <p/>
                <label for="password">Password: <input type="password" name="password"/></label>
                <p/>
                <input type="submit" value="Connect">
            </form>
        </body>
        </html>
        """
    return dropdowndisplay


@app.route('/submit',methods=['POST'])
def submit():
    if request.method == 'POST':
        print(*list(request.form.keys()), sep = ", ")
        ssid = request.form['ssid']
        password = request.form['password']
        connection_command = ["nmcli", "--colors", "no", "device", "wifi", "connect", ssid, "ifname", wifi_device]
        if len(password) > 0:
          connection_command.append("password")
          connection_command.append(password)
        result = subprocess.run(connection_command, capture_output=True)
        if result.stderr:
            return "Error: failed to connect to wifi network: <i>%s</i>" % result.stderr.decode()
        elif result.stdout:
            return "Success: <i>%s</i>" % result.stdout.decode()
        return "Error: failed to connect."


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=80)

Nhấn Ctrl+X , sau đó nhấn Y và cuối cùng là Enter để lưu tệp đã chỉnh sửa bằng nano.

Tiếp theo, hãy cấu hình Raspberry Pi của bạn để tự động chạy cổng Wi-Fi sau khi khởi động. Chạy lệnh sau để mở cron tab của bạn, một công cụ lập lịch Linux:

$ crontab -e

Nhập 1 để sử dụng trình soạn thảo văn bản nano để chỉnh sửa lịch cron của bạn. Sau đó, thêm dòng sau vào tệp, thay thế <username> chỗ giữ chỗ bằng tên người dùng tài khoản quản trị Raspberry Pi của bạn:

@reboot sudo python3 /home/<username>/wifi-portal/app.py

Nhấn Ctrl+X , sau đó nhấn Y và cuối cùng là Enter để lưu tệp đã chỉnh sửa bằng nano.

Và nhập lệnh sau để khởi động lại Raspberry Pi của bạn:

$ sudo reboot

Bây giờ bạn đã sẵn sàng kết nối với bất kỳ mạng Wi-Fi nào của khách sạn!

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Win a Raspberry Pi!

Answer 5 questions for your chance to win!
Question 1

What color is the sky?

Tìm kiếm bằng danh mục

Chọn danh mục