Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
esp_wifi_repeater — एक पूर्ण कार्यात्मक WiFi NAT राउटर (और अब एक WiFi रिपीटर भी) | Kitploit
उपकरण/GitHubGitHub/martin-ger/esp_wifi_repeater
एम्बेडेड सिस्टम सुरक्षापैकेट स्निफिंग और विश्लेषणवाई-फाई ऑडिटिंगIoT सुरक्षानेटवर्क सुरक्षावायरलेस सुरक्षाहार्डवेयर और IoT सुरक्षाDNS विश्लेषण
GitHubmartin-ger/esp_wifi_repeater

esp_wifi_repeater

एक पूर्ण कार्यात्मक WiFi NAT राउटर (और अब एक WiFi रिपीटर भी)

रिपॉजिटरी देखें
5.2k9812 महीने पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

esp_wifi_repeater

एक पूर्ण कार्यशील WiFi NAT राउटर (और अब एक WiFi रिपीटर यानी L2 ब्रिज भी)

NEW 2026: पहले रिलीज़ के 10 साल बाद यह आखिरकार वही बन गया है, जो इसे हमेशा होना था: एक सच्चा WiFi रिपीटर। मौजूदा डॉक्स और लिंक्स को तोड़ने से बचने के लिए, मानक संस्करण अभी भी सभी उन्नत सुविधाओं के साथ प्रसिद्ध NAT राउटर संस्करण ही है। लेकिन अगर आप एक हल्के (stripped down) वास्तविक L2 ब्रिज में रुचि रखते हैं, तो नीचे ESP8266 WiFi Repeater - L2 bridge अनुभाग देखें।

यह esp8266 और esp8285 पर WiFi NAT राउटर का एक कार्यान्वयन है। इसमें ACLs के साथ पैकेट फ़िल्टरिंग फ़ायरवॉल, पोर्ट मैपिंग, ट्रैफ़िक शेपिंग, रिमोट मॉनिटरिंग (या पैकेट स्निफिंग) के लिए हुक, एक MQTT प्रबंधन इंटरफ़ेस, सरल GPIO इंटरैक्शन और पावर प्रबंधन के लिए समर्थन भी शामिल है। एक बड़े क्षेत्र को कवर करने के लिए मेश में कई राउटरों के सेटअप के लिए एक नया मोड "Automesh" शामिल किया गया है।

अगर आप अपने Arduino प्रोजेक्ट में NAT सुविधा को एकीकृत करने का तरीका ढूंढ रहे हैं - यहाँ देखें।

EPS32 NAT Router ESP32 के लिए उन्नत प्रोजेक्ट है।

विशिष्ट उपयोग परिदृश्यों में शामिल हैं:

  • मौजूदा WiFi नेटवर्क के लिए सरल रेंज एक्सटेंडर
  • बैटरी से चलने वाले आउटडोर (मेश) नेटवर्क
  • मेहमानों के लिए अलग SSID/पासवर्ड के साथ अतिरिक्त WiFi नेटवर्क स्थापित करना
  • IoT उपकरणों के लिए एक सुरक्षित और प्रतिबंधित नेटवर्क स्थापित करना
  • WPA2 Enterprise नेटवर्क को WPA-PSK में परिवर्तित करना
  • WiFi ट्रैफ़िक विश्लेषण के लिए मॉनिटर प्रोब
  • रूट्स, ACLs और ट्रैफ़िक शेपिंग के साथ नेटवर्क प्रयोग
  • बुनियादी I/O क्षमताओं और MQTT नियंत्रण वाला मेश IoT डिवाइस

डिफ़ॉल्ट रूप से, ESP STA और soft-AP दोनों के रूप में कार्य करता है और किसी भी IP ट्रैफ़िक को पारदर्शी रूप से आगे भेजता है। चूँकि यह NAT का उपयोग करता है, नेटवर्क की ओर या कनेक्टेड स्टेशनों पर कोई रूटिंग प्रविष्टियाँ आवश्यक नहीं हैं। स्टेशन डिफ़ॉल्ट रूप से DHCP के माध्यम से 192.168.4.0/24 नेट में कॉन्फ़िगर किए जाते हैं और अपना DNS रिस्पॉन्डर पता मौजूदा WiFi नेटवर्क से प्राप्त करते हैं।

मापों से पता चलता है कि यह दोनों दिशाओं में लगभग 5 Mbps प्राप्त कर सकता है, इसलिए स्ट्रीमिंग भी संभव है।

कुछ विवरण इस वीडियो में समझाए गए हैं।

Web Installer

डिवाइस पर सीधे फ्लैश करने के लिए Web-Installer का उपयोग करें।

पहला बूट

esp_wifi_repeater निम्नलिखित डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ शुरू होता है:

  • ap_ssid: MyAP, ap_password: none, ap_on: 1, ap_open: 1
  • network: 192.168.4.0/24

पहले बूट (या फ़ैक्टरी रीसेट) के बाद यह एक खुले AP के साथ एक WiFi नेटवर्क और ssid "MyAP" प्रदान करेगा। यह अभी तक किसी अपलिंक AP से स्वचालित रूप से पुनः कनेक्ट करने का प्रयास नहीं करता है (क्योंकि यह एक मान्य ssid या पासवर्ड नहीं जानता है)।

इस WiFi नेटवर्क से कनेक्ट करें और बुनियादी कॉन्फ़िगरेशन या तो एक सरल वेब इंटरफ़ेस के माध्यम से या कंसोल के माध्यम से सभी विकल्पों के साथ पूर्ण कॉन्फ़िगरेशन करें।

बेसिक वेब कॉन्फ़िग इंटरफ़ेस

वेब इंटरफ़ेस बुनियादी फ़ॉरवर्डिंग कार्यक्षमता के लिए आवश्यक सभी मापदंडों के कॉन्फ़िगरेशन की अनुमति देता है। उस पर प्रमुख काम के लिए rubfi को धन्यवाद: https://github.com/rubfi/esp_wifi_repeater/ । अपना ब्राउज़र "http://192.168.4.1" पर इंगित करें। यह पृष्ठ दिखना चाहिए:

पहले अपलिंक WiFi नेटवर्क, "STA Settings" के लिए उपयुक्त मान दर्ज करें। खुले नेटवर्क के लिए पासवर्ड "none" का उपयोग करें। "Automesh" बॉक्स को तभी चेक करें जब आप वास्तव में automesh मोड का उपयोग करना चाहते हैं। "Connect" पर क्लिक करें। ESP रिबूट होता है और आपके WiFi राउटर से कनेक्ट होगा। कुछ सेकंड के बाद स्टेटस LED ब्लिंक करनी चाहिए।

यदि आपने automesh चुना है, तो आपका कॉन्फ़िगरेशन पूरा हो गया है। "Soft AP Settings" कॉन्फ़िगर करना आवश्यक नहीं है क्योंकि automesh मोड में ये सेटिंग्स "STA Settings" के समान होती हैं। वही ssid सभी कनेक्टेड ESP रिपीटर्स द्वारा प्रदान किया जाएगा।

यदि आप automesh का उपयोग नहीं कर रहे हैं, तो अब आप पृष्ठ को पुनः लोड कर सकते हैं और "Soft AP Settings" बदल सकते हैं। "Set" पर क्लिक करें और ESP फिर से रिबूट होता है। अब यह नव कॉन्फ़िगर किए गए Soft AP पर ट्रैफ़िक फ़ॉरवर्ड करने के लिए तैयार है। ध्यान रखें कि ये परिवर्तन कॉन्फ़िग इंटरफ़ेस को भी प्रभावित करते हैं, अर्थात आगे कॉन्फ़िगरेशन करने के लिए, नए कॉन्फ़िगर किए गए WiFi नेटवर्क में से किसी एक के माध्यम से ESP से कनेक्ट करें। Soft AP के माध्यम से पहुँच के लिए, यदि आपने इसे बदला है तो Soft APs नेटवर्क का पता याद रखें (इस नेटवर्क में ESP का पता हमेशा x.x.x.1 होता है)।

यदि आप चाहें, तो आप "lock" चेकबॉक्स को चिह्नित कर सकते हैं और "Lock" पर क्लिक कर सकते हैं। अब कॉन्फ़िगरेशन को बिना पहले अपलिंक WiFi नेटवर्क के पासवर्ड से अनलॉक किए बदला नहीं जा सकता (भले ही नेटवर्क खुला हो, एक परिभाषित करें)।

यदि आप वेब इंटरफ़ेस में गैर-ASCII या विशेष वर्ण दर्ज करना चाहते हैं, तो आपको HTTP-शैली हेक्स एन्कोडिंग का उपयोग करना होगा जैसे "My%20AccessPoint"। इसका परिणाम स्ट्रिंग "My AccessPoint" होगा। इस हेक्स एन्कोडिंग के साथ आप अपनी पसंद का कोई भी बाइट मान दर्ज कर सकते हैं, सिवाय 0 के (C-आंतरिक कारणों से)।

यदि आपने कोई गलती की है और ESP से सारा संपर्क खो दिया है, तो भी आप इसे पुनर्प्राप्त करने के लिए सीरियल कंसोल का उपयोग कर सकते हैं ("reset factory", नीचे देखें)।

कमांड लाइन इंटरफ़ेस

उन्नत कॉन्फ़िगरेशन कंसोल इंटरफ़ेस पर कमांड लाइन के माध्यम से करना पड़ता है। यह कंसोल या तो 115200 बॉड पर सीरियल पोर्ट के माध्यम से या tcp पोर्ट 7777 के माध्यम से उपलब्ध है (जैसे कनेक्टेड STA से "telnet 192.168.4.1 7777")।

प्रारंभिक सेटअप के लिए निम्नलिखित कमांड का उपयोग करें:

  • set ssid your_home_router's_SSID
  • set password your_home_router's_password
  • set ap_ssid ESP's_ssid
  • set ap_password ESP's_password
  • show (मापदंडों की जाँच करने के लिए)
  • save
  • reset

फिर से, यदि आप गैर-ASCII या विशेष वर्ण दर्ज करना चाहते हैं, तो आप HTTP-शैली हेक्स एन्कोडिंग (जैसे "My%20AccessPoint") या, केवल CLI पर, शॉर्टकट के रूप में C-शैली के उद्धरण बैकस्लैश के साथ (जैसे "My\ AccessPoint") का उपयोग कर सकते हैं। दोनों विधियों का परिणाम स्ट्रिंग "My AccessPoint" होगा।

कमांड लाइन बहुत अधिक कमांड समझती है:

बुनियादी कमांड

लगभग सभी वातावरणों में इसे काम करवाने के लिए पर्याप्त।

  • help: एक संक्षिप्त सहायता संदेश प्रिंट करता है
  • set [ssid|password] value: अपलिंक AP की सेटिंग्स बदलता है (आपके होम-राउटर की WiFi कॉन्फ़िग), खुले नेटवर्क के लिए पासवर्ड "none" का उपयोग करें।
  • set [ap_ssid|ap_password] value: ESP के soft-AP की सेटिंग्स बदलता है (आपके स्टेशनों के लिए)
  • show [config|stats]: वर्तमान कॉन्फ़िग या कुछ स्थिति जानकारी और आँकड़े प्रिंट करता है
  • save [dhcp]: वर्तमान कॉन्फ़िग पैरामीटर, ACLs और रूटिंग प्रविष्टियों [+ वर्तमान DHCP लीज़] को फ्लैश में सहेजता है
  • lock [password]: वर्तमान कॉन्फ़िग को सहेजता और लॉक करता है, परिवर्तनों की अनुमति नहीं है। यदि पहले से सेट है तो पासवर्ड खाली छोड़ा जा सकता है (डिफ़ॉल्ट अपलिंक WiFi का पासवर्ड है)
  • unlock password: कॉन्फ़िग को अनलॉक करता है, lock कमांड से पासवर्ड की आवश्यकता होती है
  • reset [factory]: esp को रीसेट करता है, 'factory' वैकल्पिक रूप से WiFi पैरामीटर को डिफ़ॉल्ट मानों पर रीसेट करता है (लॉक किए गए डिवाइस पर केवल सीरियल कंसोल से काम करता है)
  • quit: एक रिमोट सत्र समाप्त करता है

उन्नत कमांड

अधिकांश set-कमांड केवल save और reset के बाद प्रभावी होते हैं।

कमांड लाइन इनपुट का एकल "#" के बाद पंक्ति के अंत तक का कोई भी भाग एक टिप्पणी के रूप में माना जाएगा और अनदेखा किया जाएगा।

Automesh कॉन्फ़िग

  • set automesh [0|1]: चुनता है कि automesh मोड चालू है या बंद (डिफ़ॉल्ट), विवरण यहाँ देखें https://github.com/martin-ger/esp_wifi_repeater#automesh-mode
  • set am_threshold dB: "खराब" कनेक्शन की सीमा निर्धारित करता है (नकारात्मक dB में, डिफ़ॉल्ट 85, यानी -85 dB)
  • set am_scan_time secs: सेकंड में समय अंतराल निर्धारित करता है जो ESP automesh मोड में सोने से पहले अपलिंक AP खोजने का प्रयास करता है (0 अक्षम, डिफ़ॉल्ट)
  • set am_sleep_time secs: सेकंड में समय अंतराल निर्धारित करता है जो ESP automesh मोड में सोता है यदि कोई अपलिंक AP नहीं मिलता है (0 अक्षम, डिफ़ॉल्ट)

WiFi कॉन्फ़िग

  • set ap_on [0|1]: चुनता है कि soft-AP अक्षम है (ap_on=0) या सक्षम है (ap_on=1, डिफ़ॉल्ट)
  • set ap_open [0|1]: चुनता है कि soft-AP WPA2-PSK सुरक्षा का उपयोग करता है (ap_open=0, स्वचालित, यदि ap_password सेट है) या खुला (ap_open=1)
  • set auto_connect [0|1]: चुनता है कि STA AP से पुनः कनेक्ट करने का प्रयास जारी रखे या नहीं। auto_connect पहली फ्लैशिंग के बाद या "reset factory" के बाद बंद (0) होता है। जब आप एक नया SSID दर्ज करते हैं तो यह स्वचालित रूप से चालू (1) हो जाता है।
  • set ssid_hidden [0|1]: चुनता है कि soft-AP का SSID छिपा है (ssid_hidden=1) या दृश्यमान (ssid_hidden=0, डिफ़ॉल्ट)
  • set phy_mode [1|2|3]: WiFi के PHY_MODE को सेट करता है (1=b, 2=g, 3=n(डिफ़ॉल्ट))
  • set country CC: WiFi विनियामक देश कोड को 2-अक्षर वाले ISO 3166-1 कोड के रूप में सेट करता है (जैसे "US", "DE", "CN", "JP")। गैर-US कोड चैनल 12 और 13 को अनलॉक करते हैं। खाली (डिफ़ॉल्ट) SDK डिफ़ॉल्ट को अपरिवर्तित छोड़ देता है। सेटिंग फ्लैश में सहेजी जाती है और हर बूट पर पुनः लागू होती है।
  • set bssid xx:xx:xx:xx:xx:xx: कनेक्ट करने के लिए अपलिंक AP का विशिष्ट BSSID सेट करता है (डिफ़ॉल्ट 00:00:00:00:00:00 जिसका अर्थ कोई भी है)
  • set [ap_mac|sta_mac] xx:xx:xx:xx:xx:xx: STA और SOFTAP का MAC पता उपयोगकर्ता-परिभाषित मान पर सेट करता है (MAC पते के पहले बाइट का बिट 0 1 नहीं हो सकता)
  • set sta_mac random: प्रत्येक रिबूट के बाद एक नया यादृच्छिक STA MAC सेट करें
  • set sta_hostname name: STA का नाम सेट करता है (अपलिंक AP को दृश्यमान)
  • set max_clients [1-8]: उन STAs की संख्या सेट करता है जो SoftAP से कनेक्ट हो सकते हैं (ESP के SoftAP कार्यान्वयन की सीमा 8 है, डिफ़ॉल्ट)
  • scan: APs के लिए स्कैन करता है
  • connect: वर्तमान में कॉन्फ़िगर किए गए ssid और password के साथ किसी AP से कनेक्ट करने का प्रयास करता है
  • disconnect: किसी भी अपलिंक AP से डिस्कनेक्ट करता है

WPA2 Enterprise कॉन्फ़िग

  • set use_peap[0|1]: चुनता है कि STA सरल WPA-PSK (use_peap=0, डिफ़ॉल्ट) या WPA2 Enterprise (PEAP) के माध्यम से कनेक्ट हो
  • set peap_identity value: PEAP 'बाहरी' पहचान सेट करता है (RADIUS सर्वर को पहले प्रस्तुत की जाने वाली स्ट्रिंग, शायद [email protected])
  • peap_username value: PEAP उपयोगकर्ता नाम सेट करता है
  • peap_password value: PEAP पासवर्ड सेट करता है

TCP/IP कॉन्फ़िग

  • set network ip-addr: आंतरिक नेटवर्क का IP पता सेट करता है, नेटवर्क हमेशा /24 होता है, राउटर हमेशा x.x.x.1 होता है
  • set dns dns-addr: एक स्थिर DNS पता सेट करता है जो DHCP के माध्यम से क्लाइंट्स को वितरित किया जाता है
  • set dns dhcp: DHCP से गतिशील DNS पते के उपयोग को कॉन्फ़िगर करता है, डिफ़ॉल्ट
  • set ip ip-addr: STA इंटरफ़ेस के लिए एक स्थिर IP पता सेट करता है
  • set ip dhcp: STA इंटरफ़ेस के लिए गतिशील IP पता कॉन्फ़िगर करता है, डिफ़ॉल्ट
  • set netmask netmask: STA इंटरफ़ेस के लिए एक स्थिर नेटमास्क सेट करता है
  • set gw gw-addr: STA इंटरफ़ेस के लिए एक स्थिर गेटवे पता सेट करता है
  • set max_nat no_of_entries: NAPT तालिका का आकार सेट करता है (डिफ़ॉल्ट 512)
  • set max_portmap no_of_entries: पोर्टमैप तालिका का आकार सेट करता है (डिफ़ॉल्ट 32)
  • set tcp_timeout secs: TCP कनेक्शनों के लिए NAPT टाइमआउट सेट करता है (0=डिफ़ॉल्ट (1800 सेकंड))
  • set udp_timeout secs: UDP कनेक्शनों के लिए NAPT टाइमआउट सेट करता है (0=डिफ़ॉल्ट (2 सेकंड))
  • set lease min: आंतरिक नेटवर्क DHCP सर्वर के लिए लीज़ समय मिनटों में सेट करता है (डिफ़ॉल्ट 120)
  • show dhcp: dhcp लीज़ तालिका की वर्तमान स्थिति प्रिंट करता है

रूटिंग

  • show route: वर्तमान रूटिंग तालिका प्रदर्शित करता है
  • route clear: सभी स्थिर रूट साफ़ करता है
  • route add network gw: गेटवे gw के माध्यम से एक नेटवर्क के लिए एक स्थिर रूट जोड़ता है (नेटवर्क CIDR नोटेशन ('x.x.x.x/n') में दिया गया है)
  • route delete network: एक नेटवर्क के लिए एक स्थिर रूट हटाता है
  • interface inX [up|down]: इंटरफ़ेस स्थिति को up या down सेट करता है (down इंटरफ़ेस के माध्यम से कोई IP रूटिंग/ट्रैफ़िक नहीं, डिफ़ॉल्ट: up)
  • set nat [0|1]: चुनता है कि soft-AP इंटरफ़ेस NATed है (nat=1, डिफ़ॉल्ट) या नहीं (nat=0)। NAT के बिना आंतरिक STAs से ट्रैफ़िक का पारदर्शी फ़ॉरवर्डिंग काम नहीं करता! मुख्य रूप से स्थिर रूटिंग के संयोजन में उपयोगी।
  • portmap add [TCP|UDP] external_port internal_ip internal_port: एक पोर्ट फ़ॉरवर्डिंग जोड़ता है
  • portmap remove [TCP|UDP] external_port: एक पोर्ट फ़ॉरवर्डिंग हटाता है
  • nslookup name: दिए गए नाम के लिए DNS लुकअप शुरू करता है और परिणाम प्रदर्शित करता है
  • ping host: ICMP इको अनुरोध/उत्तर के साथ IP कनेक्टिविटी की जाँच करता है (होस्ट IP पते या DNS नाम के रूप में)

फ़ायरवॉल/मॉनिटर कॉन्फ़िग

  • acl [from_sta|to_sta|from_ap|to_ap] [TCP|UDP|IP] src-ip [src_port] desr-ip [dest_port] [allow|deny|allow_monitor|deny_monitor]: ACL में एक नया नियम जोड़ता है
  • acl [from_sta|to_sta|from_ap|to_ap] clear: पूरी ACL साफ़ करता है
  • show acl: परिभाषित ACLs और कुछ आँकड़े दिखाता है
  • set acl_debug [0|1]: ACL डीबग आउटपुट चालू/बंद करता है - सभी अस्वीकृत पैकेट टर्मिनल पर लॉग होंगे
  • set [upstream_kbps|downstream_kbps] bitrate: अधिकतम अपस्ट्रीम/डाउनस्ट्रीम बिटरेट सेट करता है (0 = कोई सीमा नहीं, डिफ़ॉल्ट)
  • set daily_limit limit_in_KB: किलोबाइट की अधिकतम मात्रा परिभाषित करता है जो STAs द्वारा प्रति दिन स्थानांतरित की जा सकती है (0 = कोई सीमा नहीं, डिफ़ॉल्ट)
  • set timezone hours_offset: स्थानीय समय क्षेत्र परिभाषित करता है (यह जानने के लिए आवश्यक है कि दिन कब 00:00 बजे समाप्त होता है)
  • monitor [on|off|acl] port: दिए गए पोर्ट पर मॉनिटर सर्वर शुरू और बंद करता है

उपयोगकर्ता इंटरफ़ेस कॉन्फ़िग

  • set config_port portno: कंसोल लॉगिन का पोर्ट नंबर सेट करता है (डिफ़ॉल्ट 7777 है, 0 रिमोट कंसोल कॉन्फ़िग अक्षम करता है)
  • set web_port portno: वेब कॉन्फ़िग सर्वर का पोर्ट नंबर सेट करता है (डिफ़ॉल्ट 80 है, 0 वेब कॉन्फ़िग अक्षम करता है)
  • set config_access mode: उन नेटवर्कों को नियंत्रित करता है जो कंसोल और वेब के लिए कॉन्फ़िग एक्सेस की अनुमति देते हैं (0: कोई एक्सेस नहीं, 1: केवल आंतरिक, 2: केवल बाहरी, 3: दोनों (डिफ़ॉल्ट))

GPIO कॉन्फ़िग

  • show gpio: gpio कॉन्फ़िगरेशन प्रदर्शित करता है
  • gpio [0-16] mode [in|in_pullup|out]: ESP के GPIO पोर्ट को कॉन्फ़िगर करता है (फ्लैश में सहेजा जाता है)
  • gpio [0-16] set [high|low]: एक आउटपुट पोर्ट पर लिखता है
  • gpio [0-16] set [high|low] for seconds: एक आउटपुट पोर्ट पर लिखता है और एक निश्चित अवधि के बाद वापस कर देता है
  • gpio [0-16] get: एक इनपुट पोर्ट से पढ़ता है
  • gpio [0-16] trigger [0-16] [monostable_NO|monostable_NC|bistable_NO|bistable_NC]: एक इनपुट पोर्ट को आउटपुट पोर्ट से जोड़ता है, या तो मोनोस्टेबल सामान्य रूप से खुला (स्टेट लो में बदलने पर पुशबटन ट्रिगर), मोनोस्टेबल सामान्य रूप से बंद (स्टेट हाई में बदलने पर पुशबटन ट्रिगर), बिस्टेबल सामान्य रूप से खुला (इनपुट की नकल करने वाला स्विच), या बिस्टेबल सामान्य रूप से बंद (स्विच जिसकी स्थिति इनपुट के विपरीत है)
  • gpio [0-16] trigger none: लिंक साफ़ करता है

चिप कॉन्फ़िग

  • set speed [80|160]: CPU क्लॉक आवृत्ति सेट करता है (डिफ़ॉल्ट 160 Mhz)
  • sleep seconds: ESP को निर्दिष्ट सेकंड के लिए डीप स्लीप में डालता है। 1 से 4294 के बीच मान्य मान (लगभग 71 मिनट)
  • set status_led GPIOno: स्टेटस LED के लिए एक GPIO पिन चुनता है (डिफ़ॉल्ट 2, >16 अक्षम)
  • set hw_reset GPIOno: हार्डवेयर फ़ैक्टरी रीसेट के लिए एक GPIO पिन चुनता है (>16 अक्षम, डिफ़ॉल्ट)
  • set ap_watchdog secs: AP वॉचडॉग टाइमआउट सेट करता है - यदि अपलिंक AP से secs तक कोई पैकेट प्राप्त नहीं होता है तो रिपीटर रीसेट हो जाता है ("none" = कोई टाइमआउट नहीं, डिफ़ॉल्ट)
  • set client_watchdog secs: क्लाइंट वॉचडॉग टाइमआउट सेट करता है - यदि किसी कनेक्टेड क्लाइंट से secs तक कोई पैकेट प्राप्त नहीं होता है तो रिपीटर रीसेट हो जाता है ("none" = कोई टाइमआउट नहीं, डिफ़ॉल्ट)
  • set vmin voltage: mV में न्यूनतम बैटरी वोल्टेज सेट करता है। यदि Vdd इससे नीचे गिरता है, तो ESP डीप स्लीप में चला जाता है। यदि 0 है, तो कुछ नहीं होता
  • set vmin_sleep secs: सेकंड में समय अंतराल सेट करता है जो ESP कम वोल्टेज पर सोता है

स्टेटस LED

डिफ़ॉल्ट कॉन्फ़िग में GPIO2 निम्नलिखित संकेतों के साथ एक स्टेटस LED (GND से जुड़ा) चलाने के लिए कॉन्फ़िगर किया गया है:

  • स्थायी रूप से चालू: शुरू हुआ, लेकिन AP से सफलतापूर्वक कनेक्ट नहीं हुआ (कोई मान्य बाहरी IP नहीं)
  • फ्लैशिंग (प्रति सेकंड 1 बार): काम कर रहा है, AP से कनेक्टेड
  • अनियत रूप से फ्लैशिंग: काम कर रहा है, आंतरिक नेटवर्क में ट्रैफ़िक

"set status_led GPIOno" के साथ GPIO पिन बदला जा सकता है (16 से अधिक कोई भी मान, जैसे "set status_led 255" स्टेटस LED को पूरी तरह से अक्षम कर देगा)। GPIO1 पर कॉन्फ़िगर होने पर, यह ESP-01 बोर्डों पर अंतर्निहित नीली LED के साथ काम करता है। हालाँकि, चूँकि GPIO1 UART-TX-पिन भी है, इसका मतलब है कि सीरियल कंसोल काम नहीं कर रहा है। कॉन्फ़िगरेशन तब नेटवर्क एक्सेस तक सीमित है।

HW फ़ैक्टरी रीसेट

यदि आप किसी चयनित GPIO को 3 सेकंड से अधिक समय तक लो खींचते हैं, तो रिपीटर फ़ैक्टरी रीसेट करेगा और डिफ़ॉल्ट कॉन्फ़िग के साथ पुनरारंभ होगा। "set hw_reset GPIOno" के साथ GPIO पिन बदला जा सकता है (16 से अधिक कोई भी मान, जैसे "set hw_reset 255" hw फ़ैक्टरी रीसेट सुविधा को अक्षम कर देगा)।

कई मॉड्यूलों के लिए, जिनमें ESP-01s और NodeMCUs शामिल हैं, इसके लिए GPIO 0 का उपयोग करना शायद एक अच्छा विचार है, क्योंकि इसका उपयोग वैसे भी किया जाता है। हालाँकि, यह डिफ़ॉल्ट पिन नहीं है, क्योंकि यह फ्लैशिंग के दौरान इसे नीचे खींचने में हस्तक्षेप कर सकता है। इस प्रकार, यदि आप HW फ़ैक्टरी रीसेट के लिए GPIO 0 पर किसी मौजूदा पुश बटन का उपयोग करना चाहते हैं, तो फ्लैशिंग के बाद इसे "set hw_reset 0" और "save" के साथ कॉन्फ़िगर करें। HW पिन द्वारा ट्रिगर किया गया फ़ैक्टरी रीसेट कॉन्फ़िगर किए गए hw_reset GPIO नंबर को रीसेट नहीं करेगा ("reset factory" कंसोल से करेगा)।

पोर्ट मैपिंग

बाहरी नेटवर्क के क्लाइंट्स को आंतरिक नेटवर्क पर सर्वर पोर्ट से कनेक्ट करने की अनुमति देने के लिए, पोर्ट्स को मैप किया जाना चाहिए। एक बाहरी पोर्ट को एक विशिष्ट आंतरिक IP पते के आंतरिक पोर्ट पर मैप किया जाता है। इसके लिए "portmap add" कमांड का उपयोग करें। पोर्ट मैपिंग को "show" कमांड के साथ सूचीबद्ध किया जा सकता है और वर्तमान कॉन्फ़िग के साथ सहेजा जाता है।

हालाँकि, यह सुनिश्चित करने के लिए कि अपेक्षित डिवाइस एक निश्चित IP पते पर सुन रहा है, यह सुनिश्चित करना होगा कि डिवाइस के या ESP के रिबूट होने पर उस डिवाइस का IP पता समान हो। इसे प्राप्त करने के लिए, या तो डिवाइस में निश्चित IP पते कॉन्फ़िगर किए जा सकते हैं या ESP को अपनी DHCP लीज़ याद रखनी होंगी। यह "save dhcp" कमांड से प्राप्त किया जा सकता है। यह वर्तमान स्थिति और सभी DHCP लीज़ को सहेजता है, ताकि रिबूट के बाद उन्हें पुनर्स्थापित किया जा सके। DHCP लीज़ को "show stats" कमांड के साथ सूचीबद्ध किया जा सकता है।

WPA2 Enterprise (PEAP)

WPA2 Enterprise (PEAP) समर्थन अब प्रोजेक्ट में शामिल कर लिया गया है। यह एक "कन्वर्टर" की अनुमति देता है जो PEAP प्रमाणीकरण के साथ एक WPA2 enterprise नेटवर्क को WPA2-PSK नेटवर्क में अनुवादित करता है। यह विशेष रूप से विश्वविद्यालय परिवेशों में एक आम समस्या का समाधान करता है: स्थानीय WiFi नेटवर्क PEAP-MSCHAPv2 प्रमाणीकरण के साथ एक WPA2 Enterprise नेटवर्क है। एक बहुत ही प्रमुख उदाहरण "eduroam"-नेटवर्क है जो दुनिया भर के कई विश्वविद्यालयों में उपलब्ध है। समस्या यह है कि कई IoT डिवाइस WPA2 Enterprise प्रमाणीकरण को संभाल नहीं सकते। इसलिए विकास और डेमो कठिन हैं। एक "कन्वर्टर" जो WPA2 Enterprise नेटवर्क में लॉग इन करता है और अपने क्लाइंट्स को एक सरल WPA-PSK नेटवर्क प्रदान करता है, बहुत सहायक होता है।

इसे उपयोग करने के लिए निम्नलिखित कॉन्फ़िग पैरामीटर सेट करें: ssid, use_peap, peap_identity, peap_username, और peap_password (आपको सामान्य password पैरामीटर की आवश्यकता नहीं है)। यह कॉन्फ़िगरेशन CLI के माध्यम से किया (और सहेजा) जाना चाहिए और वेब इंटरफ़ेस में उपलब्ध नहीं है।

कोड वर्तमान में RADIUS-सर्वर के प्रमाणपत्र की जाँच नहीं करता है। यह MITM-हमलों के लिए असुरक्षित है, जब कोई नकली AP और RADIUS सर्वर स्थापित करता है। जबकि पासवर्ड सादे पाठ में नहीं भेजा जाता है, उपयोग किया गया MSCHAPv2 टूटा हुआ माना जाता है। साथ ही, इस तथ्य से अवगत रहें कि ESP8266 में अब आपका enterprise नेटवर्क पासवर्ड होता है। इसके द्वारा फ़ॉरवर्ड किए गए सभी ट्रैफ़िक को अब नेटवर्क व्यवस्थापक आपके खाते से संबंधित कर सकता है। इसका दुरुपयोग न करें और इसे अविश्वसनीय अन्य लोगों को न दें, जैसे कि एक खुला नेटवर्क कॉन्फ़िगर करके। और भले ही डिवाइस लॉक हो, आपका enterprise नेटवर्क पासवर्ड सीरियल पोर्ट के माध्यम से ESP की फ्लैश से सादे पाठ में निकाला जा सकता है।

Automesh मोड

कभी-कभी आप बड़ी दूरी या क्षेत्र को कवर करने के लिए कई esp_wifi_repeaters को एक पंक्ति में या मेश में उपयोग करना चाह सकते हैं। सामान्य तौर पर, यह NAT राउटरों के साथ बिना किसी समस्या के किया जा सकता है, वास्तव में आपके पास NAT की कई परतें होंगी। हालाँकि, इसका मतलब है कि कनेक्टिविटी सीमित है: सभी नोड इंटरनेट से बात कर सकते हैं, लेकिन आम तौर पर नोड्स के बीच कोई सीधी IP कनेक्टिविटी नहीं होती है। और, निश्चित रूप से, जितने अधिक हॉप्स की आवश्यकता होगी उपलब्ध बैंडविड्थ उतनी ही कम हो जाएगी। लेकिन उपयोगकर्ताओं ने बताया है कि एक पंक्ति में 5 esp_wifi_repeaters भी काफी अच्छा काम करते हैं।

ऐसे सेटअप में कॉन्फ़िगरेशन काफी समय लेने वाली और त्रुटि-प्रवण गतिविधि है। इसे सरल बनाने के लिए, esp_wifi_repeater में अब एक नया मोड है: "Automesh"। बस SSID और पासवर्ड कॉन्फ़िगर करें और "automesh" चालू करें। (या तो CLI पर "set automesh 1" के साथ या वेब इंटरफ़ेस पर केवल चेकबॉक्स चुनकर)। यह निम्नलिखित करेगा:इस तरह कॉन्फ़िगर किया गया प्रत्येक esp_wifi_repeater स्वचालित रूप से AP पर एक WiFi नेटवर्क प्रदान करेगा, जिसका SSID/पासवर्ड वही होगा जिससे वह जुड़ा है। क्लाइंट मूल नेटवर्क या दोहराए गए नेटवर्क के लिए समान WiFi सेटिंग्स का उपयोग कर सकते हैं। "automesh" के साथ कॉन्फ़िगर किया गया प्रत्येक esp_wifi_repeater पहले जुड़ने के लिए सबसे अच्छे अन्य AP की खोज करेगा। यह वह होता है जो मूल WiFi नेटवर्क के सबसे निकट होता है और जिसकी सिग्नल शक्ति (RSSI) सबसे अच्छी होती है।

सिग्नल शक्ति को स्कैन के साथ मापना आसान है, लेकिन जब आप समान SSID वाले कई AP देखते हैं, तो मूल WiFi नेटवर्क के सबसे निकट कौन सा है? इसलिए प्रोटोकॉल एक कुछ गंदी चाल का उपयोग करता है: "automesh" मोड में esp_wifi_repeaters अपने BSSID (वास्तव में, IEEE 802.11 मानक के अनुसार यह "ESSID" है क्योंकि यह एक AP है, लेकिन SDK इसे "BSSID" कहता है), यानी अपने AP इंटरफ़ेस का MAC पता, जो हर बीकन फ्रेम के साथ लगभग 10 बार प्रति सेकंड भेजा जाता है, बदलते हैं। यह प्रारूप उपयोग करता है: 24:24:mm:rr:rr:rr। "24:24" केवल रिपीटर का अद्वितीय पहचानकर्ता है (इस बात की न्यूनतम संभावना है कि यह वास्तविक AP के MAC से टकराए, लेकिन हम इसे अनदेखा कर सकते हैं, क्योंकि यदि वास्तव में आवश्यक हो तो हम इस प्रीफ़िक्स को बदल सकते हैं)। "mm" का अर्थ "मेश स्तर" है, यह मूल WiFi नेटवर्क की दूरी है, हॉप्स में। अंतिम तीन "rr:rr:rr" केवल विभिन्न ESP को अलग करने के लिए यादृच्छिक संख्याएँ हैं। मूल AP अपना BSSID बनाए रखता है, यानी जो "24:24" प्रीफ़िक्स के बिना होता है उसे रूट के रूप में पहचाना जाता है, जिसे मेश स्तर 0 कहा जाता है।

अब प्रत्येक esp_wifi_repeater यह जान सकता है कि कौन सा अन्य esp_wifi_repeater मूल WiFi नेटवर्क के सबसे निकट है, उससे जुड़ सकता है, और तदनुसार अपना स्वयं का BSSID चुन सकता है। साथ ही आंतरिक नेटवर्क का IP पता मेश स्तर के अनुसार समायोजित किया जाता है: 10.24.m.0। यह एक ट्री (एक बहुत ही विशेष मेश) बनाता है जिसमें मूल WiFi AP रूट के रूप में होता है और कई मेश स्तरों पर नोड्स दोहराता है (वास्तव में, यह लिंक परत पर स्पैनिंग ट्री प्रोटोकॉल (STP) या नेटवर्क परत पर डिस्टेंस वेक्टर प्रोटोकॉल का उपयोग करके रूटिंग के समान काम करता है)। जैसे ही अपलिंक लिंक हानि का पता चलता है, कॉन्फ़िगरेशन फिर से शुरू हो जाता है। यह लूप्स से बचना चाहिए, क्योंकि (पुनः)कॉन्फ़िगरेशन के दौरान BSSID वाले कोई बीकन भी नहीं भेजे जाते हैं।

सुविधा के लिए, "automesh" कॉन्फ़िगरेशन के बाद esp_wifi_repeater पहले यह जाँचने की कोशिश करता है कि क्या यह किसी अपलिंक AP से जुड़ सकता है। यदि यह विफल होता है, भले ही सही SSID वाला AP मिल गया हो, तो यह मान लेता है कि उपयोगकर्ता ने पासवर्ड में गलती की है और फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाता है। एक बार सफलतापूर्वक जुड़ जाने के बाद, यह मान लेगा कि कॉन्फ़िगरेशन सही है, और कनेक्शन खोने या रीसेट के बाद जब तक आवश्यक हो, प्रयास करता रहेगा (गलत कॉन्फ़िगर किए गए AP के साथ DOS हमले से बचने के लिए)।

Automesh की ट्यूनिंग

यदि सीमा में एक से अधिक ESP हैं, तो छोटे "खराब" पथ और लंबे "अच्छे" पथ (लिंक गुणवत्ता के संदर्भ में अच्छा और बुरा) के बीच एक समझौता हो सकता है। am_threshold पैरामीटर निर्धारित करता है कि एक खराब कनेक्शन क्या है: यदि स्कैन में RSSI इस थ्रेसहोल्ड से कम है, तो कनेक्शन खराब है और एक अतिरिक्त हॉप वाला पथ पसंद किया जाता है। उदाहरण के लिए, मान लें am_threshold 85 है और स्कैन में दो ऑटोमेश नोड्स पाए गए: A स्तर 1 और RSSI -88 dB के साथ, और B स्तर 2 और RSSI -60 dB के साथ, तो A से लिंक बहुत खराब माना जाता है (-88 dB < -am_threshold) और B को प्राथमिकता दी जाती है। नया नोड B के माध्यम से अपलिंक के साथ एक स्तर 3 नोड बन जाएगा। am_threshold एक सकारात्मक मान के रूप में दिया गया है लेकिन इसका अर्थ नकारात्मक dB है। छोटा मान बेहतर है।

यदि आप एक ऑटोमेश नेटवर्क की टोपोलॉजी में अधिक अंतर्दृष्टि प्राप्त करना चाहते हैं, तो आप सभी नोड्स को एक MQTT ब्रोकर से जोड़ने और उन्हें "Topology" विषय प्रकाशित करने पर विचार कर सकते हैं (नीचे देखें)। यदि आप अब "/WiFi/+/system/Topology" पर सदस्यता लेते हैं, तो आपको सभी नोड और लिंक जानकारी मिलेगी, जिसमें RSSI (कनेक्टेड ESP का) भी शामिल है, जो आपको पूर्ण ग्राफ़ का पुनर्निर्माण करने और मेश में कमजोर लिंक का पता लगाने के लिए चाहिए। TopologyInfo विषय में निम्नलिखित JSON संरचना होती है, जिसका उपयोग ऑटोमेश नेटवर्क के पूर्ण ग्राफ़ को पुनर्निर्माण करने के लिए किया जा सकता है:``` { "nodeinfo" { "id":"ESP_07e37e", "ap_mac":"24:24:01:72:c7:f9", "sta_mac":"60:01:bc:07:e3:7e", "uplink_bssid":"00:1a:54:93:23:0a", "ap_ip":"10.24.1.1", "sta_ip":"192.168.178.33", "rssi":"-66", "mesh_level":"1", "no_stas":"2" }, "stas":[ {"mac":"5c:cf:45:11:7f:13","ip":"10.24.1.2"}, {"mac":"00:14:22:76:99:c5","ip":"10.24.1.3"} ] }

root@kitploit:~
Using the two parameters _am_scan_time_ and _am_sleep_time_ power management can be implemented in automesh mode, if you have connected GPIO16 to RST. After booting the esp_wifi_repeater scans for available uplink APs for _am_scan_time_ seconds. If none is found, it goes to deepsleep for _am_sleep_time_ seconds and tries again after reboot (default is 0 = disabled for both parameters).

# मॉनिटरिंग
कंसोल से एक मॉनिटर सेवा शुरू की जा सकती है ("monitor on [portno]")। यह सेवा आंतरिक नेटवर्क के ट्रैफ़िक को pcap प्रारूप में TCP स्ट्रीम पर प्रतिबिंबित करती है। उदाहरण के लिए, बाहरी नेटवर्क के एक कंप्यूटर से "netcat [external_ip_of_the_repeater] [portno] | sudo wireshark -k -S -i -" के साथ आप अब आंतरिक नेटवर्क के ट्रैफ़िक को वास्तविक समय में देख सकते हैं। इसका उपयोग करें, उदाहरण के लिए, यह देखने के लिए कि आपके आंतरिक क्लाइंट किन इंटरनेट साइटों से संवाद कर रहे हैं। ध्यान रखें कि यह esp और WiFi नेटवर्क पर लोड को कम से कम दोगुना कर देता है। भारी लोड के तहत इसके परिणामस्वरूप कुछ पैकेट कट सकते हैं या मॉनिटर सत्र में ड्रॉप भी हो सकते हैं। सावधानी: इस पोर्ट को खुला छोड़ना एक संभावित सुरक्षा मुद्दा है। स्थानीय नेटवर्क से कोई भी व्यक्ति कनेक्ट होकर आपके ट्रैफ़िक को देख सकता है।

# फ़ायरवॉल
ESP राउटर में एक एकीकृत बुनियादी फ़ायरवॉल है। ACLs (Access Control Lists) को SoftAP इंटरफ़ेस पर लागू किया जा सकता है। जब राउटर का उपयोग अन्य IoT उपकरणों को इंटरनेट से जोड़ने के लिए किया जाता है, तो यह IoT सुरक्षा की आधारशिला है। इसका उपयोग उदाहरण के लिए तीसरे पक्ष के IoT उपकरणों को "कॉलिंग होम" करने, मैलवेयर बॉट के रूप में दुरुपयोग होने से रोकने, और आपके होम नेटवर्क को PCs, टैबलेट और फ़ोन के साथ होम ऑटोमेशन उपकरणों से दिखाई देने से बचाने के लिए किया जा सकता है।

चार ACL सूचियों के नाम "from_sta", "to_sta", "from_ap" और "to_ap" हैं, जो दोनों इंटरफ़ेस पर आने वाले और जाने वाले पैकेट के लिए हैं ("sta" का अर्थ कनेक्टेड क्लाइंट्स के इंटरफ़ेस से है, "ap" का अर्थ अपलिंक AP के इंटरफ़ेस से है)। ACLs को "CISCO IOS शैली" में परिभाषित किया गया है।

निम्नलिखित उदाहरण गेस्ट सबनेट के लिए उपयोगी है। यह इंटरनेट तक पहुंच की अनुमति देता है लेकिन किसी भी अन्य स्थानीय पते की नहीं (xx.xx.xx.xx पते के लिए अपनी स्थानीय नेटवर्क रेंज का उपयोग करें)। यह नियम सेट बाहरी स्थानीय प्रसारण (DHCP के लिए) और UDP 53 (DNS) की अनुमति देता है, अपस्ट्रीम राउटर के सबनेट के लिए कोई भी अन्य पैकेट अवरुद्ध कर दिया जाएगा, बाकी सभी पैकेट इंटरनेट पर जा सकते हैं:```
acl from_sta clear
acl from_sta IP any 255.255.255.255 allow
acl from_sta UDP any any any 53 allow
acl from_sta IP any xx.xx.xx.xx/24 deny
acl from_sta IP any any allow

अगला उदाहरण अधिक प्रतिबंधात्मक है और तब उपयोगी होता है जब आप ESP के AP पर अत्यधिक प्रतिबंधित पहुंच वाले IoT सबनेट की योजना बनाते हैं। यह आउटगोइंग लोकल ब्रॉडकास्ट (DHCP के लिए), UDP 53 (DNS), और स्थानीय ब्रोकर को TCP 1883 (MQTT) की भी अनुमति देगा, लेकिन कोई भी अन्य पैकेट ब्लॉक कर दिया जाएगा, जिसमें मनमाना इंटरनेट एक्सेस भी शामिल है (आप अन्य होस्ट को सक्षम करने के लिए अपनी आवश्यकताओं के अनुसार चौथे स्टेटमेंट को अनुकूलित कर सकते हैं):``` acl from_sta clear acl from_sta IP any 255.255.255.255 allow acl from_sta UDP any any any 53 allow acl from_sta TCP any any 192.168.0.0/16 1883 allow acl from_sta IP any any deny

root@kitploit:~
ACLs for the "to_sta" दिशा के लिए भी परिभाषित की जा सकती हैं, लेकिन आमतौर पर इसकी आवश्यकता नहीं होती, क्योंकि रिवर्स दिशा NAT अनुवाद द्वारा अनचाहे ट्रैफ़िक से काफी अच्छी तरह सुरक्षित रहती है।

ACL में फ़िल्टरिंग नियम होते हैं जिन्हें प्रत्येक पैकेट के लिए संसाधित किया जाता है। प्रत्येक नियम में एक प्रोटोकॉल (IP, TCP, या UDP), स्रोत पता/पोर्ट, गंतव्य पता/पोर्ट और साथ ही एक क्रिया "allow" या "deny" होती है। सामान्य IP के मामले में कोई पोर्ट नहीं दिए जाते, केवल पते दिए जाते हैं। IP नियम TCP और UDP पैकेटों को शामिल करते हैं। पते "/" संकेतन में सबनेट पते के रूप में दिए जा सकते हैं, जैसे 192.168.178.0/24। साथ ही "any" को वाइल्डकार्ड के रूप में उपयोग किया जा सकता है, यह किसी भी पते या पोर्ट नंबर से मेल खाता है। एक नियम "acl" कमांड द्वारा परिभाषित किया जाता है:

- acl [from_sta|to_sta|from_ap|to_ap] [TCP|UDP|IP] _src-ip_ [_src_port_] _desr-ip_ [_dest_port_] [allow|deny|allow_monitor|deny_monitor]

नियमों को सूची में उनकी उपस्थिति के क्रम में ऊपर से नीचे की ओर संसाधित किया जाता है। पहला नियम जो किसी पैकेट से मेल खाता है, लागू होता है और यह निर्धारित करता है कि पैकेट की अनुमति है (और आगे भेजा जाता है) या अस्वीकृत (और गिरा दिया जाता है)। इसका अर्थ है, विशेष मामले पहले, सामान्य नियम अंत में। यदि किसी ACL में नियम हैं तो जो पैकेट किसी भी नियम से मेल नहीं खाते, उन्हें डिफ़ॉल्ट रूप से अस्वीकार कर दिया जाता है। इस प्रकार, उपरोक्त उदाहरण में अंतिम नियम "from_sta IP any any deny" वास्तव में आवश्यक नहीं है, क्योंकि यह वैसे भी डिफ़ॉल्ट है। यदि ACL खाली है, तो सभी पैकेटों की अनुमति होती है।

ACL नियमों की परिभाषा भी ऊपर से नीचे की ओर काम करती है: एक नया नियम हमेशा सूची के अंत में जोड़ा जाता है। किसी ACL को बदलने के लिए आपको पहले उसे पूरी तरह साफ़ करना होता है (acl from_sta clear) और फिर उसे फिर से बनाना होता है। ACL कॉन्फ़िगरेशन के साथ सहेजी जाती हैं। "show acl" ACL को प्रत्येक नियम के हिट्स की संख्या और अनुमत तथा अस्वीकृत पैकेटों की कुल संख्या के आँकड़ों सहित प्रिंट करेगा।

"set acl_debug 1" कमांड से सभी अस्वीकृत पैकेटों का सारांश कंसोल पर प्रिंट होता है। साथ ही, एक MQTT टॉपिक इस सारांश को प्रकाशित कर सकता है। इसका उपयोग फ़ायरवॉल कॉन्फ़िगरेशन के लिए किया जा सकता है ताकि यह निर्धारित किया जा सके कि कनेक्टेड डिवाइसों को काम करने के लिए कौन से नियम आवश्यक हैं। यह इस बात का संकेत भी देता है कि क्या अप्रत्याशित ट्रैफ़िक होता है (और अस्वीकृत होता है)।

गहन विश्लेषण के लिए मॉनिटरिंग सेवा का उपयोग किया जा सकता है (अस्वीकृत पैकेट भी गिराए जाने से पहले मॉनिटर को रिपोर्ट किए जाते हैं)। जब मॉनिटर को "monitor acl _port_" कमांड से शुरू किया जाता है, तो ACL का उपयोग ऑनलाइन फ़िल्टर के रूप में किया जा सकता है। वे सभी नियम जो "allow" के बजाय "allow_monitor" और "deny" के बजाय "deny_monitor" के रूप में परिभाषित हैं, सामान्य रूप से संसाधित होते हैं, जिसके परिणामस्वरूप पैकेट को आगे भेजने की अनुमति मिलती है, लेकिन वे पैकेट को मॉनिटर को भी भेजते हैं। इस प्रकार नियमों की एक सूची जो मूल रूप से सभी पैकेटों को "allow" या "allow_monitor" करती है, फिर भी उपयोगी है, क्योंकि इसका उपयोग कैप्चर समय के दौरान ही चुनने के लिए किया जा सकता है कि कौन सा पैकेट रिकॉर्ड किया जाना चाहिए। जैसे एक सूची:```
acl from_sta clear
acl from_sta IP 192.168.0.0/16 any allow_monitor
acl from_sta IP any any allow

acl to_sta clear
acl to_sta IP any 192.168.0.0/16 allow_monitor
cl to_sta IP any any allow

सभी पैकेटों को अनुमति देगा और निगरानी के लिए उन सभी पैकेटों का चयन भी करेगा जो किसी स्टेशन से 192.168.0.0/16 (लोकल) सबनेट तक जाते हैं और 192.168.0.0/16 से किसी स्टेशन तक जाते हैं। बेशक, ऐसा फ़िल्टर कैप्चर के बाद पूरे मॉनिटरिंग ट्रेस पर भी लागू किया जा सकता है, लेकिन यदि आप पहले से जानते हैं कि आप क्या खोज रहे हैं, तो ये ऑनलाइन फ़िल्टर मॉनिटरिंग ओवरहेड को काफी हद तक कम करने में मदद करेंगे। इसका उपयोग सभी deny फ़ायरवॉल नियमों को डीबग करने के लिए भी किया जा सकता है, बस deny के बजाय "deny_monitor" का उपयोग करके।

स्थैतिक मार्ग

डिफ़ॉल्ट रूप से AP इंटरफ़ेस NATed होता है, ताकि AP से जुड़ा कोई भी नोड ESP के STA इंटरफ़ेस के माध्यम से पारदर्शी रूप से बाहरी दुनिया तक पहुँच सके। इसलिए, यदि आप वास्तविक नेटवर्क नर्ड नहीं हैं, तो आगे कोई कार्रवाई आवश्यक नहीं है।

आप में से जो लोग आगे के नेटवर्क कॉन्फ़िगरेशन में वास्तव में रुचि रखते हैं: इस परियोजना के लिए ESP के lwip IPv4 स्टैक को स्थैतिक मार्गों के समर्थन के साथ उन्नत किया गया है: "show route" सभी ज्ञात मार्गों के साथ रूटिंग टेबल प्रदर्शित करता है, जिसमें जुड़े नेटवर्क इंटरफेस (AP और STA इंटरफ़ेस) के लिंक शामिल हैं। इन दो इंटरफेस के बीच रूटिंग बिना किसी और कॉन्फ़िगरेशन के काम करती है। अन्य नेटवर्कों के लिए अतिरिक्त मार्ग "route add network gateway" कमांड के माध्यम से सेट किए जा सकते हैं, जो Linux बॉक्स या राउटर से जाना जाता है। एक "save" कमांड रूटिंग टेबल की वर्तमान स्थिति को फ्लैश कॉन्फ़िगरेशन में लिखता है।

स्थैतिक मार्गों के साथ क्या किया जा सकता है, इसका एक सरल उदाहरण यहाँ दिया गया है। निम्नलिखित नेटवर्क सेटअप में, दो ESP केंद्रीय होम राउटर के माध्यम से STA इंटरफेस से जुड़े हैं:``` | 10.0.1.1 AP-ESP1-STA 192.168.1.10 | <-> |Home Router| <-> | 192.168.1.20 STA-ESP2-AP 10.0.2.1|

root@kitploit:~
प्रत्येक ESP के AP के पीछे एक दूसरा नेटवर्क है जिसमें अलग-अलग नेटवर्क पते हैं: 10.0.1.0/24 और 10.0.2.0/24। ESP1, ESP2 को 192.168.1.20 पर ping कर सकता है, लेकिन 10.0.2.1 पर नहीं, क्योंकि उसे नहीं पता कि वह 192.168.1.20 के माध्यम से उस तक पहुँच सकता है। यह तब बदल जाता है जब आप दो static routes जोड़ते हैं। ESP1 पर:```
route add 10.0.2.0/24 192.168.1.20

और ESP2 पर:``` route add 10.0.1.0/24 192.168.1.10

root@kitploit:~
अब ESP1 पर "ping 10.0.2.1" सफल होगा। इसे 192.168.1.20 पर भेजा जाता है और फिर ESP2 द्वारा उत्तर दिया जाता है।

अब प्रत्येक नेटवर्क में एक अतिरिक्त क्लाइंट कनेक्ट होता है (पते 10.0.1.2 और 10.0.2.2 के साथ):```
| STA1 10.0.1.2 | <-> | 10.0.1.1 ESP1 192.168.1.10 | <-> |Home Router| <-> | 192.168.1.20 ESP2 10.0.2.1| <-> | STA2 10.0.2.2 |

अब स्थानीय पता 10.0.1.2 वाला क्लाइंट STA1 भी 10.0.2.2 वाले STA2 को पिंग कर सकता है, क्योंकि यह अपना अनुरोध पहले अपने डिफ़ॉल्ट राउटर ESP1 को भेजता है और यह जानता है कि 10.0.2.0/24 पते के सभी पैकेट 192.168.1.20 को अग्रेषित किए जाने हैं। वहाँ ESP2 जानता है कि इसे STA2 तक कैसे भेजना है। यही बात विपरीत दिशा में उत्तर पर भी लागू होती है।

यह आपको ESPs की एक मल्टी-स्टार टोपोलॉजी कॉन्फ़िगर करने की सुविधा देता है, जहाँ प्रत्येक ESP और उसके STA क्लाइंट सीधे एक-दूसरे तक पहुँच सकते हैं (बिना किसी पोर्टमैप की आवश्यकता के)। आवश्यक रूट्स का कॉन्फ़िगरेशन शायद कुछ कष्टदायक हो सकता है - लेकिन नेटवर्किंग के लिए एक अच्छा अभ्यास है। अगला कदम ESP पर RIP जैसे डायनामिक रूटिंग प्रोटोकॉल को पोर्ट करना होगा...

बिटरेट सीमाएँ

upstream_kbps और downstream_kbps को 0 के अलावा किसी अन्य मान पर सेट करके (0 डिफ़ॉल्ट है), आप ESP के AP की अधिकतम बिटरेट सीमित कर सकते हैं। यह मान एक सीमा है जो सभी जुड़े क्लाइंट्स के ट्रैफ़िक पर लागू होती है। जो पैकेट परिभाषित बिटरेट से अधिक होंगे उन्हें छोड़ दिया जाता है। ट्रैफ़िक शेपर "टोकन बकेट" एल्गोरिदम का उपयोग करता है जिसमें बकेट का आकार वर्तमान में प्रति सेकंड बिटरेट का चार गुना होता है, जो पहले ट्रैफ़िक न होने पर बर्स्ट की अनुमति देता है।

MQTT समर्थन

संस्करण 1.3 से राउटर में एक अंतर्निहित MQTT क्लाइंट है (उनकी लाइब्रेरी के लिए Tuan PM को धन्यवाद https://github.com/tuanpmt/esp_mqtt)। यह राउटर/रिपीटर को IoT में एकीकृत करने में मदद कर सकता है। एक होम ऑटोमेशन सिस्टम उदाहरण के लिए वर्तमान में जुड़े स्टेशनों की जानकारी के आधार पर निर्णय ले सकता है, यह रिपीटर्स को चालू और बंद कर सकता है (जैसे समय-सारणी के आधार पर), या बस लोड की निगरानी के लिए उपयोग किया जा सकता है। राउटर को या तो स्थानीय MQTT ब्रोकर से या क्लाउड में सार्वजनिक रूप से उपलब्ध ब्रोकर से जोड़ा जा सकता है। हालाँकि यह वर्तमान में TLS एन्क्रिप्शन का समर्थन नहीं करता है।

डिफ़ॉल्ट रूप से MQTT क्लाइंट अक्षम है। इसे config पैरामीटर "mqtt_host" को "none" से भिन्न होस्टनाम पर सेट करके सक्षम किया जा सकता है। MQTT कॉन्फ़िगर करने के लिए आप निम्नलिखित पैरामीटर सेट कर सकते हैं:

  • set mqtt_host IP_or_hostname: MQTT ब्रोकर का IP या होस्टनाम ("none" MQTT क्लाइंट को अक्षम करता है)
  • set mqtt_port port: कनेक्शन के लिए उपयोग किए जाने वाले MQTT ब्रोकर का पोर्ट (डिफ़ॉल्ट: 1883)
  • set mqtt_qos QoS: प्रकाशनों और सदस्यताओं के लिए MQTT QoS मान (0-2, डिफ़ॉल्ट: 0)
  • set mqtt_user username: प्रमाणीकरण के लिए उपयोगकर्ता नाम ("none" यदि ब्रोकर पर कोई प्रमाणीकरण आवश्यक नहीं है)
  • set mqtt_password password: प्रमाणीकरण के लिए पासवर्ड
  • set mqtt_id clientId: ब्रोकर पर क्लाइंट की आईडी (डिफ़ॉल्ट: "ESPRouter_xxxxxx", MAC पते से व्युत्पन्न)
  • set mqtt_prefix prefix_path: सभी प्रकाशित विषयों के लिए उपसर्ग (डिफ़ॉल्ट: "/WiFi/ESPRouter_xxxxxx/system", फिर से MAC पते से व्युत्पन्न)
  • set mqtt_command_topic command_topic: कमांड प्राप्त करने के लिए सदस्यता लिया गया विषय, कंसोल के समान। (डिफ़ॉल्ट: "/WiFi/ESPRouter_xxxxxx/command", "none" MQTT के माध्यम से कमांड अक्षम करता है)
  • set mqtt_interval secs: वह अंतराल सेट करें जिसमें राउटर स्थिति विषयों को प्रकाशित करता है (डिफ़ॉल्ट: 15s, 0 स्थिति प्रकाशन अक्षम करता है)
  • set mqtt_mask mask_in_hex: चुनता है कि कौन से विषय प्रकाशित होते हैं (डिफ़ॉल्ट: "ffff" का अर्थ सभी है)

MQTT पैरामीटर को "show mqtt" कमांड के साथ प्रदर्शित किया जा सकता है।

राउटर निम्नलिखित स्थिति विषयों को समय-समय पर (हर mqtt_interval पर) प्रकाशित कर सकता है:

  • prefix_path/Uptime: पिछले रीसेट के बाद से सिस्टम अपटाइम सेकंड में (mask: 0x0020)
  • prefix_path/Vdd: बिजली आपूर्ति का वोल्टेज mV में (mask: 0x0040)
  • prefix_path/Bpsin: स्टेशनों से AP में KBytes/s (mask: 0x0800)
  • prefix_path/Bpsout: AP से स्टेशनों को KBytes/s (mask: 0x0800)
  • prefix_path/Bpd: स्टेशनों से और स्टेशनों को प्रतिदिन KBytes (mask: 0x0400)
  • prefix_path/Ppsin: स्टेशनों से AP में पैकेट/s (mask: 0x0200)
  • prefix_path/Ppsout: AP से स्टेशनों को पैकेट/s (mask: 0x0200)
  • prefix_path/Bin: स्टेशनों से AP में कुल बाइट्स (mask: 0x0100)
  • prefix_path/Bout: AP से स्टेशनों को कुल बाइट्स (mask: 0x0100)
  • prefix_path/NoStations: वर्तमान में AP से जुड़े स्टेशनों की संख्या (mask: 0x2000)
  • prefix_path/TopologyInfo: नोड की वर्तमान टोपोलॉजी जानकारी के साथ JSON संरचना (mask: 0x1000)

इसके अतिरिक्त रिपीटर घटना-आधारित रूप से प्रकाशित कर सकता है:

  • prefix_path/join: AP में शामिल होने वाले स्टेशन का MAC पता (mask: 0x0008)
  • prefix_path/leave: AP छोड़ने वाले स्टेशन का MAC पता (mask: 0x0010)
  • prefix_path/IP: DHCP के माध्यम से प्राप्त होने पर राउटर का IP पता (mask: 0x0002)
  • prefix_path/ScanResult: "scan" कमांड के परिणामों के लिए अलग विषय (प्रत्येक मिले AP के लिए एक संदेश) (mask: 0x0004)
  • prefix_path/ACLDeny: एक पैकेट को ACL नियम द्वारा अस्वीकार कर दिया गया है और छोड़ दिया गया है (mask: 0x0080)

LWT और स्थिति रिपोर्ट के रूप में रिपीटर निम्नलिखित प्रकाशित करता है:

  • prefix_path/status: एक बनाए रखा गया विषय या तो "online" (जैसे ही रिपीटर कनेक्ट होता है) या "offline" (कनेक्शन खोने के बाद LWT के रूप में)

राउटर को निम्नलिखित विषयों का उपयोग करके कॉन्फ़िगर किया जा सकता है:

  • command_topic: राउटर इस विषय पर सदस्यता लेता है और सभी संदेशों को कमांड लाइन के रूप में व्याख्या करता है
  • prefix_path/response: राउटर इस विषय पर कमांड लाइन आउटपुट प्रकाशित करता है (mask: 0x0001)

यदि आप अब चाहते हैं कि राउटर उदाहरण के लिए केवल Vdd, उसका IP, और कमांड लाइन आउटपुट प्रकाशित करे, तो mqtt_mask को 0x0001 | 0x0002 | 0x0040 (= "set mqtt_mask 0043") पर सेट करें।

ENC28J60 ईथरनेट समर्थन

esp_wifi_repeater में अब SPI के माध्यम से जुड़े ENC28J60 ईथरनेट NIC के लिए समर्थन शामिल है (इसे सही बनाने के लिए Andrew Kroll https://github.com/xxxajk को धन्यवाद), यदि आप "user_config.h" में HAVE_ENC28J60 कंपाइल विकल्प चालू करते हैं। ईथरनेट इंटरफ़ेस लगभग 1 Mbps का समर्थन करेगा जब ESP 160 MHz पर चल रहा हो। AP इंटरफ़ेस चालू करने और ईथरनेट को अपलिंक के रूप में उपयोग करने से esp_wifi_repeater WiFi डिवाइसों (जैसे अन्य ESPs) के लिए एक सस्ता AP बन जाएगा।

SPI के माध्यम से कनेक्शन इस प्रकार होना चाहिए:``` NodeMCU/Wemos ESP8266 ENC28J60

root@kitploit:~
    D6     GPIO12 <---> MISO
    D7     GPIO13 <---> MOSI
    D5     GPIO14 <---> SCLK
    D8     GPIO15 <---> CS
    D1     GPIO5  <---> INT
D2     GPIO4  <---> RESET
           Q3/V33 <---> 3.3V
           GND    <---> GND
root@kitploit:~
छोटे और सोल्डर किए गए तार सबसे अच्छे काम करते हैं। इसके अलावा GPIO15 को डिकपल करने के लिए आपको एक ट्रांजिस्टर की आवश्यकता होगी, अन्यथा आपका ESP फिर से बूट नहीं होगा, देखें: https://esp8266hints.wordpress.com/category/ethernet/ । साथ ही, एक अच्छी बिजली आपूर्ति होना महत्वपूर्ण है: ENC28j60 को सक्रिय होने पर लगभग 160mA की आवश्यकता होती है। मेरे लिए यह विफल हो जाता है, यदि मैं ESP बोर्ड से 3.3V का उपयोग करने का प्रयास करता हूँ।

अब आप नए Ethernet इंटरफ़ेस को कॉन्फ़िगर कर सकते हैं: 
- set eth_enable [0|1]: SPI बस पर ENC28J60 Ethernet NIC को सक्षम/अक्षम करता है (डिफ़ॉल्ट: 0 - अक्षम)
- set eth_ip _ip-addr_: ETH इंटरफ़ेस के लिए एक स्थिर IP पता सेट करता है
- set eth_netmask _netmask_: ETH इंटरफ़ेस के लिए एक स्थिर नेटमास्क सेट करता है
- set eth_gw _gw-addr_: ETH इंटरफ़ेस के लिए एक स्थिर गेटवे पता सेट करता है
- set eth_dhcpd [0|1]: ETH इंटरफ़ेस पर डायनामिक IP पतों के लिए एक DHCP सर्वर शुरू करता है, (डिफ़ॉल्ट: 0 - अक्षम)

# Power Management
रिपीटर अपनी वर्तमान आपूर्ति वोल्टेज की निगरानी करता है (जो "show stats" कमांड में दिखाई जाती है)। यह केवल तभी काम करता है, जब esp_init_data_default.bin में 107वाँ बाइट, जिसे vdd33_const नाम दिया गया है, 255(0xFF) पर सेट हो। इसे प्राप्त करने का सबसे आसान तरीका है esp_init_data_default_v08_vdd33.bin को फ्लैश पर लिखना (नीचे देखें)।

यदि _vmin_ (mV में, डिफ़ॉल्ट 0) को 0 से अधिक मान पर सेट किया जाता है और आपूर्ति वोल्टेज इस मान से नीचे चला जाता है, तो यह _vmin_sleep_ सेकंड के लिए डीप स्लीप मोड में चला जाएगा। यदि आपने GPIO16 को RST से जोड़ा है (जिसे ESP-01 पर सोल्डर करना कठिन है) तो यह इस अंतराल के बाद रीबूट होगा, पुनः कनेक्ट करने का प्रयास करेगा, और अपनी माप जारी रखेगा। यदि _vmin_ को कॉन्फ़िगरेशन के साथ सहेजा जाता है, तो यह बार-बार सोता रहेगा, जब तक कि आपूर्ति वोल्टेज थ्रेशोल्ड से ऊपर नहीं बढ़ जाती। ये सेटिंग्स विशेष रूप से (केवल?) तब उपयोगी होती हैं जब आपने ESP को अंडरचार्ज सुरक्षा के बिना (लिथियम) बैटरी से चालित किया हो। तब 2900mV-3000mV का मान शायद सहायक होता है, क्योंकि यह ESP की बिजली खपत को न्यूनतम कर देता है और क्षति से पहले आपके पास बैटरी को रिचार्ज करने या बदलने के लिए बहुत अधिक समय होता है। यह केवल तभी समझ में आता है, जब आपने ESP को सीधे बैटरी से जोड़ा हो। यदि आपके पास अतिरिक्त लॉजिक है, तो यह फिर भी बैटरी को खत्म करेगा।

आप "sleep" कमांड का उपयोग करके ESP को एक बार मैन्युअल रूप से सोने के लिए भेज सकते हैं।

सावधानी: यदि आप _vmin_ मान को अधिकतम आपूर्ति वोल्टेज से अधिक फ्लैश में सहेजते हैं, तो रिपीटर रीबूट के बाद हर बार तुरंत बंद हो जाएगा। फिर आपको blank.bin (या कोई अन्य फ़ाइल) को 0x0c000 पर फ्लैश करके पूरे कॉन्फ़िगरेशन को मिटाना होगा।

# WiFi Repeater - L2 Bridge

प्रोजेक्ट अब दो अलग-अलग ऑपरेशनल मोड प्रदान करता है: **NAT Router** और **Layer 2 Bridge** (जिसे "Repeater mode" कहा जाता है)। जबकि दोनों मोड नेटवर्क कवरेज बढ़ाते हैं, वे मौलिक रूप से भिन्न हैं कि वे ट्रैफ़िक और डिवाइस पहचान को कैसे संभालते हैं।

### NAT Router Mode (Standard)
इस मोड में, जैसा ऊपर वर्णित है, डिवाइस एक मानक गेटवे के रूप में कार्य करता है। यह एक नया सबनेट बनाता है और अपने Access Point (AP) से जुड़े सभी डिवाइसों के लिए Network Address Translation (NAT) करता है।

*   **सबनेट अलगाव**: कनेक्टेड क्लाइंट एक निजी सबनेट (जैसे, 192.168.4.x) पर होते हैं और प्राथमिक नेटवर्क से सुरक्षित रहते हैं।
*   **ट्रैफ़िक पहचान**: क्लाइंट्स का सारा ट्रैफ़िक मुख्य राउटर को ऐसा दिखाई देता है जैसे वह ESP8266 के अपने IP/MAC पते से उत्पन्न हो रहा हो।
*   **सरलता**: अपस्ट्रीम राउटर पर किसी विशेष कॉन्फ़िगरेशन की आवश्यकता नहीं होती है और यह लगभग सभी मानक Wi-Fi नेटवर्क के साथ संगत है।
*   **सीमा**: प्राथमिक नेटवर्क पर मौजूद डिवाइस NAT बाधा के कारण रिपीटर के पीछे के डिवाइसों से आसानी से कनेक्शन शुरू नहीं कर सकते, जब तक कि आप पोर्ट मैपिंग का उपयोग न करें।

### Layer 2 Bridge Mode ("Repeater" Variant)
यह मोड एक ट्रांसपेरेंट Layer 2 (Data Link Layer) ब्रिज लागू करता है। ESP8266 एक द्वितीयक सबनेट बनाने के बजाय मौजूदा प्राथमिक नेटवर्क का विस्तार करता है।

*   **ट्रांसपेरेंट ब्रिजिंग**: ESP8266 ट्रैफ़िक को Ethernet फ्रेम स्तर पर ब्रिज करता है। कनेक्टेड क्लाइंट सीधे प्राथमिक नेटवर्क के DHCP सर्वर से IP पते प्राप्त करते हैं (DHCP snooping/relay के माध्यम से)।
*   **एकीकृत नेटवर्क**: सभी डिवाइस (रिपीटर और मुख्य राउटर दोनों पर) एक ही L2 ब्रॉडकास्ट डोमेन पर मौजूद होते हैं।
*   **डिवाइस दृश्यता**: रिपीटर के पीछे के डिवाइस मुख्य नेटवर्क पर अपनी मूल MAC और IP पहचान बनाए रखते हैं। यह स्थानीय डिस्कवरी प्रोटोकॉल (जैसे mDNS/Bonjour, UPnP, या नेटवर्क डिस्कवरी) को पूरे नेटवर्क में सहज रूप से कार्य करने की अनुमति देता है।
*   **जटिलता**: इसके लिए उन्नत हैंडलिंग की आवश्यकता होती है, जैसे Proxy ARP और DHCP snooping, ताकि यह सुनिश्चित किया जा सके कि अपस्ट्रीम नेटवर्क रिपीटर के माध्यम से जुड़े "छिपे हुए" क्लाइंट्स को ट्रैफ़िक सही ढंग से वापस रूट करे।
*   **उपयोग का मामला**: आदर्श जब पूरे नेटवर्क में डिवाइस डिस्कवरी (जैसे, फोन ऐप के माध्यम से प्रिंटर या स्मार्ट होम डिवाइस को नियंत्रित करना) आवश्यक हो।

रिपीटर मोड में कम सुविधाएँ होती हैं: रूटिंग, पोर्ट मैपिंग और DHCP की आवश्यकता नहीं होती है, ACLs और Automesh का भी कोई वास्तविक अर्थ नहीं होता है, और pcap के माध्यम से नेटवर्क मॉनिटरिंग भी नहीं। इसलिए ये सभी सुविधाएँ रिपीटर मोड में उपलब्ध नहीं हैं। साथ ही MQTT को हटा दिया गया है। शेष सुविधाएँ अभी भी कंसोल या रिमोट कंसोल के माध्यम से उपलब्ध हैं।

आप "firmware-repeater" फ़ोल्डर में प्रीकंपाइल्ड बाइनरी पा सकते हैं।

रिपीटर मोड संस्करण का पहला कॉन्फ़िगरेशन मूल रूप से NAT राउटर जितना ही सरल है। सीरियल कंसोल के माध्यम से बस ssid, password, ap_ssid, और ap_password सेट करें, फिर save और reset करें। यदि आप इसे वेब इंटरफ़ेस के माध्यम से करना चाहते हैं, तो यह भी सरल है, लेकिन आपको सही क्रम का पालन करना होगा:

- अपने क्लाइंट के साथ "MyAP" WiFi से कनेक्ट करें
- ब्राउज़र को "http://192.168.4.1" पर इंगित करें
- **पहले** AP Settings ssid और password दर्ज करें, set करें और restart करें
- फिर अपने नए परिभाषित AP ssid से कनेक्ट करें, ब्राउज़र को फिर से "http://192.168.4.1" पर इंगित करें
- अब STA settings ssid और password दर्ज करें और connect करें

एक बार STA ssid परिभाषित हो जाने पर, रिपीटर अब अपना स्वयं का DHCP सर्वर नहीं चलाएगा, बल्कि अपना IP अपस्ट्रीम DHCP से प्राप्त करेगा (अब 192.168.4.1 नहीं)। इसके वेब पेज या रिमोट कंसोल से कनेक्ट करने के लिए, यदि आपका क्लाइंट mDNS का समर्थन करता है, तो आप "esp-wifi-repeater.local" नाम का उपयोग कर सकते हैं, या आपको अपने अपस्ट्रीम राउटर में निर्दिष्ट पता देखना होगा (या सीरियल कंसोल में "show stats")। आप कंसोल और "reset factory" के माध्यम से हमेशा ESP को रीसेट कर सकते हैं।

### Key Contrast Summary

| फ़ीचर | NAT Router | Layer 2 Bridge |
| :--- | :--- | :--- |
| **नेटवर्क आर्किटेक्चर** | नया, पृथक सबनेट बनाता है | मौजूदा ब्रॉडकास्ट डोमेन का विस्तार करता है |
| **IP एड्रेसिंग** | क्लाइंट द्वितीयक पूल का उपयोग करते हैं | क्लाइंट अपस्ट्रीम DHCP सर्वर का उपयोग करते हैं |
| **डिस्कवरी (mDNS/UPnP)** | अक्सर अवरुद्ध/कठिन | पूर्ण रूप से समर्थित (ट्रांसपेरेंट) |
| **अपस्ट्रीम दृश्यता** | क्लाइंट पहचान छिपी (NAT) | क्लाइंट पहचान संरक्षित |
| **कार्यान्वयन** | मानक नेटवर्किंग | उन्नत प्रॉक्सिंग (Proxy ARP/Snooping) |

# Building and Flashing
डिवाइस पर प्री-कंपाइल्ड बाइनरी को सीधे फ्लैश करने के लिए [Web-Installer](https://martin-ger.github.io/esp_wifi_repeater/) का उपयोग करें।

यदि आपके पास Docker स्थापित है, तो पूर्ण बिल्ड वातावरण तक पहुँच प्राप्त करने का सबसे आसान तरीका है अपने ESP8266 को /dev/ttyUSB0 से कनेक्ट करना और इमेज को इसका उपयोग करके चलाना:```
git clone https://github.com/martin-ger/esp_wifi_repeater.git
docker run -it --rm --device=/dev/ttyUSB0 -v $(pwd)/esp_wifi_repeater:/home/esp/esp_wifi_repeater martinfger/iot_devel:1.0
cd esp_wifi_repeater
make
make flash

L2 WiFi Repeater संस्करण बनाने के लिए बस make कमांड के लिए VARIANT=bridge विकल्प का उपयोग करें:``` git clone https://github.com/martin-ger/esp_wifi_repeater.git docker run -it --rm --device=/dev/ttyUSB0 -v $(pwd)/esp_wifi_repeater:/home/esp/esp_wifi_repeater martinfger/iot_devel:1.0 cd esp_wifi_repeater make VARIANT=bridge make flash

root@kitploit:~
स्क्रैच से बिल्ड वातावरण सेट करने और इस बाइनरी को बिल्ड करने के लिए esp-open-sdk डाउनलोड और इंस्टॉल करें (मेरा सुझाव है कि यह वर्शन बेस NONOS SDK 2.2 के साथ: https://github.com/xxxajk/esp-open-sdk)। सुनिश्चित करें कि आप शामिल "blinky" उदाहरण को कंपाइल और डाउनलोड कर सकते हैं।

फिर इस सोर्स ट्री को एक अलग डायरेक्टरी में डाउनलोड करें और Makefile में BUILD_AREA वेरिएबल तथा user/user_config.h में कोई भी वांछित विकल्प समायोजित करें। डिफ़ॉल्ट कॉन्फ़िगरेशन में बदलाव user/config_flash.c में किए जा सकते हैं। "make" के साथ esp_wifi_repeater फर्मवेयर बिल्ड करें। "make flash" इसे esp8266 पर फ्लैश करता है।

सोर्स ट्री में liblwip_open का एक बाइनरी वर्शन, esp-open-lwip के मेरे फोर्क से आवश्यक अतिरिक्त includes, और rboot टूल का एक बाइनरी शामिल है। *उसके लिए कोई अतिरिक्त इंस्टॉलेशन क्रिया आवश्यक नहीं है।* केवल यदि आप प्रीकंपाइल्ड लाइब्रेरी का उपयोग नहीं करना चाहते हैं, तो https://github.com/martin-ger/esp-open-lwip से सोर्स चेकआउट करें। इसका उपयोग esp-open-sdk ट्री में "esp-open-lwip" डायरेक्टरी को बदलने के लिए करें। esp_open_lwip डायरेक्टरी में "make clean" और फिर ऊपरी esp_open_sdk डायरेक्टरी में एक बार फिर "make" चलाएँ। यह liblwip_open.a कंपाइल करेगा जिसमें NAT-सुविधाएँ होती हैं। liblwip_open_napt.a को उस बाइनरी से बदलें। साथ ही आप https://github.com/raburton/rboot से "rboot.bin" बाइनरी भी बिल्ड कर सकते हैं और इसे प्रोजेक्ट की रूट डायरेक्टरी में बदल सकते हैं।

*अपडेट*: यदि आपने वेब पर कहीं "0x10000.bin" का उपयोग करने वाले इंस्टॉलेशन निर्देश पढ़े हैं - OTA के कारण इसे अब "0x02000.bin" में बदल दिया गया है।

यदि आप पूर्ण प्रीकंपाइल्ड फर्मवेयर बाइनरी का उपयोग करना चाहते हैं, तो आप उन्हें "esptool.py --port /dev/ttyUSB0 write_flash -fs 4MB -ff 80m -fm dio 0x00000 firmware/0x00000.bin 0x02000 firmware/0x02000.bin" के साथ फ्लैश कर सकते हैं (ESP-01 के लिए -fs 1MB उपयोग करें)। esp8285 के लिए आपको -fs 1MB और -fm dout उपयोग करना होगा।

Windows पर आप इसे https://espressif.com/en/support/download/other-tools पर उपलब्ध "ESP8266 Download Tool" का उपयोग करके फ्लैश कर सकते हैं। firmware डायरेक्टरी से दो फाइलें 0x00000.bin और 0x02000.bin डाउनलोड करें। सामान्य ESP12, NodeMCU या Wemos D1 के लिए निम्नलिखित सेटिंग्स का उपयोग करें (ESP-01 के लिए FLASH SIZE को "8Mbit" में बदलें):

<img src="https://raw.githubusercontent.com/martin-ger/esp_wifi_repeater/master/FlashRepeaterWindows.jpg">

यदि "QIO" मोड आपके डिवाइस पर विफल होता है, तो इसके बजाय "DIO" आज़माएँ। फ्लैश चिप के आकार और मोड की जाँच करने के लिए "Detected Info" पर भी ध्यान दें। यदि आपका डाउनलोड किया गया फर्मवेयर फिर भी ठीक से प्रारंभ नहीं होता है, तो कृपया संलग्न checksums के साथ जाँच करें कि क्या बाइनरी फाइलें संभवतः दूषित हैं। यदि आपको फर्मवेयर बाइनरी के दूषित होने के बारे में संदेह है, तो पूरा रेपो zip के रूप में डाउनलोड करें और उस zip से बाइनरी निकालें - यह HTTP-डाउनलोड समस्याओं (जैसे CR-LF रूपांतरण) से बचाता है।

# OTA (ओवर द एयर) अपडेट समर्थन

rboot lib के उपयोग पर आधारित: https://github.com/raburton/rboot और christianchristensen के योगदान के लिए धन्यवाद।

बिल्ड प्रक्रिया esp_wifi_repeater बाइनरी की दो प्रतियाँ firmware डायरेक्टरी में बनाती है: 0x02000.bin और 0x82000.bin। प्रारंभिक इंस्टॉलेशन के लिए केवल 0x00000.bin (rboot बूट लोडर) और 0x02000.bin (प्रोग्राम की एक प्रति) फ्लैश करना पर्याप्त है। esp_wifi_repeater काम करेगा।

यदि आपके पास कम से कम 1MB फ्लैश है, तो आप किसी अन्य संस्करण के साथ OTA (ओवर द एयर) अपडेट कर सकते हैं। अर्थात, आप CLI से इंटरैक्टिव रूप से एक नया बाइनरी लोड कर सकते हैं और उस पर स्विच कर सकते हैं। दूसरा बाइनरी वर्तमान में निष्क्रिय मेमोरी स्थान (या तो 0x02000 (rom0) या 0x82000 (rom1)) पर लोड होता है और सफल होने पर प्रारंभ होता है। आप दो स्थापित बाइनरी के बीच इंटरैक्टिव रूप से स्विच भी कर सकते हैं। वर्तमान कॉन्फ़िगरेशन दोनों बाइनरी के लिए उपयोग किया जाएगा (जब तक इसका प्रारूप नहीं बदला है)।

आप OTA सुविधाओं को निम्नलिखित कमांड्स से नियंत्रित कर सकते हैं: 
- show ota: वर्तमान में सक्रिय बाइनरी और अगले अपडेट का URL दिखाता है
- set ota_host _hostname_: OTA सर्वर का होस्टनाम या IP पता सेट करता है (डिफ़ॉल्ट: "none")
- set ota_port _portno_: OTA सर्वर का पोर्ट नंबर सेट करता है (डिफ़ॉल्ट: 80)
- ota update: ota_host:ota_port से HTTP के माध्यम से एक नया बाइनरी (0x02000.bin या 0x82000.bin) डाउनलोड करने का प्रयास करता है और उसे प्रारंभ करता है
- ota switch: दूसरे बाइनरी पर स्विच करता है (यदि स्थापित है)

OTA सुविधा का परीक्षण करने के लिए, अपने ESP (STA या AP के रूप में) को अपडेट सर्वर वाले नेटवर्क से कनेक्टेड होने के लिए कॉन्फ़िगर करें। वहाँ firmware डायरेक्टरी में एक साधारण वेब सर्वर प्रारंभ करें, उदा.;```
cd firmware
python -m SimpleHTTPServer 8080

पैरामीटर hostname को अपने कंप्यूटर के होस्टनाम या IP पर सेट करें, portno को 8080 पर सेट करें, और "सहेजें" करें। फिर CLI पर टाइप करें:``` ota update

root@kitploit:~
यदि सही ढंग से कॉन्फ़िगर किया गया है, तो अपडेट शुरू हो जाएगा और ESP नए बाइनरी के साथ रीबूट होगा।

# ज्ञात समस्याएँ
- ESP के SoftAP कार्यान्वयन की सीमाओं के कारण, एक साथ कनेक्टेड स्टेशनों की अधिकतम संख्या 8 है।
- ESP8266 को एक अच्छी बिजली आपूर्ति की आवश्यकता होती है क्योंकि यह ट्रांसमिट के दौरान 170 mA तक की करंट स्पाइक्स उत्पन्न करता है (WiFi चालू होने पर सामान्य औसत खपत लगभग 70 mA होती है)। यदि आपका ESP अस्थिर चलता है और समय-समय पर रीबूट होता है, तो पहले बिजली आपूर्ति की जाँच करें। यदि आपको यहाँ समस्याएँ आती हैं, तो Vdd और Gnd के बीच एक बड़ा कैपेसिटर मदद कर सकता है।

# लाइसेंस
सॉफ्टवेयर ओपन सोर्स है। तृतीय-पक्ष स्रोत फ़ाइलों का अपना स्वयं का लाइसेंस हेडर होता है। अन्य सभी फ़ाइलों के लिए MIT लाइसेंस लागू होता है।
टूल डाउनलोड करें