เครื่องลีนุกซ์สามารถทำหน้าที่เป็นทั้งไคลเอนต์ไร้สายและจุดเชื่อมต่อพร้อมกันโดยใช้อินเตอร์เฟส WLAN แบบฟิสิคัลเดียวได้หรือไม่?


12

หากฉันมีเพียงอินเตอร์เฟซ WLAN ทางกายภาพเพียงหนึ่งเดียวจะมีแฮ็กเกอร์บางตัวที่สามารถทำได้เพื่อให้สามารถเป็นไคลเอนต์ของจุดเชื่อมต่อที่มีอยู่และในเวลาเดียวกันก็ทำหน้าที่เป็นจุดเชื่อมต่อสำหรับไคลเอนต์อื่น ๆ ด้วย

ฉันมีเราเตอร์ ADSL 802.11g ที่มีอยู่และฉันจะสร้าง HTPC ซึ่งจะมี 802.11n แล็ปท็อปของฉันยังมี 802.11n แต่ในตอนนี้มันเชื่อมต่อที่ 54Mbps เท่านั้นเพราะนั่นคือสิ่งที่ AP รองรับ ฉันต้องการให้ HTPC เป็นลูกค้าของเราเตอร์ ADSL ของฉัน แต่ให้แล็ปท็อปของฉันเป็นลูกค้าของ HTPC ดังนั้นการคัดลอกไฟล์ลงในนั้นจะเร็วขึ้น

ไปได้หรือไม่

แก้ไข: เห็นได้ชัดว่าฉันสามารถเชื่อมต่อ HTPC กับเราเตอร์ ADSL โดยใช้อีเธอร์เน็ตและปิดการใช้งาน wifi บนเราเตอร์ แต่ให้เพียงแค่ละเว้นตัวเลือกนั้น :-)

คำตอบ:


9

ฉันไม่ได้ทำสิ่งนี้มาก่อนเป็นการส่วนตัว แต่นี่คือข้อมูลบางอย่างที่จะนำคุณไปในทิศทางที่ถูกต้อง

จากมุมมองของโปรโตคอลเป็นไปได้ที่จะมีวิทยุตัวเดียวทำงานได้ทั้ง AP และ STA ของลูกค้า มันทำงานได้ดีที่สุด (หรืออาจเป็นข้อบังคับเกือบ) ถ้า AP ที่คุณสร้างและที่คุณเข้าร่วมเป็นลูกค้าอยู่ในช่องทางเดียวกัน การมีการ์ดวิทยุจำเป็นต้องเปลี่ยนช่องไปยังคำขอบริการเป็นสูตรสำหรับเฟรมที่หายไปและประสิทธิภาพที่แย่

ซอฟต์แวร์ฉลาดมันเป็นไปได้ ไดรเวอร์การ์ด 802.11 หลายตัวบน Linux สนับสนุนแนวคิดของ VAP (AP เสมือน) ซึ่งอนุญาตให้การ์ดเดี่ยวทำหน้าที่เป็น AP หลายตัว (SSID หลายอันรวมถึง BSSID) ในเวลาเดียวกัน คำตอบ VAP หมายถึงอินเตอร์เฟสเสมือนใด ๆ บนการ์ด 802.11 เดียวกันไม่ว่าอินเทอร์เฟซเสมือนจะอยู่ในโหมด AP หรือไม่ก็ตาม ดังนั้นในการ์ด / ไดรเวอร์คอมโบเหล่านี้คุณสามารถสร้าง VAP สองแบบคือ STA-mode VAP

ไดรเวอร์ MadWifi สำหรับการ์ดที่ใช้ Atheros เป็นการ์ดที่รองรับ VAP หากการ์ด 802.11 ของคุณใช้ชิปเซ็ต Atheros และคุณติดตั้งไดรเวอร์ MadWifi เวอร์ชั่นที่ถูกต้องคุณอาจกำหนดค่าการ์ดของคุณสำหรับโหมด STA + AP พร้อมกันดังนี้:

wlanconfig ath0 create wlandev wifi0 wlanmode sta
wlanconfig ath1 create wlandev wifi0 wlanmode ap

โปรดทราบว่าคำแนะนำเหล่านี้ไม่สมบูรณ์สำหรับการตั้งค่าทุกอย่าง แต่เป็นเพียงความพยายามในการเริ่มต้นให้คุณ

คุณอาจต้องการ Google เพื่อรับข้อมูลเพิ่มเติมเช่น " wifi vap " ผมคัดลอกคำสั่งดังกล่าวจากที่นี่

โอ้และตำนานบางอย่างที่กำลังสับสน: การ์ด Atheros ไม่ใช่เรื่องแปลกในเครื่องจักรของผู้บริโภค พวกเขาเป็นผู้เล่นที่สำคัญในชิปเซ็ต 802.11 พร้อมกับ Broadcom, Marvell, Intel และ Ralink และเพียงเพราะฉันใช้ตัวอย่างของ MadWifi / Atheros ไม่ได้หมายความว่าไม่มีไดรเวอร์ Linux สำหรับชิปผู้เล่นรายใหญ่อื่น ๆ ที่สามารถทำสิ่งเดียวกัน นอกจากนี้ 802.11s ไม่จำเป็นสำหรับสิ่งนี้ การพูดว่าคุณต้องทำ 802.11s เพื่อทำสิ่งนี้เหมือนกับว่าคุณต้องสนับสนุน Spanning Tree Protocol เพียงเพื่อส่งต่อเฟรมจากอินเตอร์เฟสหนึ่งไปยังอีกอินเตอร์เฟสหนึ่ง


ดูเหมือนว่ากระดานที่ฉันได้รับจะมีชิปเซ็ต Atheros ดังนั้นฉันอาจจะโชคดี ฉันรอส่งส่วนประกอบของฉันจากนั้นฉันสามารถสร้างและทดสอบ
ThatGraemeGuy

ฉันยังไม่ได้มีโอกาสเล่นกับ MadWifi ฉันยอมรับเพราะคำตอบนั้นถูกต้องดูเหมือนว่าจะไม่มีชิปเซ็ต / ตระกูลอื่น ๆ ที่มีฟังก์ชั่นนี้
ThatGraemeGuy

Spiff ฉันได้ทำงานกับชิป Atheros และ madwifi และฉันกำลังพยายามตั้งค่า VAPs หนึ่งใน sta และหนึ่งใน ap ฉันสามารถตั้งค่า VAP หลายตัวในโหมด ap แต่เมื่อฉันตั้งค่า VAP แรกใน sta แล้วลองตั้งค่า VAP อื่นใน ap ฉันได้รับ wlanconfig: ioctl: ข้อผิดพลาดอินพุต / เอาต์พุต คุณมีความคิดว่าจะจัดการกับเรื่องนี้อย่างไร?
sachinr

1
@sachinr ถามว่าเป็นคำถามเพื่อให้ทุกคนเห็นมันไม่ได้เป็นเพียงความเห็นในสามปีตอบคำถามของคนอื่น
Spiff

เฮ้ฉันเพิ่มคำถามของฉันที่นี่ - superuser.com/questions/649742/... คุณได้ดูไหม ขอบคุณ :)
sachinr

4

ไดรเวอร์ nl80211 มีสิ่งที่เรียกว่าโหมด "จัดการ" อินเตอร์เฟส คุณสามารถกำหนดค่าโดยใช้ยูทิลิตี้ "iw" ดังนี้:

อินเทอร์เฟซ iw phy phy0 เพิ่มประเภทการจัดการ wlan1

ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้สามารถใช้ได้ที่https://wireless.wiki.kernel.org/en/users/documentation/iw Phy0 หมายถึงสิ่งที่คุณเห็นใน / sys / class / ieee80211 /

ฉันเคยเห็น rPI3 ทำสิ่งที่คล้ายกัน แต่ด้วยโหมดอินเตอร์เฟซ "__ap" ที่ดูร่มรื่นกว่า วิธีนั้นผู้ใช้จะสร้างส่วนต่อประสานที่สองที่ทำงานในโหมด AP เท่านั้นและใช้ส่วนต่อประสานเริ่มต้นเป็นโหมดไคลเอนต์

ไม่ว่าคุณจะรับรู้ได้อย่างไร (ไดรเวอร์ต้องสนับสนุนแน่นอน) คุณจะต้องมีสองอินเตอร์เฟส (จากอุปกรณ์ทางกายภาพเดียวกัน) หนึ่งอินเตอร์เฟสสามารถรัน wpa_supplicant เป็นโหมดไคลเอนต์อื่น ๆ (โหมด AP) โดยทั่วไปจะใช้ hostapd เพื่อเล่นจุดเชื่อมต่อ

[แก้ไข:]

ซอร์สโค้ดของเครื่องมือ iw ทำให้ชัดเจนเกี่ยวกับโหมด __ap ที่ร่มรื่น:

..
} else if (strcmp(tpstr, "__ap") == 0) {
    *type = NL80211_IFTYPE_AP;
    return 0;
} else if (strcmp(tpstr, "__ap_vlan") == 0) {
    *type = NL80211_IFTYPE_AP_VLAN;
    return 0;
} else if (strcmp(tpstr, "wds") == 0) {
    *type = NL80211_IFTYPE_WDS;
    return 0;
} else if (strcmp(tpstr, "managed") == 0 ||
       strcmp(tpstr, "mgd") == 0 ||
       strcmp(tpstr, "station") == 0) {
    *type = NL80211_IFTYPE_STATION;
    return 0;
} 
..

โหมด __ap แปลเป็นประเภท netlink NL80211_IFTYPE_AP ฉันทดสอบสิ่งนี้ด้วยและก็ใช้ได้ดี แปลกที่วิกิเอกสารของเคอร์เนลไม่ได้ทำตามคำแนะนำ


4

แหล่งที่มาและข้อมูลเพิ่มเติม:

https://wiki.archlinux.org/index.php/Software_access_point

คำตอบสั้น ๆ

sudo iw dev wlan0 interface add wlan0_ap type managed
sudo create_ap wlan0_ap wlan0 createap mypassword

อุปกรณ์ Wi-Fi ต้องรองรับโหมด AP

คุณต้องมีอุปกรณ์ไร้สายที่รองรับ nl80211 ซึ่งรองรับโหมดปฏิบัติการ AP สิ่งนี้สามารถตรวจสอบได้โดยการรันคำสั่ง iw list ภายใต้บล็อคโหมดส่วนต่อประสานที่รองรับควรแสดง AP ไว้

...
    Supported interface modes:
         * IBSS
         * managed
         * AP
         * AP/VLAN
         * WDS
         * monitor
         * mesh point
...

AP ไคลเอนต์แบบไร้สายและซอฟต์แวร์ด้วยอุปกรณ์ Wi-Fi เดียว

การสร้างซอฟต์แวร์ AP นั้นไม่ขึ้นอยู่กับการเชื่อมต่อเครือข่ายของคุณ (Ethernet, wireless, ... ) อุปกรณ์ไร้สายจำนวนมากสนับสนุนการทำงานพร้อมกันทั้ง AP และไคลเอนต์ไร้สายในเวลาเดียวกัน การใช้ความสามารถนั้นคุณสามารถสร้างซอฟต์แวร์ AP ที่ทำหน้าที่เป็น "repeater ไร้สาย" สำหรับเครือข่ายที่มีอยู่โดยใช้อุปกรณ์ไร้สายเดียว ความสามารถแสดงอยู่ในส่วนต่อไปนี้ในผลลัพธ์ของรายการ iw:

การรวมอินเตอร์เฟซที่ถูกต้อง:

$ iw list
...
valid interface combinations:
     * #{ managed } <= 1, #{ AP, P2P-client, P2P-GO } <= 1, #{ P2P-device } <= 1,
       total <= 3, #channels <= 2
...

ข้อ จำกัด #channels <= 1 หมายความว่าซอฟต์แวร์ AP ของคุณต้องทำงานบนช่องทางเดียวกับการเชื่อมต่อไคลเอนต์ Wi-Fi ของคุณ ดูการตั้งค่าช่องใน hostapd.conf ด้านล่าง

หากคุณต้องการใช้ความสามารถ / คุณสมบัติอาจเนื่องมาจากการเชื่อมต่ออีเทอร์เน็ตไม่พร้อมใช้งานคุณต้องสร้างอินเตอร์เฟสเสมือนแยกกันสองตัวเพื่อใช้งาน อินเตอร์เฟสเสมือนสำหรับอุปกรณ์ฟิสิคัล wlan0 สามารถสร้างได้ดังต่อไปนี้: อินเตอร์เฟสเสมือนที่มี MAC address เฉพาะถูกสร้างขึ้นสำหรับการเชื่อมต่อเครือข่าย (wlan0_sta) และสำหรับซอฟต์แวร์ AP / hostapd "wireless repeater":

# iw dev wlan0 interface add wlan0_sta type managed 
# iw dev wlan0 interface add wlan0_ap  type managed

องค์ประกอบ

การตั้งค่าจุดเชื่อมต่อประกอบด้วยสองส่วนหลัก:

  1. การตั้งค่าเลเยอร์ลิงค์ Wi-Fi เพื่อให้ไคลเอนต์ไร้สายสามารถเชื่อมโยงกับจุดเชื่อมต่อซอฟต์แวร์ของคอมพิวเตอร์ของคุณและแลกเปลี่ยนแพ็คเก็ต IP กับมัน
  2. การตั้งค่าการกำหนดค่าเครือข่ายบนคอมพิวเตอร์ของคุณเพื่อให้สามารถถ่ายทอดแพ็กเก็ต IP ได้อย่างเหมาะสมระหว่างการเชื่อมต่ออินเทอร์เน็ตของตัวเองและไคลเอนต์ไร้สาย

เครื่องมือ

create_ap

แพ็คเกจ create_ap จัดเตรียมสคริปต์ที่สามารถสร้างบริดจ์หรือจุดเชื่อมต่อ NATed สำหรับการแบ่งปันอินเทอร์เน็ต มันรวม hostapd, dnsmasq และ iptables สำหรับการทำงานที่ดีของจุดเชื่อมต่อ ไวยากรณ์พื้นฐานในการสร้างเครือข่ายเสมือน NATed มีดังต่อไปนี้:

# create_ap wlan0 eth0 MyAccessPoint MyPassPhrase

คำตอบที่ดีขอบคุณ!
Iman Akbari

ฉันสองว่านี่คือคำตอบที่ดีโดยเฉพาะเล็กน้อยเกี่ยวกับข้อ จำกัด ของช่อง
crazystick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.