Ăn chơi Thiết lập một điểm truy cập
Chúng ta đang nói về một điểm truy cập cùng với một cổng ethernet eth0 .
Nếu bạn muốn một điểm truy cập cùng với kết nối máy khách wlan0 đến một mạng wifi khác (bộ lặp wlan) thì hãy xem Điểm truy cập dưới dạng bộ định tuyến / bộ lặp WiFi, tùy chọn có cầu nối .
Có thể định cấu hình Raspbian Stretch làm điểm truy cập wifi mà không cần cài đặt phần mềm bổ sung. Tất cả các thành phần cần thiết đều có sẵn: mạng, máy chủ DHCP và cầu nối đi kèm với systemd-networkd và wifi có thể được thiết lập với wpa_supplicant . Kết nối hai giao diện eth0 và wlan0 có thể được thực hiện bằng cách định tuyến hoặc bằng cách bắc cầu. Dưới đây đầu tiên thiết lập để cài đặt nhanh chóng và sau đó các chi tiết. Đầu tiên chúng ta phải chuyển sang systemd-networkd .
Đã thử nghiệm với
Raspbian Stretch Lite 2019-04-08 trên Raspberry Pi 3B + được cập nhật vào 2019-04-14.
Raspbian Buster Lite 2019-07-10 trên Raspberry Pi 4B được cập nhật vào 2019-07-20.
Cập nhật được thực hiện với sudo apt update && sudo apt full-upgrade && sudo reboot
.
♦ Thiết lập chung
Chuyển sang systemd-networkd
Để biết thông tin chi tiết, hãy xem (1) . Ở đây chỉ trong ngắn hạn. Thực hiện các lệnh này:
# disable classic networking
rpi ~$ sudo -Es
rpi ~# systemctl mask networking.service dhcpcd.service
rpi ~# mv /etc/network/interfaces /etc/network/interfaces~
rpi ~# sed -i '1i resolvconf=NO' /etc/resolvconf.conf
# enable systemd-networkd
rpi ~# systemctl enable systemd-networkd.service systemd-resolved.service
rpi ~# ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Định cấu hình wpa_supplicant làm điểm truy cập
Để cấu hình wpa_supplicant như điểm truy cập tạo ra tập tin này với các thiết lập của bạn cho country=
, ssid=
, psk=
và có lẽ frequency=
. Bạn chỉ có thể sao chép và dán khối này trong một khối vào dòng lệnh của bạn bắt đầu bằng cat
và bao gồm cả EOF (dấu phân cách EOF sẽ không nhận được một phần của tệp):
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="RPiNet"
mode=2
frequency=2437
#key_mgmt=NONE # uncomment this for an open hotspot
# delete next 3 lines if key_mgmt=NONE
key_mgmt=WPA-PSK
proto=RSN WPA
psk="password"
}
EOF
rpi ~# chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
rpi ~# systemctl disable wpa_supplicant.service
rpi ~# systemctl enable wpa_supplicant@wlan0.service
Hoàn tất thiết lập chung. Quay lại.
♦ Thiết lập điểm truy cập độc lập
Ví dụ cho thiết lập này:
wifi
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0)
\ /
(dhcp) 192.168.4.1
Thực hiện "Thiết lập chung" sau đó tạo tệp sau để định cấu hình wlan0 . Chúng tôi chỉ có điểm truy cập. Không có thiết bị ethernet được cấu hình.
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
DHCPServer=yes
EOF
Nếu bạn muốn điều này thì khởi động lại.
Đó là nó.
Nếu không thì tiếp tục, không cần phải khởi động lại vào lúc này.
♦ Thiết lập điểm truy cập và với eth0, không cần định tuyến
Ví dụ cho thiết lập này:
|
wifi | wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / | \ /
(dhcp) 192.168.4.1 | (dhcp) 192.168.50.1
Thiết lập
Thực hiện "Thiết lập điểm truy cập độc lập" sau đó tạo tệp sau để định cấu hình eth0 .
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
DHCP=yes
EOF
Khởi động lại.
Đó là nó.
Chi tiết
Giao diện eth0 được kết nối với cáp ethernet với bộ định tuyến internet và được cấu hình bởi DHCP từ bộ định tuyến internet. Không có vấn đề gì khi cung cấp cho nó một địa chỉ IP tĩnh với ví dụ Address=192.168.50.2
thay vìDHCP=yes
.
Nếu không định tuyến, bạn không thể truy cập internet bằng điện thoại di động. Bạn chỉ có thể truy cập nó từ chính RPi để nhận các bản cập nhật hoặc đại loại như thế.
♦ Thiết lập điểm truy cập và với eth0, với NAT (được khuyến nghị)
Ví dụ cho thiết lập này:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \
(dhcp) 192.168.4.1 (dhcp)
Thiết lập
Thực hiện "Thiết lập chung" sau đó tạo các tệp sau để định cấu hình wlan0 và eth0 . Hãy chắc chắn rằng bạn sử dụng một mạng con khác cho điểm truy cập so với điểm truy cập từ bộ định tuyến. Bộ định tuyến trong ví dụ này không sử dụng mạng con 192.168.4.0/24. Nếu bạn cần một mạng con khác thì chỉ cần thay đổi dòng Địa chỉ, vd Address=192.168.5.1/24
.
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
DHCP=yes
IPForward=yes
EOF
Để định cấu hình NAT, bạn phải mở rộng dịch vụ 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 chúng và thoát khỏi trình soạn thảo:
[Service]
ExecStartPre=/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ExecStopPost=-/sbin/iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Khởi động lại.
Đó là nó.
Chi tiết
Nếu bạn không có quyền truy cập vào bộ định tuyến internet, bạn có thể giả mạo nó bằng NAT (dịch địa chỉ mạng) để nói với họ rằng tất cả các gói đều đến từ RasPi AP của bạn. Nhưng đây không phải là định tuyến sạch và có những hạn chế. Các máy khách trên mạng con của bộ định tuyến không thể kết nối với các máy khách trên wifi. Nhưng trong hầu hết các trường hợp, điều này là không cần thiết vì vậy thiết lập này được khuyến nghị vì nó đơn giản hóa việc thiết lập. Nếu bạn cần kết nối với các máy khách wifi từ mạng bộ định tuyến thì bạn phải sử dụng định tuyến đầy đủ như được mô tả trong phần tiếp theo.
♦ Thiết lập điểm truy cập và với eth0, với định tuyến
Ví dụ cho thiết lập này:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \ /
(dhcp) 192.168.4.1 192.168.50.2 192.168.50.1
Thiết lập
Thực hiện "Thiết lập chung" sau đó tạo các tệp sau để định cấu hình wlan0 và eth0 . Hãy chắc chắn rằng bạn sử dụng các mạng con khác nhau cho điểm truy cập và mạng bộ định tuyến. Chúng tôi phải sử dụng địa chỉ IP tĩnh bởi vì chúng tôi phải sử dụng chúng làm cổng.
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
Address=192.168.50.2/24
Gateway=192.168.50.1
DNS=84.200.69.80 1.1.1.1
IPForward=yes
EOF
Khởi động lại.
Để làm việc định tuyến hoàn tất, bạn phải đặt tuyến tĩnh trong bộ định tuyến internet để có thể tìm tuyến cho các gói sắp tới qua RasPi tới các máy khách được kết nối bằng wifi đến điểm truy cập. Trên hầu hết các bộ định tuyến internet, bạn có thể đặt tuyến tĩnh nhưng cách thực hiện khác nhau tùy theo từng mô hình. Tùy thuộc vào bạn để tìm ra nó. Ví dụ: giao diện RasPi eth0 của bạn có địa chỉ ip tĩnh 192.168.50.2. Sau đó, trên bộ định tuyến của bạn, cổng (hop tiếp theo) là 192.168.50.2, mạng đích là 192.168.4.0/24 (hoặc 192.168.4.0 netmask 255.255.255.0).
Điều đó có nghĩa là cho bộ định tuyến internet: "gửi tất cả các gói thuộc mạng con 192.168.4.0/24
(mạng đích từ AP) đến bộ định tuyến tiếp theo trên mạng con của tôi, RasPi AP 192.168.50.2
(cổng). Nó biết nơi nào sẽ tiếp tục."
Đó là nó.
♦ Thiết lập một điểm truy cập với một cây cầu
Ví dụ cho thiết lập này:
RPi
wifi ┌──────bridge──────┐ wired wan
mobile-phone <.~.~.~> │(wlan0) br0 (eth0)│ <-------> router <-----> INTERNET
\ | / DHCP-server
(dhcp (dhcp 192.168.50.1
from router) from router)
Nếu bạn đã có một mạng ethernet với máy chủ DHCP và bộ định tuyến internet và bạn muốn mở rộng nó với một điểm truy cập wifi nhưng với cùng một địa chỉ IP thì bạn sử dụng một cây cầu. Điều này thường được sử dụng như một đường lên đến một bộ định tuyến.
Thiết lập
Thực hiện "Thiết lập chung" sau đó dọn sạch thư mục / etc / systemd / mạng nhưng không chạm vào 99-default.link
nếu có. Tạo ba tệp sau để cấu hình eth0 và br0 . Các địa chỉ IP là ví dụ. Bạn phải thiết lập của riêng bạn.
rpi ~# cat > /etc/systemd/network/02-br0.netdev <<EOF
[NetDev]
Name=br0
Kind=bridge
EOF
rpi ~# cat > /etc/systemd/network/04-br0_add-eth0.network <<EOF
[Match]
Name=eth0
[Network]
Bridge=br0
EOF
rpi ~# cat > /etc/systemd/network/12-br0_up.network <<EOF
[Match]
Name=br0
[Network]
DHCP=yes
# to use static IP uncomment these and comment DHCP=yes
#Address=192.168.50.60/24
#Gateway=192.168.50.1
#DNS=84.200.69.80 1.1.1.1
EOF
Bây giờ chúng ta phải nói với wpa_supplicant sử dụng một cây cầu. Chúng tôi làm điều đó bằng cách sửa đổi dịch vụ của mình 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 chúng và thoát khỏi trình soạn thảo:
[Service]
ExecStartPre=/sbin/iw dev %i set type __ap
ExecStartPre=/bin/ip link set %i master br0
ExecStart=
ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -Dnl80211,wext -i%I -bbr0
ExecStopPost=-/bin/ip link set %i nomaster
ExecStopPost=-/sbin/iw dev %i set type managed
Khởi động lại.
Đó là nó.
Chi tiết
Chúng ta phải nói với wpa_supplicant rằng giao diện của nó wlan0 là nô lệ của một cây cầu. Nếu không, nó sẽ từ chối máy khách kết nối với "mật khẩu sai" có nghĩa là đàm phán chính không hoạt động. Khi chúng ta nói / sbin / wpa_supplicant với tùy chọn -dbr0
sử dụng cầu cho wlan0 thì giao diện phải là thành viên của cầu. Đó là những gì chúng tôi làm với việc thả tệp (lớp phủ) cho dịch vụ wpa_supplicant . Câu lệnh trống ExecStart=
xóa mục cũ. Nếu không, bạn có hai dòng ExecStart=
và wpa_supplicant sẽ bắt đầu hai lần. Bản gốc ExecStart=
bạn có thể xem với systemctl cat wpa_supplicant@wlan0.service
.
Thông thường, bộ định tuyến bạn được kết nối với cáp ethernet có bật máy chủ DHCP. Cây cầu cũng trong suốt đối với các yêu cầu DHCP từ các trạm (thiết bị được kết nối với điểm truy cập), do đó bạn không phải lo lắng về cấu hình giao diện của nó với các tùy chọn và địa chỉ IP. Các bộ định tuyến sẽ phục vụ nó.
tham quan:
Nhưng nếu bộ định tuyến không có máy chủ DHCP, bạn có thể thiết lập một máy chủ trên RasPi. systemd-networkd có các tùy chọn để cấu hình máy chủ DHCP tích hợp của nó, nhưng vấn đề là systemd-networkd cho rằng nó đang chạy trên chính bộ định tuyến và điều đó không đúng trong trường hợp này. Nó sẽ phục vụ các tùy chọn sai cho các trạm, đặc biệt là bộ định tuyến tùy chọn . Không có cách nào để cấu hình nó. Vì vậy, chúng tôi phải cài đặtdnsmasq
trong trường hợp này có thể được cấu hình khi cần thiết. Cài đặt và cấu hình nó với (ví dụ: sử dụng địa chỉ IP của riêng bạn):
rpi ~$ sudo -Es
rpi ~# apt install dnsmasq
rpi ~# systemctl stop dnsmasq
rpi ~# mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
rpi ~# cat > /etc/dnsmasq.conf <<EOF
interface=br0
dhcp-range=192.168.50.128,192.168.50.164,255.255.255.0,24h
dhcp-option=option:router,192.168.50.1
dhcp-option=option:dns-server,8.8.8.8,1.1.1.1
EOF
rpi ~# systemctl start dnsmasq
rpi ~# exit
rpi ~$
Trong ví dụ này là các địa chỉ IP 192.168.50.128 đến 192.168.50.164 dành riêng để cung cấp cho các trạm. Đối với các địa chỉ IP tĩnh khác, hãy sử dụng một địa chỉ bên ngoài nhóm này, cũng là địa chỉ IP cho chính cây cầu.
♦ Tối ưu hóa
Khi bắt đầu wpa_supplicant, bạn chủ yếu nhận được thông báo này trên tạp chí:
wpa_supplicant[427]: random: Cannot read from /dev/random: Resource temporarily unavailable
wpa_supplicant[427]: random: Only 12/20 bytes of strong random data available from /dev/random
wpa_supplicant[427]: random: Not enough entropy pool available for secure operations
wpa_supplicant[427]: WPA: Not enough entropy in random pool for secure operations - update keys later when the first station connects
Nó không phải là một vấn đề lớn. wpa_supplicant cần số ngẫu nhiên để tạo khóa mã hóa. Điều này được thực hiện chậm một chút để nó phải chờ. May mắn thay, RasPi có một bản dựng trong T rue R andom N umber G enerator (TRNG). Chúng tôi có thể sử dụng nó và tăng tốc nhận số ngẫu nhiên bằng cách cài đặt một phần mềm (3) với:
rpi ~$ sudo apt install rng-tools
Cập nhật:
Kể từ Raspbian Stretch 2019-04-08 , không cần cài đặt rng-tools
. Chúng được cài đặt theo mặc định.
♦ Xử lý sự cố
systemd-mạngd
Nhìn vào trạng thái của một dịch vụ:
rpi ~$ systemctl status systemd-networkd.service
rpi ~$ systemctl status wpa_supplicant@wlan0.service
Hoặc thậm chí nhiều hơn một chút:
rpi ~$ journalctl --boot --pager-end
Tôi thấy hữu ích để theo dõi việc đăng nhập đang diễn ra:
rpi ~$ journalctl --boot --follow
Nếu bạn đã thực hiện thả tập tin, bạn có thể xem kết quả:
rpi ~$ systemctl cat wpa_supplicant@wlan0.service
Để kiểm tra môi trường thời gian chạy của một đơn vị, bạn có thể hiển thị nó và ví dụ xem nếu có hai ExecStart=
dòng:
rpi ~$ systemctl show wpa_supplicant@wlan0.service
Và nếu không có gì khác giúp bạn có thể kích hoạt tùy chọn gỡ lỗi từ /sbin/wpa_supplicant
với -d
trong một thả trong hồ sơ:
rpi ~$ sudo systemctl edit wpa_supplicant@wlan0.service
ExecStart=
ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -Dnl80211,wext -i%I -bbr0 -d
Đầu ra là trong tạp chí. Bằng cách này, tôi đã tìm thấy vấn đề với đàm phán quan trọng sai.
wifi
Nếu bạn đã thiết lập điểm truy cập, bạn nên tìm thấy nó bằng điện thoại di động. Hiển thị các mạng có sẵn, nó được trình bày với tên RPiNet và bạn có thể kết nối với nó. Trên RasPi, bạn cũng có thể sử dụng lệnh:
rpi ~$ sudo iw dev wlan0 info
phy#0
Interface wlan0
ifindex 3
wdev 0x2
addr b8:27:eb:06:e8:8b
ssid RPiNet
type AP
channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz
Như bạn có thể thấy nó là loại AP (điểm truy cập) và nó cũng sẽ cho bạn biết nó đang sử dụng kênh nào. Một vấn đề có thể là dịch một kênh thành tần số. Tần số phải phù hợp với một kênh. Bạn có thể xem (2) để biết danh sách các kênh WLAN. Ví dụ kênh sử dụng 36 trên băng tần 5,1 GHz bạn phải thiết lập frequency=5180
trong /etc/wpa_supplicant\wpa_supplicant.conf
. Nhưng bạn phải chắc chắn rằng wifi của bạn hỗ trợ băng tần 5,1 GHz. Bạn có thể kiểm tra với sudo iw phy
. Điều này sẽ cung cấp cho bạn một loạt các thông tin. Nó cũng phải chứa các tần số được hỗ trợ trên 5000 MHz. Nếu bạn chỉ thấy tần số 24xx MHz thì tất nhiên bạn chỉ có thể sử dụng tần số này.
Một điểm khác có thể là số ngẫu nhiên. Để mã hóa khóa cho các kết nối được bảo mật, wpa_supplicant cần số ngẫu nhiên. Tạo ra điều này rất chậm trên Raspberry Pi. Nếu nó không có đủ entropy để tạo khóa mã hóa, wpa_supplicant sẽ từ chối xác thực. Bạn có thể xem có cat /proc/sys/kernel/random/entropy_avail
bao nhiêu entropy có sẵn. Nó phải là> 1000 để làm việc đủ nhanh. Để tăng tốc độ này, rng-tools
được cài đặt theo mặc định. Nhìn vào phần Tối ưu hóa để biết thêm thông tin.
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] Danh sách các kênh WLAN
[3] Rng-tools