Điểm truy cập như bộ định tuyến / bộ lặp WiFi, tùy chọn có cầu


14

Tôi cần một điểm truy cập không dây được kết nối với cổng ethernet có dây và được kết nối với một bộ định tuyến internet wifi khác có kết nối máy khách dưới dạng đường lên. Tất cả các thiết bị được kết nối với RasPi bằng wifi hoặc ethernet có dây nên có quyền truy cập internet và có thể kết nối với nhau.

Làm thế nào tôi có thể đạt được điều này với Raspberry Pi?

Câu trả lời:


25

Chúng ta đang nói về một điểm truy cập cùng với kết nối máy khách wlan0 với một mạng wifi khác (bộ lặp wlan) hoặc bộ định tuyến internet.

Nếu bạn muốn một điểm truy cập cùng với cổng ethernet eth0 làm đường dẫn đến bộ chuyển mạch hoặc bộ định tuyến internet thì hãy xem Thiết lập Raspberry Pi như một điểm truy cập - một cách dễ dàng .

Đã thử nghiệm trên Raspberry Pi 4B với
Raspbian Buster Lite 2020/02/13 được cập nhật vào ngày 2020/03/03.
Cập nhật được thực hiện với sudo apt update && sudo apt full-upgrade && sudo reboot.

Ở đây bạn sẽ tìm thấy bản sửa đổi được thử nghiệm cuối cùng cho Raspbian Stretch Lite .


Raspberry Pi có thể hoạt động như một điểm phát sóng không dây và đồng thời kết nối với một điểm nóng khác với tư cách là khách hàng. Nhưng thiết bị wifi trên RasPi có một hạn chế chung. Kết nối máy khách không thể được bắc cầu vì thiếu WDS (hệ thống phân phối không dây) cần thiết để bắc cầu trên mạng không dây. Để biết thêm thông tin, hãy xem Raspberry Pi WiFi to Ethernet Bridge cho máy chủ? . Vì vậy, chúng tôi chỉ có thể sử dụng định tuyến cho kết nối máy khách wifi đến bộ định tuyến internet. Nhưng điểm phát sóng wifi và cổng ethernet có dây có thể được bắc cầu để tất cả các thiết bị trên wifi và cổng có dây có thể có cùng một miền phát trên mạng con chung của nó.

Tôi giả sử rằng bạn đã có kết nối với internet. Tất cả các lệnh chỉ có thể được sao chép và dán vào dòng lệnh của RasPi. Các khối với EOF bạn có thể chọn catbao gồm. cuối cùng EOFvà dán nó vào dòng lệnh RasPis. Với Enter, nó sẽ được sao chép vào một tệp mà không có dấu phân cách EOF.

Trước tiên chúng tôi sẽ thiết lập một bộ lặp wifi để nếu bất cứ ai chỉ cần điều này, anh ta có thể dừng thiết lập tại thời điểm này và sử dụng nó. Đối với những người cần một cổng ethernet có cầu nối với điểm truy cập wifi có thể tiếp tục với việc thiết lập nó.

Tôi sử dụng systemd-networkd vì lý do. Đối với những người thiếu kiên nhẫn trước tiên chỉ có Cài đặt.


♦ Thiết lập bộ lặp wifi

Ví dụ cho thiết lập này:

                 wifi                        wifi            wan
mobile-phone <~.~.~.~.~> (ap0)RPi(wlan0) <.~.~.~.~.> router <───> INTERNET
            ╲             ╱          ╲
           (dhcp    192.168.4.1     (dhcp
         from RPi)               from router)


Bước 1: thiết lập systemd-networkd

Chỉ cần làm theo để sử dụng systemd-networkd cho mạng chung . Bạn có thể sử dụng phần "♦ Bước nhanh" . Sau đó quay lại đây.

Bước 2: cài đặt hostapd cho điểm truy cập

rpi ~$ sudo -Es   # if not already done
rpi ~# apt install hostapd
rpi ~# systemctl unmask hostapd.service
rpi ~# systemctl enable hostapd.service

Tạo tập tin này với các cài đặt của bạn cho ssid=, country_code=wpa_passphrase=. Khi channel=chọn cùng một kênh, wpa_supplicant với wlan0 sẽ kết nối với bộ định tuyến internet của bạn.
CHÚ Ý! Đây là một hạn chế từ phần cứng. hostapdsẽ luôn đặt kênh có cùng giá trị so với kết nối máy khách, bất kể bạn đặt gì ở đây. Nếu bạn cần các kênh khác nhau thì bạn phải sử dụng một khóa USB / WiFi bổ sung.

rpi ~# cat > /etc/hostapd/hostapd.conf <<EOF
interface=ap0
driver=nl80211
ssid=RPiNet
country_code=DE
hw_mode=g
channel=1
auth_algs=1
wpa=2
wpa_passphrase=verySecretPassword
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
EOF

rpi ~# chmod 600 /etc/hostapd/hostapd.conf

Chỉnh sửa hostapd.service :

rpi ~# systemctl --full edit hostapd.service

và nhận xét dòng After=network.targetvới #nó để trông giống như:

#After=network.target

Lưu nó và thoát khỏi trình soạn thảo. Tiếp theo thêm giao diện ap0 vào hostapd.service với:

rpi ~# systemctl edit hostapd.service

Trong trình soạn thảo trống chèn các câu lệnh này. Hãy chú ý đến dấu trừ sau khi bằng nhau =-trên một số báo cáo. Lưu nó và thoát khỏi trình soạn thảo:

[Unit]
Wants=wpa_supplicant@wlan0.service

[Service]
Restart=
Restart=no
ExecStartPre=/sbin/iw dev wlan0 interface add ap0 type __ap
ExecStopPost=-/sbin/iw dev ap0 del


Bước 3: thiết lập wpa_supplicant cho kết nối máy khách

Tạo tập tin này với các thiết lập của bạn cho country=, ssid=psk=và kích hoạt nó:

rpi ~# cat >/etc/wpa_supplicant/wpa_supplicant-wlan0.conf <<EOF
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="TestNet"
    psk="realyNotMyPassword"
    key_mgmt=WPA-PSK   # see ref (4)
}
EOF

rpi ~# chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
rpi ~# systemctl disable wpa_supplicant.service
rpi ~# systemctl enable wpa_supplicant@wlan0.service
rpi ~# rfkill unblock 0

Mở rộng wpa_supplicant với:

rpi ~# systemctl edit wpa_supplicant@wlan0.service

Trong trình soạn thảo trống chèn các câu lệnh này. Lưu nó và thoát khỏi trình soạn thảo:

[Unit]
BindsTo=hostapd.service
After=hostapd.service


Bước 4: thiết lập giao diện tĩnh

Tạo các tệp này:

rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
DNSSEC=no
# If you need a static ip address, then toggle commenting next four lines (example)
DHCP=yes
#Address=192.168.50.60/24
#Gateway=192.168.50.1
#DNS=84.200.69.80 1.1.1.1
EOF

Đối với những người muốn có một cây cầu, không cần tệp tiếp theo và phải tiếp tục với Cầu thiết lập .

rpi ~# cat > /etc/systemd/network/12-ap0.network <<EOF
[Match]
Name=ap0
[Network]
DNSSEC=no
IPMasquerade=yes
Address=192.168.4.1/24
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF

Thiết lập một bộ lặp wifi mà không cần cầu là xong. Bạn phải khởi
động lại.


♦ Cầu cài đặt

Thiết lập bộ lặp wifi như mô tả ở trên.

Ví dụ cho thiết lập này:

          (dhcp
        from RPi)        bridge
           ╱    wifi    ┌──────┐
mobile-phone <~.~.~.~.> │(ap0) │              wifi            wan
                        │   br0│RPi(wlan0) <.~.~.~.~> router <───> INTERNET
      laptop <────────> |(eth0)│╲       ╲
           ╲    wired   └──────┘╱      (dhcp
         (dhcp           192.168.4.1   from router)
       from RPi)

Bước 5: cấu hình hostapd cho một cây cầu

Thêm một dòng bridge=br0vào /etc/hostapd/hostapd.conf với:

rpi ~# echo 'bridge=br0' >> /etc/hostapd/hostapd.conf

Bước 6: thiết lập wpa_supplicant cho một cây cầu

Mở rộng wpa_supplicant với:

rpi ~# systemctl edit wpa_supplicant@wlan0.service

Trong trình soạn thảo nối các dòng để nó trông giống như sau. Hãy chú ý đến dấu trừ sau khi bằng nhau =-trên một số báo cáo. Lưu nó và thoát khỏi trình soạn thảo:

[Unit]
BindsTo=hostapd.service
After=hostapd.service
Wants=ap-bring-up.service
Before=ap-bring-up.service

[Service]
ExecStopPost=-/bin/ip link set ap0 up

Xin lưu ý rằng đó ExecStopPost=-/bin/ip link set ap0 upkhông phải là một lỗi đánh máy. Khi dừng wpa_supplicant, giao diện ap phải được thiết lập lại như được mô tả trong phần Chi tiết - wpa_supplicant cho cầu nối (Bước 6) .

Bước 7: hiển thị điểm truy cập với giao diện wifi ảo

Tạo một đơn vị với:

rpi ~# systemctl --force --full edit ap-bring-up.service

Trong trình soạn thảo trống, chèn các câu lệnh này, lưu nó và thoát khỏi trình soạn thảo:

[Unit]
Description=Bring up wifi interface ap0
Requisite=hostapd.service

[Service]
Type=oneshot
ExecStart=/lib/systemd/systemd-networkd-wait-online --interface=wlan0 --timeout=60 --quiet
ExecStartPost=/bin/ip link set ap0 up
ExecStartPost=/usr/bin/resolvectl dnssec ap0 no

Bước 8: thiết lập giao diện tĩnh

Đối với một cây cầu ap0 được tạo động. Vì vậy, tạo các tệp này:

rpi ~# cat > /etc/systemd/network/02-br0.netdev <<EOF
[NetDev]
Name=br0
Kind=bridge
EOF

rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
DNSSEC=no
Bridge=br0
EOF

rpi ~# cat > /etc/systemd/network/16-br0_up.network <<EOF
[Match]
Name=br0
[Network]
DNSSEC=no
IPMasquerade=yes
Address=192.168.4.1/24
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF

Khởi động lại.
Đó là nó.


♦ Chi tiết

Chung

Một vấn đề là chúng tôi muốn sử dụng cùng một thiết bị cho máy khách wifi và cho một điểm truy cập. Điều này phải được hỗ trợ bởi phần cứng wifi. Chúng ta có thể kiểm tra điều này với

rpi ~$ sudo iw list | grep -A4 "valid interface combinations:"
        valid interface combinations:
             * #{ managed } <= 1, #{ P2P-device } <= 1, #{ P2P-client, P2P-GO } <= 1,
               total <= 3, #channels <= 2
             * #{ managed } <= 1, #{ AP } <= 1, #{ P2P-client } <= 1, #{ P2P-device } <= 1,
               total <= 4, #channels <= 1

Phần quan trọng là #{ managed } <= 1, #{ AP } <= 1,nhưng bạn cũng có thể thấy rằng điều này chỉ có thể có trên một kênh .

Tôi thấy rằng chúng tôi phải thiết lập trình tự này, nếu không, nó sẽ không hoạt động. Nếu các ứng dụng khác liên kết với cổng wifi thì không thể cài đặt được.

  1. tạo giao diện ảo ap0cho điểm truy cập
  2. bắt đầu truy cập daemon hostapdbằng giao diệnap0
  3. bắt đầu wpa_supplicantcho khách hàng sử dụng wifiwlan0

Lệnh này hạn chế toàn bộ thiết lập. Không thể bắt đầu hostapd khi wpa_supplicant đang chạy. Trước tiên, bạn phải dừng wpa_supplicant và sau đó bắt đầu hostapdwpa_supplicant theo thứ tự này. Điều này là do trình điều khiển WiFi brcmfmac.

Một cách giải quyết khác là wpa_supplicant vô hiệu hóa giao diện ap0 khi nó được quản lý, bất kể nó bắt đầu hay dừng. Vì vậy, ngay cả sau khi bắt đầu từ wpa_supplicant , chúng ta phải kích hoạt lại ap0 .

Ở đây chủ yếu có năm thành phần liên quan: giao diện ảo ap0 , hostapd , wpa_supplicant , cầu thiết lập và đưa lên điểm truy cập.

hostapd (Bước 2)

Đây là thiết lập bình thường bạn sẽ tìm thấy trên tất cả các trang web. Vui lòng đặt kênh thành cùng một giá trị sau đó wlan0 được kết nối với wifi từ bộ định tuyến của bạn. Đó là hạn chế từ phần cứng và có thể tránh nhầm lẫn với cài đặt kênh. hostapd sẽ luôn đặt kênh có cùng giá trị so với kết nối máy khách, bất kể bạn đặt gì ở đây.

Vui lòng sử dụng cụm mật khẩu đủ dài, tôi sẽ nói ít nhất là với 8 ký tự. Người ta nói rằng 4 ký tự quá nhỏ và hostapd sẽ từ chối chấp nhận kết nối. Bạn sẽ không tìm thấy điểm truy cập RPiNet trên điện thoại di động của mình (nhờ @Leo ).

Đối với các phụ thuộc, chúng tôi mở rộng đơn vị từ hostapd bằng tệp thả xuống (lớp phủ) (2) . Nó luôn bắt đầu wpa_supplicant (Muốn nó). Trong tập tin đơn vị chính có một Restart=alwaysbộ. Điều này là rất ấn tượng nếu việc tạo giao diện ap0 không thành công vì một số lý do. Khi khởi động, RasPi sẽ luôn cố gắng khởi động hostapd trong một vòng lặp vô tận và sẽ không bao giờ hoàn thành việc khởi động. Bạn phải ngắt nguồn và sửa chữa Thẻ SD trong một máy tính khác. Đó là một cấu hình rất xấu. Bạn thực sự nên vô hiệu hóa Khởi động lại. Sau đó giao diện ap0 được tạo trước khi bắt đầu hostapd . Điều này được tôn trọng để đặt hàng bắt đầu. Bởi vì ap0 bị ràng buộc với wlan0Nó có cùng địa chỉ mac. Bạn có thể xem xét để cung cấp cho nó một địa chỉ mac duy nhất nhưng đó không phải là một ý tưởng tốt. Trên mạng chỉ thấy địa chỉ mac từ wlan0 . Nếu bạn cung cấp cho ap0 địa chỉ mac của chính nó thì nó không được tìm thấy trên mạng cho các yêu cầu arp và địa chỉ IP cho các kết nối đến ap0 không được tìm thấy và bị kẹt. Bạn phải đặt ap0 thành chế độ lăng nhăng để làm cho nó hoạt động.

Sau khi thiết lập các phụ thuộc thì hostapd.service theo mặc định sẽ bắt đầu After=network.target. Wpa_supplicant@wlan0.service phải bắt đầu After=hostapd.servicevà bắt đầu theo mặc định Before=network.target. Bạn có thấy xung đột với network.target? Systemd phàn nàn với thông báo lỗi " Đã tìm thấy chu trình đặt hàng trên wpa_supplicant@wlan0.service/start " và ngăn chặn hostapd.service bắt đầu. Đó là lý do tại sao chúng tôi phải bình luận After=network.targettrong tệp đơn vị của hostapd.service.

Sau khi dừng hostapd thì ap0 cũng bị xóa để nó có thể được tạo lại vào lần bắt đầu tiếp theo của hostapd .

wpa_supplicant (Bước 3)

Thiết lập wpa_supplicant cho wlan0 chúng ta làm như bình thường. Đơn vị mở rộng của nó là liên kết chặt chẽ wpa_supplicant với hostapd để nó sẽ bắt đầu và dừng với nó theo đúng thứ tự. Chúng tôi làm điều đó bởi vì chạy wpa_supplicant mà không có hostapd là rất phức tạp và có thể dẫn đến sự cố hoàn toàn của trình điều khiển wifi brcmfmac , tôi đã thấy điều đó trong các thử nghiệm của mình.

Thiết lập giao diện tĩnh (Bước 4)

Ở đây chúng tôi xác định giao diện wlan0 và giao diện ảo ap0 chúng tôi cần cho một bộ lặp wifi. Đối với wlan0, chúng tôi nhận được địa chỉ IP bằng DHCP từ bộ định tuyến internet. Tùy chọn bạn có thể đặt địa chỉ IP tĩnh, nhưng sau đó bạn cũng phải xác định tất cả các cài đặt khác như cổng và máy chủ DNS vì bạn không nhận được chúng nữa từ máy chủ DHCP.

Giao diện ap0 cần một địa chỉ IP tĩnh vì đó là điểm truy cập và nguồn của máy chủ DHCP cho mạng wifi. Không có nhu cầu rằng các máy khách, được kết nối với bộ định tuyến internet, cũng phải kết nối với các máy khách trên điểm truy cập. Vì vậy, chúng ta có thể sử dụng NAT (IPMasazed = yes) giúp đơn giản hóa việc thiết lập rất nhiều. Sau đó, chúng tôi không phải định cấu hình các tuyến tĩnh và không cần thiết định cấu hình wlan0 với các giá trị tĩnh (địa chỉ IP, cổng, máy chủ DNS, v.v.).

hostapd cho cầu (Bước 5)

Chúng tôi đã thiết lập hostapd trong Bước 2. Bây giờ chúng tôi chỉ cần nối thêm bridge=br0vào cấu hình của nó để nó sẽ tự động quản lý để thêm ap0 vào cầu.

wpa_supplicant cho cầu (Bước 6)

Khi wpa_supplicant được khởi động, nó cũng hiển thị giao diện wlan0 . Mỗi khi nó được quản lý, bất kể nó bắt đầu hay dừng, nó sẽ dừng ap0 vì nó không phải là giao diện thực và phụ thuộc trực tiếp vào wlan0 . Đó cũng là lý do tại sao nó chỉ có thể xuất hiện khi wlan0 có Gained Carrier. Nhưng chúng ta không thể đợi vài giây và sau đó đưa lên ap0 . wpa_supplicant.service phải bắt đầu hoàn toàn vì vậy chúng tôi chỉ có thể sử dụng một dịch vụ bổ sung ap-bring-up.service để thực hiện việc này. Các phụ thuộc đảm bảo điều này.

Sau khi dừng wpa_supplicant (đưa wlan0 xuống) ap0 phải được đưa lên một lần nữa để nó có thể tiếp tục chạy cho điểm truy cập.

đưa lên điểm truy cập (Bước 7)

Không thể chỉ thiết lập ap0 khi cần. Nó chỉ có thể bắt đầu khi wlan0 "Gained Carrier" và liên kết đã sẵn sàng (3) . Điều này sẽ xảy ra một vài giây hoặc nhiều hơn sau khi wpa_supplicant bắt đầu. Vì vậy, chúng tôi cần ap-bring-up.servicewpa_supplicant Muốn và điều đó sẽ kiểm tra xem wlan0 có "Carrier Carrier" và đang trực tuyến. Có một chương trình trợ giúp systemd-networkd-Wait-online có thể thực hiện việc này đồng bộ. Chúng tôi sử dụng nó với thời gian chờ là 60 giây. Nếu kết nối mạng của bạn mất hơn 60 giây để thức dậy, thì bạn nên tăng thời gian chờ tương ứng. Với journalctl -b -ebạn có thể kiểm tra nếu Starting Bring up wifi interface ap0...Started Bring up wifi interface ap0.bao gồm wlan0: Gained carrier. Điều này rất quan trọng vì nếu không, cây cầu sẽ không hoạt động chính xác với hành vi không xác định. Và tất nhiên, đơn vị này chỉ nên bắt đầu khi hostapd đang chạy (Requisite).

xác định giao diện tĩnh cho cầu (Bước 8)

Những tập tin xác định cầu. ap0 sẽ tự động được thêm bởi hostapd . eth0ap0 là nô lệ của cây cầu và không cần địa chỉ IP. Bản thân cầu br0 cũng không cần địa chỉ IP nhưng ở đây nó có địa chỉ IP tĩnh vì chúng ta cần nó cho máy chủ DHCP bị ràng buộc với br0 nên máy chủ DHCP có sẵn trên mạng con trên cầu (giao diện eth0, ap0).

Bởi vì tôi đã thấy một số rắc rối với độ phân giải tên khi DNSSEC được bật, nó bị vô hiệu hóa ở mọi nơi. Nếu nó được sử dụng, chúng ta có thể kích hoạt nó khi cần thiết.

Phần kết luận

Bây giờ bạn có thể bắt đầu, dừng và khởi động lại hostapdwpa_supplicant .

Bạn sẽ thấy điểm truy cập, ở đây là RPiNet , trong điện thoại di động của bạn và sẽ nhận được địa chỉ IP để kết nối với điểm truy cập. Bạn cũng sẽ nhận được một địa chỉ IP từ cùng một mạng con nếu bạn kết nối máy tính xách tay bằng cáp với cổng ethernet và bạn có thể ping điện thoại di động.

Với thiết lập này, bạn có các phụ thuộc sau với bắt đầu và dừng:

 hostapd   │ wpa_supplicant      wpa_supplicant │  hostapd
───────────┼────────────────────────────────────┼──────────
 starting  │    starts              starting    │  starts
 stopping  │    stops               stopping    │   ----
restarting │   restarts            restarting   │  starts

Điều này là do thứ tự bắt đầu nghiêm ngặt (xem phần Chung ). Bạn không thể chạy wpa_supplicant mà không có hostapd nhưng bạn có thể chạy hostapd mà không có wpa_supplicant bằng cách bắt đầu hostapd và sau đó dừng wpa_supplicant .

Nếu giao tiếp dừng lại vì một lý do nào đó (ví dụ như trì hoãn nhỏ hoặc một cái gì đó khác) thì hầu như đủ để đá ap0 với /bin/ip link set ap0 up.


tài liệu tham khảo:
[1] Cách di chuyển từ mạng sang systemd-networkd với chuyển đổi dự phòng động
[2] man systemd.unit
[3] bắc cầu không dây systemd-networkd - cần chờ nhà mạng
[4] Thiết lập WiFi trên Pi 3 B +


1
Đây trông giống như một hướng dẫn tốt (tôi chưa thử nó, không có mong muốn về chức năng). Tôi có một vài mối quan tâm - bạn dường như được đăng nhập với quyền root; Raspbian không có root a / c và không có lời giải thích. Tại sao "# cat> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf << EOF" khi bạn chỉ có thể liệt kê các tệp (và sử dụng sudo để sao chép)?
Milliways

1
@Milliways Có một vài lệnh mà tất cả chúng phải được bắt đầu bằng sudo. Để đơn giản hóa nó, tôi thích làm việc trong một trình bao với môi trường người dùng nhưng với quyền root. Bạn chỉ có thể gọi điều này với sudo -Es. Bạn sẽ tìm thấy nó trong các bước và bạn cũng sẽ tìm thấy một exit(nếu không khởi động lại).
Ingo

2
Tôi đã thử nó và hoạt động như một giấc mơ (Không có cây cầu). Tôi đã làm nó trên Rasp Zero W. Cảm ơn!
nướng

1
@thewebjackal Để quản lý wpa_suppliant dưới dạng dịch vụ, ví dụ: bắt đầu, dừng, khởi động lại, bật, tắt, v.v., tôi sẽ sử dụng systemd. Cách này systemd luôn cung cấp trạng thái của dịch vụ. Để quản lý chi tiết của wpa_supplicant, ví dụ: tự động thêm một mạng, buộc phải kết nối với một điểm nóng cụ thể, v.v., tôi sẽ sử dụng wpa_cli. Nói chung: nếu có thể, sử dụng systemctl.
Ingo

1
@Chiwda Gần đây tôi đã cập nhật thiết lập với độ phân giải tên systemd. Có lẽ có một vấn đề? Tôi sẽ kiểm tra nó, chỉ một lát thôi ...
Ingo

4

Câu trả lời này không được nghĩ đến để thiết lập. Để thiết lập, hãy xem câu trả lời khác cho câu hỏi này bắt đầu với Thiết lập bộ lặp wifi . Điều này chủ yếu để khắc phục sự cố và để hiển thị cách thức hoạt động với các lệnh chi tiết từng bước và điểm kiểm tra nhưng không có thông tin cơ bản. Tôi cho rằng bạn có màn hình, bàn phím và chuột được gắn vào Raspberry Pi và có máy chủ DHCP chạy trên mạng không dây cục bộ của bạn. Địa chỉ IP và các cài đặt khác trong kiểm tra này là ví dụ. Bạn phải sử dụng của bạn. Bạn luôn có thể nhìn vào journalctl -b -ethông tin đăng nhập.

Download ZIPhình ảnh Raspbian Stretch Lite 2018-11-13 vào máy tính linux của bạn.

Điểm kiểm tra 1: So sánh tổng kiểm tra với điểm kiểm tra trên trang tải xuống.

pc ~$ sha256sum 2018-11-13-raspbian-stretch-lite.zip

47ef1b2501d0e5002675a50b6868074e693f78829822eef64f3878487953234d 2018-11-13-raspbian-stretch-lite.zip

Bước tiếp theo: Ghi hình ảnh vào Thẻ SD đính kèm. Tôi cho rằng nó được gắn liền với /dev/sdb. Nhìn lsblkvào tập tin thiết bị nào Thẻ SD của bạn được đính kèm.

pc ~$ unzip -p 2018-11-13-raspbian-stretch-lite.zip | sudo dd of=/dev/sdb bs=4M conv=fsync

Điểm kiểm tra 2: kiểm tra phân vùng trên Thẻ SD:

pc ~$ sudo parted /dev/sdb print
sudo parted /dev/sdb print
Model: Mass Storage Device (scsi)
Disk /dev/sdb: 3965MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  50,2MB  46,0MB  primary  fat32        lba
 2      50,3MB  1866MB  1816MB  primary  ext4

Bước tiếp theo: Gắn kết phân vùng khởi động và tạo một wpa_supplicant.conftệp:

pc ~$ mkdir boot/
pc ~$ sudo mount /dev/sdb1 boot/
pc ~$ sudo editor boot/wpa_supplicant.conf

Chèn phần này vào trình chỉnh sửa trống với các cài đặt của bạn cho country=, ssid=psk=lưu nó và thoát trình chỉnh sửa:

country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="your wifi network"
    psk="YourSecretPassword"
}

pc ~$ sudo umount boot/

Đặt Thẻ SD vào RasPi của bạn và khởi động.

Điểm kiểm tra 3: Sau khi đăng nhập, kiểm tra kết nối wifi và truy cập internet. Các wlan0 giao diện phải có một địa chỉ IP:

rpi ~$ ip -4 addr show dev wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.10.112/24 brd 192.168.10.255 scope global wlan0
       valid_lft forever preferred_lft forever

rpi ~$ ping -I wlan0 -c3 google.com
PING google.com (216.58.210.14) from 192.168.10.112 wlan0: 56(84) bytes of data.
64 bytes from fra16s07-in-f14.1e100.net (216.58.210.14): icmp_seq=1 ttl=57 time=213 ms
64 bytes from fra16s07-in-f14.1e100.net (216.58.210.14): icmp_seq=2 ttl=57 time=14.2 ms
64 bytes from fra16s07-in-f14.1e100.net (216.58.210.14): icmp_seq=3 ttl=57 time=12.2 ms

--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 12.215/79.965/213.461/94.399 ms

Cho đến bây giờ chúng tôi chỉ thực hiện thiết lập mặc định. Nếu bạn gặp một số rắc rối thì có một vấn đề chung với mạng của bạn. Kiểm tra Làm cách nào để thiết lập mạng / WiFi / địa chỉ IP tĩnh? và sửa nó.

Bước tiếp theo: Nâng cấp và khởi động lại đầy đủ:

rpi ~$ sudo apt update
rpi ~$ sudo apt full-upgrade
rpi ~$ sudo systemctl reboot

Sau khi khởi động lại và đăng nhập, chuyển sang systemd-networkd :

rpi ~$ sudo -Es
rpi ~# systemctl mask networking.service
rpi ~# systemctl mask dhcpcd.service
rpi ~# sudo mv /etc/network/interfaces /etc/network/interfaces~
rpi ~# sed -i '1i resolvconf=NO' /etc/resolvconf.conf

rpi ~# systemctl enable systemd-networkd.service
rpi ~# systemctl enable systemd-resolved.service
rpi ~# ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

Tạo các tệp này cho giao diện wlan0ap0 với cài đặt của bạn:

rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
IPForward=yes
DHCP=yes
EOF

rpi ~# cat > /etc/systemd/network/12-ap0.network <<EOF
[Match]
Name=ap0
[Network]
Address=192.168.4.1/24
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 84.200.70.40
EOF

Đổi tên /etc/wpa_supplicant/wpa_supplicant.conf để phù hợp với cài đặt giao diện và khởi động lại:

rpi ~# mv /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
rpi ~# systemctl disable wpa_supplicant@wlan0.service
rpi ~# systemctl reboot

Điểm kiểm tra 4: Sau khi khởi động lại và đăng nhập kiểm tra kết nối wifi với systemd-networkd :

rpi ~$ sudo systemctl start wpa_supplicant@wlan0.service
rpi ~$ systemctl status wpa_supplicant@wlan0.service
● wpa_supplicant@wlan0.service - WPA supplicant daemon (interface-specific version)
   Loaded: loaded (/lib/systemd/system/wpa_supplicant@.service; disabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-01-29 11:07:53 GMT; 24s ago
 Main PID: 415 (wpa_supplicant)
   CGroup: /system.slice/system-wpa_supplicant.slice/wpa_supplicant@wlan0.service
           └─415 /sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-wlan0.conf -Dnl80211,wext -iwlan0

Jan 29 11:07:53 raspberrypi systemd[1]: Started WPA supplicant daemon (interface-specific version).
Jan 29 11:07:53 raspberrypi wpa_supplicant[415]: Successfully initialized wpa_supplicant
Jan 29 11:07:53 raspberrypi wpa_supplicant[415]: p2p-dev-wlan0: CTRL-EVENT-REGDOM-CHANGE init=USER type=COUNTRY alpha2=DE
Jan 29 11:07:56 raspberrypi wpa_supplicant[415]: wlan0: Trying to associate with 34:31:c4:c7:f2:74 (SSID='wlan@hoeft-online.de' freq
Jan 29 11:07:56 raspberrypi wpa_supplicant[415]: wlan0: Associated with 34:31:c4:c7:f2:74
Jan 29 11:07:56 raspberrypi wpa_supplicant[415]: wlan0: WPA: Key negotiation completed with 34:31:c4:c7:f2:74 [PTK=CCMP GTK=CCMP]
Jan 29 11:07:56 raspberrypi wpa_supplicant[415]: wlan0: CTRL-EVENT-CONNECTED - Connection to 34:31:c4:c7:f2:74 completed [id=0 id_st
Jan 29 11:07:56 raspberrypi wpa_supplicant[415]: p2p-dev-wlan0: CTRL-EVENT-REGDOM-CHANGE init=COUNTRY_IE type=COUNTRY alpha2=DE

rpi ~$ ip -4 addr show dev wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.10.112/24 brd 192.168.10.255 scope global wlan0
       valid_lft forever preferred_lft forever

rpi ~$ ping -I wlan0 -c3 google.com
PING google.com (172.217.21.238) from 192.168.10.112 wlan0: 56(84) bytes of data.
64 bytes from fra16s13-in-f238.1e100.net (172.217.21.238): icmp_seq=1 ttl=56 time=14.1 ms
64 bytes from fra16s13-in-f238.1e100.net (172.217.21.238): icmp_seq=2 ttl=56 time=13.4 ms
64 bytes from fra16s13-in-f238.1e100.net (172.217.21.238): icmp_seq=3 ttl=56 time=13.2 ms

--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 13.203/13.602/14.142/0.418 ms

Điểm kiểm tra 5: QUAN TRỌNG! Tại thời điểm này, nó phải có khả năng thiết lập và xóa giao diện ảo ap0 mà không có thông báo lỗi:

rpi ~$ sudo iw dev wlan0 interface add ap0 type __ap
rpi ~$ sudo iw dev ap0 info
Interface ap0
        ifindex 5
        wdev 0x5
        addr b8:27:eb:06:e8:8b
        type AP
        wiphy 0
        channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz
        txpower 31.00 dBm

rpi ~$ sudo iw dev ap0 del
rpi ~$

Bước tiếp theo: Cài đặt hostapd và trình trợ giúp

rpi ~$ sudo -Es
rpi ~# apt install hostapd rng-tools
rpi ~# systemctl stop hostapd.service
rpi ~# systemctl disable hostapd.service

Tạo tệp này với các cài đặt của bạn cho ssid=wpa_passphrase=:

rpi ~# cat > /etc/hostapd/hostapd.conf <<EOF
interface=ap0
driver=nl80211
ssid=RPiNet
hw_mode=g
channel=1
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=verySecretPassword
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
EOF

rpi ~# chmod 600 /etc/hostapd/hostapd.conf

Đặt DAEMON_CONF = "/ etc / hostapd / hostapd.conf" trong / etc / default / hostapd với:

rpi ~# sed -i 's/^#DAEMON_CONF=.*$/DAEMON_CONF="\/etc\/hostapd\/hostapd.conf"/' /etc/default/hostapd

Trong /etc/init.d/hostapd trong phần INIT INFO bạn phải nhận xét dòng # Should-Start: $networktới ## Should-Start: $network:

rpi ~# sed -i 's/^\(# Should-Start:\s*$network\)$/#\1/' /etc/init.d/hostapd

Chỉnh sửa hostapd.service bằng systemctl edit hostapd.servicevà trong trình chỉnh sửa trống, hãy chèn và thoát:

[Service]
ExecStartPre=/sbin/iw dev wlan0 interface add ap0 type __ap
ExecStopPost=-/sbin/iw dev ap0 del

Khởi động lại.

Sau khi khởi động lại và đăng nhập, kiểm tra kết nối máy khách cùng với điểm truy cập. Điều rất quan trọng là /sbin/wpa_supplicantbắt đầu sau /sbin/hostapd . Nếu không, trình điều khiển wifi gặp sự cố và bạn phải khởi động lại.

Điểm kiểm tra 6: giao diện wlan0 phải có state DOWNap0state UP.

rpi ~$ ip link show dev wlan0
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether b8:27:eb:06:e8:8b brd ff:ff:ff:ff:ff:ff

rpi ~$ sudo systemctl start hostapd.service
rpi ~$ ip -4 addr show dev ap0
4: ap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.4.1/24 brd 192.168.4.255 scope global ap0
       valid_lft forever preferred_lft forever

Điểm kiểm tra 7: Kiểm tra wifi trên điện thoại di động của bạn. Bạn nên tìm RPiNetvà bạn có thể kết nối với nó. Điện thoại di động của bạn không thể truy cập internet vì định tuyến chưa được định cấu hình.

Bước tiếp theo: Bắt đầu wpa_supplicantsau hostapd:

rpi ~$ sudo systemctl start wpa_supplicant@wlan0.service

Điểm kiểm tra 8: Các giao diện wlan0ap0 phải có state UPvà bạn có thể ping google.com từ RasPi:

rpi ~$ ip -4 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.10.112/24 brd 192.168.10.255 scope global dynamic wlan0
       valid_lft 25393sec preferred_lft 25393sec
4: ap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.4.1/24 brd 192.168.4.255 scope global ap0
       valid_lft forever preferred_lft forever

rpi ~$ ping -c3 google.com
PING google.com (172.217.21.238) 56(84) bytes of data.
64 bytes from fra16s13-in-f238.1e100.net (172.217.21.238): icmp_seq=1 ttl=56 time=13.7 ms
64 bytes from fra16s13-in-f238.1e100.net (172.217.21.238): icmp_seq=2 ttl=56 time=14.1 ms
64 bytes from fra16s13-in-f238.1e100.net (172.217.21.238): icmp_seq=3 ttl=56 time=15.9 ms

--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 13.775/14.608/15.908/0.936 ms

Bước tiếp theo: Kích hoạt dịch địa chỉ mạng (NAT) để các gói được định tuyến có thể quay lại thiết bị trên điểm truy cập. Mở rộng wpa_supplicant với:

rpi ~$ sudo systemctl stop wpa_supplicant@wlan0.service
rpi ~$ sudo systemctl edit wpa_supplicant@wlan0.service

Trong trình soạn thảo trống chèn các câu lệnh này. Hãy chú ý đến dấu trừ sau khi bằng nhau =-trên một số báo cáo. Lưu nó và thoát khỏi trình soạn thảo:

[Service]
ExecStartPost=/sbin/iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
ExecStopPost=-/sbin/iptables -t nat -D POSTROUTING -o wlan0 -j MASQUERADE

Bắt đầu lại wpa_supplicant:

rpi ~$ sudo systemctl daemon-reload
rpi ~$ sudo systemctl start wpa_supplicant@wlan0.service

Điểm kiểm tra 9: Bây giờ bạn sẽ có thể truy cập internet bằng điện thoại di động.

Đó là nó.

Nếu bạn gặp rắc rối, bạn có thể thử một nỗ lực mới với:

rpi ~$ sudo systemctl disable wpa_supplicant@wlan0.service
rpi ~$ sudo systemctl disable hostapd.service
rpi ~$ sudo systemctl reboot

Đây không phải là một cài đặt làm việc. Bạn phải chỉnh sửa hostapd.servicewpa_supplicant@wlan0.servicenhư thể hiện trong câu trả lời khác của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.