━━━การตั้งค่าจุดเชื่อมต่อ━━━
เรามีการพูดคุยเกี่ยวกับจุดเชื่อมต่อร่วมกับพอร์ตอีเธอร์เน็ตeth0
หากคุณต้องการจุดเชื่อมต่อร่วมกับwlan0เชื่อมต่อลูกค้าไปยังเครือข่าย wifi อื่น (repeater WLAN) แล้วมองไปที่จุดเชื่อมต่อเป็นเราเตอร์ WiFi / ทวนจำเป็นกับสะพาน
สามารถกำหนดค่าRaspbian Stretchเป็นจุดเชื่อมต่อ wifi ได้โดยไม่ต้องติดตั้งซอฟต์แวร์เพิ่มเติม ส่วนประกอบที่จำเป็นทั้งหมดที่มีอยู่: เครือข่ายเซิร์ฟเวอร์ DHCP และเชื่อมโยงมาพร้อมกับsystemd-networkdและ WiFi สามารถติดตั้งกับwpa_supplicant การเชื่อมต่อสองอินเตอร์เฟสeth0และwlan0สามารถทำได้โดยการเราต์หรือโดยการเชื่อมต่อ ด้านล่างก่อนการตั้งค่าสำหรับการติดตั้งอย่างรวดเร็วแล้วรายละเอียด ครั้งแรกที่เราจะต้องสลับไปsystemd-networkd
ทดสอบกับ
Raspbian Buster Lite 2019-09-26ใน Raspberry Pi 4B อัพเดทเมื่อวันที่ 2020-01-18 อัพเดททำได้ด้วย
ที่นี่คุณสามารถหาสิ่งที่แก้ไขการทดสอบสุดท้ายสำหรับรุ่น
Raspbian ก่อนหน้านี้sudo apt update && sudo apt full-upgrade && sudo reboot
♦การตั้งค่าทั่วไป
สลับไปที่ systemd-networkd
สำหรับดูรายละเอียดข้อมูลที่(1)และวิธีการแก้ปัญหาชื่อกำหนดค่ากับ systemd-networkd ในระยะสั้นเท่านั้น ดำเนินการคำสั่งเหล่านี้:
# deinstall classic networking
rpi ~$ sudo -Es
rpi ~# apt --autoremove purge ifupdown dhcpcd5 isc-dhcp-client isc-dhcp-common
rpi ~# rm -r /etc/network /etc/dhcp
# setup systemd-resolved
rpi ~# apt --autoremove purge avahi-daemon
rpi ~# apt install libnss-resolve
rpi ~# ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
rpi ~# systemctl enable systemd-resolved.service
# enable systemd-networkd
rpi ~# systemctl enable systemd-networkd.service
กำหนดค่า wpa_supplicant เป็นจุดเชื่อมต่อ
ในการกำหนดค่าwpa_supplicantเป็นจุดเชื่อมสร้างแฟ้มนี้ด้วยการตั้งค่าของคุณสำหรับcountry=
, ssid=
, และอาจจะpsk=
frequency=
คุณสามารถคัดลอกและวางสิ่งนี้ในหนึ่งบล็อกไปยังบรรทัดคำสั่งของคุณเริ่มต้นด้วยcat
และรวมทั้ง EOF (ตัวคั่น EOF จะไม่ได้รับส่วนของไฟล์):
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
เสร็จสิ้นการตั้งค่าทั่วไป กลับไป.
♦การตั้งค่าจุดเชื่อมต่อแบบสแตนด์อะโลน
ตัวอย่างสำหรับการตั้งค่านี้:
wifi
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0)
\ /
(dhcp) 192.168.4.1
อย่าติดตั้ง "นายพล"แล้วสร้างไฟล์ต่อไปนี้เพื่อกำหนดค่าwlan0 เรามีจุดเข้าใช้งานเท่านั้น ไม่มีการกำหนดค่าอุปกรณ์อีเธอร์เน็ต
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
DHCPServer=yes
EOF
หากคุณต้องการสิ่งนี้แล้วรีบูต
แค่นั้นแหละ.
ไม่เช่นนั้นไม่จำเป็นต้องรีบูตในเวลานี้
♦การตั้งค่าจุดเข้าใช้งานและด้วย eth0 โดยไม่มีการกำหนดเส้นทาง
ตัวอย่างสำหรับการตั้งค่านี้:
|
wifi | wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / | \ /
(dhcp) 192.168.4.1 | (dhcp) 192.168.50.1
ติดตั้ง
อย่า"การติดตั้งจุดที่ยืนอยู่คนเดียวเข้าถึง"แล้วสร้างไฟล์ต่อไปนี้เพื่อกำหนดค่าeth0
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
DHCP=yes
EOF
Reboot
แค่นั้นแหละ.
รายละเอียด
Interface eth0เชื่อมต่อกับสายอีเธอร์เน็ตกับเราเตอร์อินเทอร์เน็ตและรับการกำหนดค่าโดย DHCP จากเราเตอร์อินเทอร์เน็ต มันเป็นปัญหาที่จะให้มันอยู่ IP แบบคงที่ด้วยเช่นไม่มีแทนAddress=192.168.50.2
DHCP=yes
หากไม่กำหนดเส้นทางคุณจะไม่สามารถเชื่อมต่ออินเทอร์เน็ตด้วยโทรศัพท์มือถือได้ คุณสามารถเข้าใช้งานได้จาก RPi เท่านั้นเพื่อรับการปรับปรุงหรืออะไรทำนองนั้น
♦การตั้งค่าจุดเชื่อมต่อและด้วย eth0 โดยมี NAT (แนะนำ)
ตัวอย่างสำหรับการตั้งค่านี้:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \
(dhcp) 192.168.4.1 (dhcp)
ติดตั้ง
อย่าติดตั้ง "นายพล"แล้วสร้างไฟล์ต่อไปนี้เพื่อกำหนดค่าwlan0และeth0 หากคุณลองหนึ่งในการตั้งค่าก่อนหน้านี้คุณสามารถเขียนทับไฟล์ทั้งสองได้ ตรวจสอบให้แน่ใจว่าคุณใช้เครือข่ายย่อยที่แตกต่างกันสำหรับจุดเข้าใช้งานที่ไม่ใช่จุดเชื่อมต่อจากเราเตอร์ เราเตอร์ในตัวอย่างนี้ไม่ได้ใช้เครือข่ายย่อย 192.168.4.0/24 Address=192.168.5.1/24
หากคุณต้องการเครือข่ายย่อยอีกแล้วเพียงแค่เปลี่ยนบรรทัดที่อยู่เช่น
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
# IPMasquerade is doing NAT
IPMasquerade=yes
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
Reboot
แค่นั้นแหละ.
รายละเอียด
หากคุณไม่สามารถเข้าถึงเราเตอร์อินเทอร์เน็ตคุณสามารถปลอมมันด้วย NAT (การแปลที่อยู่เครือข่าย) เพื่อบอกว่าเป็นการโกหกว่าแพ็คเกจทั้งหมดมาจาก RasPi AP ของคุณ แต่นี่ไม่ใช่เส้นทางที่สะอาดและมีข้อ จำกัด ไคลเอนต์ในซับเน็ตของเราเตอร์ไม่สามารถเชื่อมต่อกับไคลเอนต์ใน wifi ได้ แต่ในกรณีส่วนใหญ่ไม่จำเป็นต้องใช้เพื่อแนะนำการตั้งค่านี้เพราะจะทำให้การตั้งค่าง่ายขึ้น หากคุณต้องการเชื่อมต่อกับไคลเอนต์ wifi จากเครือข่ายเราเตอร์คุณต้องใช้การกำหนดเส้นทางแบบเต็มรูปแบบตามที่อธิบายไว้ในส่วนถัดไป
♦การตั้งค่าจุดเข้าใช้งานและด้วย eth0 พร้อมการกำหนดเส้นทาง
ตัวอย่างสำหรับการตั้งค่านี้:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \ /
(dhcp) 192.168.4.1 192.168.50.2 192.168.50.1
ติดตั้ง
อย่าติดตั้ง "นายพล"แล้วสร้างไฟล์ต่อไปนี้เพื่อกำหนดค่าwlan0และeth0 หากคุณลองหนึ่งในการตั้งค่าก่อนหน้านี้คุณสามารถเขียนทับไฟล์ทั้งสองได้ ตรวจสอบให้แน่ใจว่าคุณใช้เครือข่ายย่อยต่าง ๆ สำหรับจุดเข้าใช้งานและเครือข่ายเราเตอร์ เราต้องใช้ที่อยู่ ip แบบคงที่เพราะเราต้องใช้มันเป็นเกตเวย์
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
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
Reboot
ในการทำให้การกำหนดเส้นทางทำงานเสร็จสมบูรณ์คุณต้องตั้งค่าเส้นทางคงที่ในเราเตอร์อินเทอร์เน็ตของคุณเพื่อให้สามารถค้นหาเส้นทางสำหรับแพ็คเกจสำรองที่มาเหนือ RasPi ไปยังไคลเอนต์ที่เชื่อมต่อด้วย wifi ไปยังจุดเชื่อมต่อ บนอินเทอร์เน็ตเราเตอร์ส่วนใหญ่คุณสามารถตั้งค่าเส้นทางแบบคงที่ แต่วิธีการทำนั้นแตกต่างกันไปในแต่ละรุ่น มันขึ้นอยู่กับคุณที่จะค้นพบมัน ตัวอย่างเช่นอินเทอร์เฟซRasPi eth0ของคุณมีที่อยู่ ip แบบคงที่ 192.168.50.2 จากนั้นในเราเตอร์ของคุณเกตเวย์ (ฮอปถัดไป) คือ 192.168.50.2 เครือข่ายปลายทางคือ 192.168.4.0/24 (หรือ 192.168.4.0 netmask 255.255.255.0)
นั่นหมายความว่าเราเตอร์อินเทอร์เน็ต: "ส่งแพคเกจทั้งหมดที่เป็นของเครือข่ายย่อย192.168.4.0/24
(เครือข่ายปลายทางจาก AP) ไปยังเราเตอร์ถัดไปในเครือข่ายย่อยของฉันนั่นคือ RasPi AP 192.168.50.2
(เกตเวย์) มันรู้ว่าจะต้องไปที่ใดต่อไป"
แค่นั้นแหละ.
♦การตั้งค่าจุดเชื่อมต่อด้วยสะพาน
ตัวอย่างสำหรับการตั้งค่านี้:
RPi
wifi ┌──────bridge──────┐ wired wan
mobile-phone <.~.~.~> │(wlan0) br0 (eth0)│ <-------> router <-----> INTERNET
\ | / DHCP-server
(dhcp (dhcp 192.168.50.1
from router) from router)
หากคุณมีเครือข่ายอีเธอร์เน็ตพร้อมเซิร์ฟเวอร์ DHCP และเราเตอร์อินเทอร์เน็ตและคุณต้องการขยายด้วยจุดเชื่อมต่อ wifi แต่ด้วยที่อยู่ IP เดียวกันคุณต้องใช้บริดจ์ สิ่งนี้มักใช้เป็นอัปลิงค์ไปยังเราเตอร์
ติดตั้ง
ทำ"การตั้งค่าทั่วไป"จากนั้นสร้างสามไฟล์ต่อไปนี้เพื่อกำหนดค่าอินเทอร์เฟซเครือข่าย หากคุณลองหนึ่งในการตั้งค่าก่อนหน้านี้คุณสามารถลบไฟล์ทั้งหมดได้/etc/systemd/network/
ยกเว้น99-default.link
ว่ามีอยู่ ที่อยู่ IP เป็นตัวอย่าง คุณต้องใช้ของคุณเอง
rpi ~$ sudo -Es # if not already executed before
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]
MulticastDNS=yes
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
ตอนนี้เราต้องบอกwpa_supplicantให้ใช้สะพาน เราดำเนินการโดยแก้ไขบริการด้วย:
rpi ~# systemctl edit wpa_supplicant@wlan0.service
ในตัวแก้ไขที่ว่างเปล่าแทรกคำสั่งเหล่านี้บันทึกและออกจากตัวแก้ไข:
[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
Reboot
แค่นั้นแหละ.
รายละเอียด
เราต้องบอกwpa_supplicantว่าอินเตอร์เฟสของwlan0นั้นเป็นทาสของบริดจ์ มิฉะนั้นจะปฏิเสธการเชื่อมต่อกับลูกค้าด้วย "รหัสผ่านผิด" หมายถึงการเจรจาที่สำคัญไม่ทำงาน เมื่อเราบอก/ sbin / wpa_supplicantพร้อมตัวเลือก-dbr0
ในการใช้บริดจ์สำหรับwlan0ดังนั้นอินเตอร์เฟสจะต้องเป็นสมาชิกของบริดจ์แล้ว นั่นคือสิ่งที่เราทำกับการดรอปไฟล์ (วางซ้อน) สำหรับบริการwpa_supplicant คำสั่งที่ว่างเปล่าExecStart=
ลบรายการเก่า มิฉะนั้นคุณมีสองบรรทัดExecStart=
และwpa_supplicantจะเริ่มสองครั้ง ต้นฉบับที่ExecStart=
คุณสามารถดูsystemctl cat wpa_supplicant@wlan0.service
ได้
โดยทั่วไปเราเตอร์ที่คุณเชื่อมต่อด้วยสายเคเบิลอีเธอร์เน็ตจะเปิดใช้งานเซิร์ฟเวอร์ DHCP บริดจ์ยังโปร่งใสสำหรับการร้องขอ DHCP จากสถานี (อุปกรณ์ที่เชื่อมต่อกับจุดเชื่อมต่อ) ดังนั้นคุณไม่ต้องกังวลเกี่ยวกับการกำหนดค่าอินเทอร์เฟซของมันด้วยที่อยู่ IP และตัวเลือก เราเตอร์จะให้บริการมัน
Excursus:
แต่ถ้าเราเตอร์ไม่มีเซิร์ฟเวอร์ DHCP คุณสามารถตั้งค่าหนึ่งบน RasPi systemd-networkdมีตัวเลือกในการกำหนดค่าเซิร์ฟเวอร์ DHCP ในตัว แต่ปัญหาคือsystemd-networkdถือว่ามันทำงานบนเราเตอร์ของตัวเองและนั่นไม่เป็นความจริงในกรณีนี้ มันจะให้บริการตัวเลือกที่ผิดไปยังสถานีโดยเฉพาะอย่างยิ่งตัวเลือกเราเตอร์ ไม่มีวิธีกำหนดค่า ดังนั้นเราต้องติดตั้งdnsmasq
ในกรณีนี้สามารถกำหนดค่าได้ตามต้องการ ติดตั้งและกำหนดค่าด้วย (ตัวอย่างใช้ที่อยู่ IP ของคุณเอง):
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 ~$
ในตัวอย่างนี้เป็นที่อยู่ IP 192.168.50.128 ถึง 192.168.50.164 ที่สงวนไว้เพื่อมอบให้กับสถานี สำหรับที่อยู่ IP แบบคงที่อื่นให้ใช้ที่อยู่นอกกลุ่มนี้รวมถึงที่อยู่ IP สำหรับบริดจ์ด้วย
♦การเพิ่มประสิทธิภาพ
เมื่อเริ่มต้นwpa_supplicantคุณส่วนใหญ่ได้รับข้อความนี้ในวารสาร:
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
มันไม่ใช่ปัญหาใหญ่ wpa_supplicantต้องการตัวเลขสุ่มเพื่อสร้างคีย์การเข้ารหัส เสร็จช้านิดหน่อยจึงต้องรอ โชคดีที่ RasPi มีงานสร้างในT rue R andom N umber G enerator (TRNG) เราสามารถใช้มันและเพิ่มความเร็วในการรับหมายเลขสุ่มโดยการติดตั้งซอฟต์แวร์(3)ด้วย:
rpi ~$ sudo apt install rng-tools
UPDATE:
ตั้งแต่Raspbian ยืด 2019/04/08rng-tools
ไม่มีความจำเป็นในการติดตั้ง พวกเขาจะติดตั้งโดยค่าเริ่มต้น
♦การแก้ไขปัญหา
systemd-networkd
ดูสถานะของบริการ:
rpi ~$ systemctl status systemd-networkd.service
rpi ~$ systemctl status wpa_supplicant@wlan0.service
หรือมากกว่านั้น:
rpi ~$ journalctl --boot --pager-end
ฉันพบว่ามีประโยชน์ในการติดตามการบันทึกอย่างต่อเนื่อง:
rpi ~$ journalctl --boot --follow
หากคุณทำไฟล์หล่นคุณสามารถดูผลลัพธ์ได้ที่:
rpi ~$ systemctl cat wpa_supplicant@wlan0.service
ในการตรวจสอบสภาพแวดล้อมรันไทม์ของหน่วยคุณสามารถแสดงและดูว่ามีสองExecStart=
บรรทัดหรือไม่:
rpi ~$ systemctl show wpa_supplicant@wlan0.service
และหากไม่มีสิ่งใดที่ช่วยให้คุณสามารถเปิดใช้งานตัวเลือกการดีบัก/sbin/wpa_supplicant
ด้วย-d
ในไฟล์ดรอปดาวน์:
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
เอาต์พุตอยู่ในเจอร์นัล วิธีนี้ฉันได้พบปัญหากับการเจรจาคีย์ผิด
อินเตอร์เน็ตไร้สาย
หากคุณตั้งค่าจุดเข้าใช้งานคุณควรค้นหาด้วยโทรศัพท์มือถือ แสดงเครือข่ายที่ใช้ได้แสดงชื่อRPiNetและคุณสามารถเชื่อมต่อได้ บน RasPi คุณสามารถใช้คำสั่ง:
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
ตามที่คุณเห็นว่าเป็นประเภท AP (จุดเข้าใช้งาน) และจะแสดงให้คุณเห็นว่าช่องใดที่ใช้งานอยู่ ปัญหาอาจเกิดจากการแปลช่องเป็นความถี่ ความถี่จะต้องตรงกับช่อง คุณสามารถดู(2)สำหรับรายการช่อง WLAN ยกตัวอย่างเช่นการใช้ช่อง 36 ในวง 5.1 GHz คุณจะต้องตั้งอยู่ในfrequency=5180
/etc/wpa_supplicant\wpa_supplicant.conf
แต่คุณต้องแน่ใจว่า WiFi ของคุณรองรับย่านความถี่ 5.1 GHz sudo iw phy
คุณสามารถตรวจสอบกับ สิ่งนี้จะทำให้คุณได้รับข้อมูลมากมาย มันจะต้องมีความถี่ที่รองรับมากกว่า 5,000 MHz หากคุณเห็นความถี่ 24xx MHz แน่นอนคุณสามารถใช้สิ่งนี้ได้เท่านั้น
จุดอื่นอาจเป็นตัวเลขสุ่ม สำหรับการเข้ารหัสคีย์สำหรับการเชื่อมต่อที่ปลอดภัย wpa_supplicant ต้องการตัวเลขสุ่ม การสร้างสิ่งนี้ช้ามากสำหรับ Raspberry Pi หากมีเอนโทรปีไม่เพียงพอที่จะสร้างคีย์เข้ารหัส wpa_supplicant จะปฏิเสธการตรวจสอบสิทธิ์ คุณสามารถดูได้cat /proc/sys/kernel/random/entropy_avail
ว่ามีกี่เอนโทรปี มันควรจะ> 1,000 ในการทำงานเร็วพอ เพื่อเพิ่มความเร็วในการrng-tools
ติดตั้งโดยค่าเริ่มต้น ดูที่ส่วนการปรับให้เหมาะสมสำหรับข้อมูลเพิ่มเติม
การอ้างอิง:
[1] วิธีการโยกย้ายจากระบบเครือข่ายไปยัง systemd-networkd พร้อมด้วย failover แบบไดนามิก
[2] รายการช่อง WLAN
[3] Rng-tools