लिनक्स में एक स्थानीय नेटवर्क के लिए 3 जी मॉडेम से इंटरनेट का वितरण

यह लेख लिनक्स का उपयोग कर वायरलेस एक्सेस प्वाइंट का एक निरंतरता है। यहां मैं वर्णन करूंगा कि पिछले विषय के निर्देशों के अनुसार पहले से बनाए गए वाई-फाई नेटवर्क विषय का उपयोग करके इंटरनेट को 3 जी मॉडेम से वितरित करने के लिए क्या करने की आवश्यकता है।

1) सबसे पहले, मॉडेम के साथ काम करने के लिए लिनक्स सिखाएं
2) इंटरनेट वितरण के लिए NAT बनाएँ
3) पूरी बात को स्टार्टअप में डालें
तो, हाथ के नीचे बैश, wddial और iptables - और चलें!

USB 3G मॉडेम कनेक्शन


ऐसा भी होता है कि कुछ देशों में 3 जी इंटरनेट प्रदाता हैं जो लिनक्स का उपयोग करने के लिए कनेक्ट करने के लिए सेटिंग्स प्रदान नहीं करते हैं, जो सामान्य रूप से समझ में आता है - प्रदाता और लिनक्स दोनों की 'लोकप्रियता' खुद महसूस करती है। सभी कॉन्फ़िगरेशन अभी भी साइटों पर नहीं हैं, खासकर व्यक्तिगत कार्यक्रमों के लिए। तो, लातविया में, जहां मैं रहता हूं। दो प्रदाता हैं - LMT और Bite। ये दोनों Huawei मॉडेम के माध्यम से वायरलेस इंटरनेट प्रदान करते हैं, स्वाभाविक रूप से उन पर लॉक होते हैं, लेकिन यह बात नहीं है। वैसे, जहां मॉडेम और सर्वर का उपयोग करते हुए 3 जी है, वहां हर जगह इंटरनेट प्रदान करना आवश्यक है। क्या करें?

सबसे पहले, मॉडेम को लैपटॉप में प्लग करें। USB मॉडेम को लिनक्स में पता / dev / ttyUSB * के तहत उपकरणों के रूप में परिभाषित किया गया है, जहां * डिवाइस का सीरियल नंबर है, आमतौर पर पता / देव / ttyUSB0 जैसा दिखता है।
root@localhost:/# ls /dev/ttyUSB* ls: cannot access /dev/ttyUSB*: No such file or directory 

ओह। कुछ वह परिभाषित नहीं है। और यहाँ समस्या है (पहले से ही एक हजार बार बहस की गई): एक मॉडेम एक टू-इन-वन डिवाइस है। क्यों? यह एक ही फ्लैश ड्राइव में मॉडेम और बिल्ट-इन ड्राइव दोनों को विंडोज के लिए मॉडेम के साथ जोड़ती है (मैं कार्ड रीडर के बारे में चुप हूं)। लिनक्स में, डिफ़ॉल्ट रूप से, ड्राइव मोड चालू होता है, मॉडेम मोड नहीं। मॉडेम मोड को सक्षम करने के लिए, आपको usb-modwitch पैकेज को स्थापित करने की आवश्यकता है। उसके बाद, आपको udev (सेवा udev पुनरारंभ) को पुनरारंभ करने और मॉडेम को फिर से कनेक्ट करने की आवश्यकता है, 10 सेकंड प्रतीक्षा करें और फिर से मॉडेम उपकरणों की सूची प्रदर्शित करने के लिए कमांड निष्पादित करें:
 root@localhost:/# ls /dev/ttyUSB* /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 

जब निष्कर्ष इस तरह है, तो सब कुछ ठीक है और आप आगे बढ़ सकते हैं। हमारे पास तीन डिवाइस हैं। हमें केवल एक चीज की आवश्यकता है - नंबर 0 पर, हम अन्य 2 का उपयोग नहीं करते हैं - वे हमारे उद्देश्यों के लिए नहीं हैं। जहां तक ​​मुझे पता है, उनमें से एक का सबसे अधिक उपयोग एसएमएस भेजने के लिए किया जाता है, और दूसरा - नेटवर्क के सिग्नल स्तर और अन्य चीजों को देखने के लिए।

अब यह उस कार्यक्रम पर निर्भर है जो हमें जोड़ेगा। मैं wvdial प्रोग्राम का उपयोग करूंगा, इसके अलावा आपको पीपीपी पैकेज को स्थापित करने की आवश्यकता है, अगर यह पहले से स्थापित नहीं है।
 apt-get install ppp wvdial 
कई लोग कनेक्शन को कॉन्फ़िगर करने के लिए wvdialconf प्रोग्राम का उपयोग करने की सलाह देते हैं, लेकिन इस मामले में यह हमारी मदद नहीं करेगा। स्थापना के बाद, हमें /etc/wvdial.conf फ़ाइल संपादित करनी होगी। हम इसे से सभी सामग्री मिटा देते हैं, फिर हम फ़ाइल प्रारूप को समझते हैं। मैं ओकेटी प्रदाता के लिए ओकेटर इंटर्नेट दटेरा टैरिफ और हुआवेई ई 173 मॉडेम और बीइट के साथ अज्ञात टैरिफ और हुआवेई ई 1550 मॉडेम के साथ काम करने वाले कॉन्फिगरेशन प्रदान करूंगा।

 [Dialer lmt] Init1 = AT Init2 = AT&FE0V1X1&D2&C1S0=0 #Init3 = AT+CPIN="1219" Init4 = AT+CGDCONT=1,"IP","internet.lmt.lv" Phone = *99# ISDN = 0 Username = { } Password = { } Ask Password = 0 Modem = /dev/ttyUSB0 PPPD Options = noauth crtcts multilink usepeerdns lock defaultroute nobsdcomp nodeflate refuse-pap refuse-eap refuse-chap refuse-mschap +chap Idle Seconds = 3000 Modem Type = USB Modem Compuserve = 0 Auto DNS = 1 Dial Command = ATD Stupid Mode = 1 FlowControl = NOFLOW [Dialer bite] Init1 = AT Init2 = AT&FE0V1X1&D2&C1S0=0 #Init3 = AT+CPIN="1219" Init4 = AT+CGDCONT=1,"IP","internet" Phone = *99# ISDN = 0 Username = { } Password = { } Ask Password = 0 Modem = /dev/ttyUSB0 PPPD Options = noauth crtcts multilink usepeerdns lock defaultroute nobsdcomp nodeflate refuse-pap refuse-eap refuse-chap refuse-mschap +chap Idle Seconds = 3000 Modem Type = USB Modem Compuserve = 0 Auto DNS = 1 Dial Command = ATD Stupid Mode = 1 FlowControl = NOFLOW 


संक्षेप में - फ़ाइल को खंडों में विभाजित किया गया है। प्रत्येक अनुभाग एक मॉडेम प्रदाता संयोजन के लिए जिम्मेदार है। अनुभाग की शुरुआत लेबल [डायलर xxx] द्वारा इंगित की जाती है, जहां xxx उस लेबल का नाम है जिसके द्वारा हम यह संकेत देंगे कि कनेक्शन के लिए किन सेटिंग्स की आवश्यकता है। यदि हमें LMT सेटिंग्स की आवश्यकता है, तो हम wvdial lmt कमांड टाइप करेंगे, और [डायलर lmt] सेक्शन की सेटिंग्स का उपयोग किया जाएगा - सार स्पष्ट है। इन सेटिंग्स से हमें निम्नलिखित पर ध्यान देने की आवश्यकता है:

 InitX = AT-BLABLABLA 

InitX के बाद AT कमांड्स - उन कमांड्स जो wvdial कनेक्शन को बढ़ाने से पहले मॉडेम को भेजता है।

 #Init3 = AT+CPIN="1219" 

- यह सेटिंग, यदि आप शुरुआत में # हटाते हैं, तो मॉडेम को एक पिन कोड दर्ज करने के लिए एक कमांड भेजेगा। ईमानदार होने के लिए, इसे अक्षम करने की सलाह दी जाती है - मेरे लिए किसी अज्ञात कारण से यह कमांड सही तरीके से काम नहीं करता था। मॉडेम को केवल एक बार विंडोज कंप्यूटर से कनेक्ट करना आसान है और मॉडेम के साथ आने वाले प्रोग्राम का उपयोग करके कनेक्ट करते समय पिन-कोड प्रविष्टि को अक्षम करें।

 Init4 = AT+CGDCONT=1,"IP","internet" 

- प्रदाता द्वारा प्रदान किया गया APN पता यहां दर्ज किया गया है। आपको उद्धरण चिह्नों द्वारा अलग किए गए अंतिम दो भागों पर ध्यान देने की आवश्यकता है। पहला - आईपी - कनेक्ट करने के लिए आईपी पते को इंगित करता है यदि प्रदाता सेटिंग्स का अर्थ है कि एपीएन का आईपी पता उपयोग किया जाता है। यदि "इंटरनेट" या "internet.lmt.lv" फॉर्म के एक अक्षर पते का उपयोग किया जाता है, तो पहले भाग में आपको "आईपी" छोड़ने की आवश्यकता होती है, और दूसरे में - पत्र पता लिखें, जैसा कि उदाहरण में किया गया है।

 Phone = *99# 

- ठीक है, यहां सब कुछ मानक है - लगभग सभी प्रदाता इस फोन नंबर का उपयोग करते हैं, और ज्यादातर मामलों में इसे बदलने के लिए आवश्यक नहीं होगा।

 Username = { } Password = { } 

इंटरनेट से कनेक्ट करने के लिए उपयोगकर्ता नाम और पासवर्ड। यदि आप उन्हें खाली छोड़ना चाहते हैं, तो फॉर्म के ब्रेसिज़ को वहीं छोड़ दें। यदि नहीं, तो बिना कोष्ठक के, बस नाम और पासवर्ड वहां रखें।

 Modem = /dev/ttyUSB0 

डिवाइस का नाम जिसे हमें उपयोग करने की आवश्यकता है। 99% मामलों में, यह सिर्फ इतना ही होगा।

अन्य मोडेम के मामले में अन्य पैरामीटर अलग हो सकते हैं, लेकिन उपरोक्त दो संयोजनों के लिए, मॉडेम प्रदाता सब कुछ समस्याओं के बिना काम करता है।

एक बार फिर, मैं इस बारे में बात करूंगा कि कनेक्शन को मैन्युअल रूप से कैसे शुरू किया जाए। एक कमांड पर्याप्त है - wvdial xxx, जहां xxx कॉन्फ़िगरेशन फ़ाइल से प्रदाता का नाम है (मेरे लिए यह या तो एलएमटी या काट है।) हालांकि, जब wvdial शुरू होता है, तो यह पूरे कंसोल को "कब्जा" करता है, इसे कुछ और शुरू करने से रोकता है। इसके अलावा - यदि आप SSH विंडो में wvdial चलाते हैं और तुरंत सत्र तोड़ते हैं, तो wvdial समाप्त हो जाएगा। आपको या तो लगातार सत्र खुला रखना चाहिए, या स्क्रीन का उपयोग करना चाहिए, जो इस मामले में दो समस्याओं को एक बार में काफी प्रभावी ढंग से हल करता है - जो मैं सलाह देता हूं।
आदर्श रूप से क्या आवश्यक है? यह भी सीखें कि कैसे और आसानी से इन कार्यक्रमों को चलाएं। मेरे द्वारा वर्णित योजना के उपयोग में, कुछ बारीकियां हैं:

1) कनेक्शन हर बार मैन्युअल रूप से शुरू किया जाना चाहिए।
- यह सिस्टम कॉन्फ़िगरेशन फ़ाइलों को थोड़ा संशोधित करने के लिए पर्याप्त है, अर्थात् समान / आदि / नेटवर्क / इंटरफेस:
 auto ppp0 iface ppp0 inet wvdial provider lmt #  ppp0  #    wvdial   lmt. ,   . 

मेरे लिए, यह विधि उपयुक्त नहीं है - यह सुनिश्चित करने के लिए डिज़ाइन किया गया है कि प्रदाता नहीं बदलता है, लेकिन यह अधिक संभावना है कि किसी और को इसकी आवश्यकता होगी। और यह बहुत मज़बूती से काम नहीं करता है, मेरे अनुभव में, udv को कॉन्फ़िगर करना बेहतर है। अपने लिए, मुझे उपयुक्त समाधान नहीं मिला - इसके लिए एक या किसी अन्य प्रदाता को सम्मिलित सिम कार्ड की संबद्धता निर्धारित करना आवश्यक होगा, और इसका उपयोग करने वाला समाधान बहुत मुश्किल हो जाता है।
ठीक है, अगर आपको अभी भी लगातार कनेक्ट होने की आवश्यकता है, भले ही कुछ छोटी गाड़ी हो और मॉडेम नेटवर्क से डिस्कनेक्ट हो गया है? तो ठीक है, निम्नलिखित स्क्रिप्ट में मदद मिलेगी। यह देखने के लिए लगता है कि क्या wvdial प्रक्रियाओं की सूची में है, और यदि नहीं, तो यह ifup ppp0 करता है, जो इंटरफेस में उपरोक्त सेटिंग्स के साथ मिलकर, फिर से wvdial को कॉल करना चाहिए:
अपने आप को क्रोन में रखो
 #!/bin/bash # (c)2009 John de Graaff, rewritten by CRImier # This script checks if wvdial is running. # If it's not, it brings ppp0 up and down. # It is assumed that ifup ppp0 starts wvdial if test "$(pidof wvdial)" != "" ; then exit 0 else logger "wvdial not running. Better restart ppp0." /sbin/ifdown ppp0 sleep 2 /sbin/ifup ppp0 logger "ppp0 restarted." exit 0 


2) जब आप लैपटॉप को चालू करते हैं, अगर सिस्टम स्टार्टअप के दौरान मॉडेम जुड़ा हुआ था, तो कभी-कभी फ्रीज होते हैं, जो निम्न में व्यक्त किए जाते हैं - जब wvdial का उपयोग करके कनेक्ट करने का प्रयास किया जाता है, जैसे लाइनें
 --> Cannot open /dev/ttyUSB0: Device or resource busy 

, और कनेक्ट नहीं कर सकता। इसका इलाज सिर्फ एक बार किया जाता है - आपको बस मॉडेम को अनप्लग और प्लग करने की आवश्यकता है, और फिर कनेक्शन को मैन्युअल रूप से शुरू करें, लेकिन आप समझते हैं कि कंप्यूटर तक भौतिक पहुंच के अभाव में, यह कार्य असंभव हद तक जटिल है।
- अब तक, मैं एक सामान्य समाधान प्रदान नहीं कर सकता, क्योंकि मैंने खुद अभी तक इसे नहीं लिया है। ऐसा माना जाता है कि ऐसा इसलिए है क्योंकि सिस्टम स्टार्टअप पर मॉडेम को कंप्यूटर में डाला जाता है तो usb-modwitch प्रोग्राम सही ढंग से काम नहीं करता है। जाहिरा तौर पर, आपको udv में खुदाई करने या usb-modwitch के लिए कोई विशेष पैरामीटर निर्दिष्ट करने की आवश्यकता है।

3) खराब रिसेप्शन की स्थितियों में, कनेक्शन अक्सर कट जाता है
- यह बहुत आसान है। तथ्य यह है कि यूएसबी पोर्ट की आउटपुट करंट पर एक सीमा होती है, जिसके ऊपर, जहां तक ​​मुझे याद है, पोर्ट कट जाता है। जाहिरा तौर पर, नेटवर्क सिग्नल के खराब रिसेप्शन की स्थितियों में, मॉडेम रिसीवर और ट्रांसमीटर की शक्ति बढ़ाने की कोशिश कर रहा है, और ऐसा होता है कि मॉडेम पोर्ट को झेलने की तुलना में अधिक वर्तमान का उपभोग करना शुरू कर देता है - पोर्ट बंद हो जाता है, मॉडेम बंद हो जाता है, कनेक्शन स्थायी रूप से कट जाता है। मैं केवल सलाह दे सकता हूं, उदाहरण के लिए, बस बाहरी शक्ति के साथ एक यूएसबी हब लें, या मॉडेम के लिए एक अलग पावर एडाप्टर खरीदें और इसे केबल में मिलाएं।

4) उस पोर्ट को बदलने की क्षमता जिस पर आपको डिवाइस तक पहुंचने की आवश्यकता है।
जैसा कि मैंने पहले ही उल्लेख किया है, आमतौर पर एक डिवाइस का उपयोग कॉन्फ़िगरेशन के दौरान किया जाता है - / dev / ttyUSB0। लेकिन, जैसा कि फ्रीज़र ने कहा है, ऐसे हालात हैं जब बंदरगाह बदलते हैं। उदाहरण के लिए:एक बेकार कनेक्शन को डीबग करते समय, आपको इस तरह के अवसर के बारे में नहीं भूलना चाहिए। यदि, उदाहरण के लिए। जब wvdial pppd शुरू नहीं होता है, तो यह सोचने का एक अवसर है - क्या पोर्ट खुद काम करता है और क्या यह पोर्ट है? फिर आपको कॉन्फ़िगर में संख्याओं के साथ प्रयोग करना होगा जब तक कि मॉडेम अंत में कनेक्ट नहीं हो जाता।

हमारे सर्वर पर इंटरनेट दिखाई देने के बाद, यह केवल वाई-फाई नेटवर्क के माध्यम से मॉडेम से इंटरनेट के वितरण को कॉन्फ़िगर करने के लिए रहता है।

नेट


यदि कंप्यूटर में दो नेटवर्क इंटरफेस हैं, तो इसका मतलब यह नहीं है कि बॉक्स से बाहर आप इंटरनेट को एक से दूसरे में सुरक्षित रूप से वितरित कर सकते हैं। हालांकि - सब कुछ इतना जटिल नहीं है, अक्सर यह केवल कुछ ही सेटिंग्स लेता है। बेशक, इन सेटिंग्स को प्रत्येक पंक्ति के सार में तल्लीन किए बिना याद रखना मुश्किल है, लेकिन इसके लिए यह लेख है! मुझे एक बग-मुक्त स्क्रिप्ट मिली, जो इस स्थिति के लिए सबसे उपयुक्त है, मैं इसे लिंक नहीं कर सकता, क्योंकि इस पर पाई गई स्क्रिप्ट उन सबसे छोटी और स्पष्ट है, जिनका मैंने सामना किया है - बाकी कई पन्नों पर एक-दो आईपीएल नियमों को फैलाने का प्रबंधन करते हैं ... सबसे पहले, मैं देखूंगा। मेरी जरूरतों के अनुरूप बदलने के लिए क्या करना आवश्यक होगा:

स्क्रिप्ट मिली
स्पॉइलर:
 #!/bin/sh PATH=/usr/sbin:/sbin:/bin:/usr/bin # # delete all existing rules. # iptables -F iptables -t nat -F iptables -t mangle -F iptables -X # Always accept loopback traffic iptables -A INPUT -i lo -j ACCEPT # Allow established connections, and those not coming from the outside iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m state --state NEW -i ! eth1 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow outgoing connections from the LAN side. iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT # Masquerade. iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE # Don't forward from the outside to the inside. iptables -A FORWARD -i eth1 -o eth1 -j REJECT # Enable routing. echo 1 > /proc/sys/net/ipv4/ip_forward 

हम्म एच.एम. यह स्क्रिप्ट पहले से ही थोड़ी पुरानी है - iptables कमांड में से एक पर शपथ लेता है और निष्पादित नहीं करना चाहता है, और जिस तरह से लेख में इसे ऑटोलड में डालने की कोशिश करता है वह भी हमेशा मेरे अभ्यास में काम नहीं करता है। इसके अलावा, एक समस्या है - यह स्क्रिप्ट उन परिस्थितियों के लिए महान है जहां कुछ भी बदलने वाला नहीं है। अगर ऐसा होता, तो मैं उस पर iptables-persistent और लेख को समाप्त कर देता। लेकिन कभी-कभी मैं ppp0 इंटरफ़ेस के माध्यम से इंटरनेट प्राप्त करने जा रहा हूं, कभी-कभी eth0 द्वारा, और कभी-कभी wlan1 द्वारा सामान्य रूप से, और मैं एक कंसोल कमांड के साथ इंटरफ़ेस बदलना चाहता हूं। तो, उदाहरण में eth1 बाहरी इंटरफ़ेस है, और eth0 आंतरिक इंटरफ़ेस है। हम उन्हें चर के साथ बदल देंगे ताकि यदि आवश्यक हो तो एक पंक्ति को बदलना संभव हो, और पूरे पाठ को संपादित न करें। मैं यह भी चाहता हूं कि अंतिम चयनित बाहरी इंटरफ़ेस को कंप्यूटर के पुनरारंभ होने पर बचाया जाए। फिर क्या? सब कुछ बदलने की जरूरत है!
उद्देश्यों:
  1. बाहरी कमांड के नाम के रूप में पहली कमांड लाइन तर्क को स्वीकार करें, ifconfig कमांड का उपयोग करते हुए नाम को प्रमाणित करें;
  2. चयनित इंटरफ़ेस की बचत को कुछ फ़ाइल में / आदि में जोड़ें और अंतिम इंटरफ़ेस का चयन करने के लिए कुंजी बनाएं, या बेहतर, यदि कोई तर्क के रूप में कोई इंटरफ़ेस नाम नहीं है।
  3. स्टार्टअप और $ PATH में इसे खूबसूरती से रटना है।

आखिर में क्या निकला?

 #!/bin/bash #NAT script from www.debian-administration.org, modified by CRImier # Exit status 0 if operation is correct # Exit status 1 if trying to use last interface used when running for the first time # Exit status 2 if interface doesn't exist EIF='' IIF='wlan0' PATH=/usr/sbin:/sbin:/bin:/usr/bin LOGFILE=/etc/nat-if.conf touch $LOGFILE # #Checking command-line arguments and setting $EIF variable according to them # if [[ $1 == "" ]] #If there's no arguments, just use previous settings. then EIF=`cat $LOGFILE` if [[ $EIF == "" ]] #Just check for an empty file! then echo "Please, specify interface name for first usage using 'firewall interface', eg 'firewall eth0'" exit 1 fi elif [ $1 == "help" ] #Output help message then echo "NAT script" echo "(c) www.debian-administration.org, modified by CRImier" echo "Usage: 'firewall interface', 'firewall info' or simply 'firewall' to use last interface firewall was set on." echo "Argument is external interface name, internal interface name is hard-coded in the script" exit 0 elif [ $1 == "info" ] #Print interface firewall is set on then cat $LOGFILE exit 0 else ifconfig $1 &>/dev/null if [ $? == 0 ] then #Interface name must be correct as ifconfig gives 0 exit code EIF=$1 echo $EIF > $LOGFILE else echo "Incorrect interface name" exit 2 fi fi # #$EIF is set correctly, let's apply the rules: # iptables -F iptables -t nat -F iptables -t mangle -F iptables -X iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $EIF -o $IIF -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $IIF -o $EIF -j ACCEPT iptables -t nat -A POSTROUTING -o $EIF -j MASQUERADE iptables -A FORWARD -i $EIF -o $IIF -j REJECT echo 1 > /proc/sys/net/ipv4/ip_forward echo "Firewall started." 

टिप्पणियाँ अंग्रेजी में लिखी गई थीं - इसलिए परिचित थे। यदि अनुरोध हैं, तो मैं इसका अनुवाद कर सकता हूं।

खैर, अनिवार्य भाग को न भूलें:
 chmod +x /etc/init.d/user-autorun 
ठीक है, स्क्रिप्ट हमारे लिए तैयार है। जैसा कि आप समझ सकते हैं, चार कॉल विकल्प हैं - फ़ायरवॉल (अंतिम इंटरफ़ेस का उपयोग किया जाता है), फ़ायरवॉल our_interface, फ़ायरवॉल जानकारी (वर्तमान इंटरफ़ेस जिस पर NAT कॉन्फ़िगर किया गया है) या फ़ायरवॉल मदद प्रदर्शित करता है। केवल ऑटोलैड और $ PATH बचा है।

 echo $PATH >/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

स्थान निर्दिष्ट किए बिना फ़ायरवॉल कमांड के साथ स्क्रिप्ट को कॉल करने के लिए, आपको इसे PATH में निर्दिष्ट फ़ोल्डरों में से एक में रटना होगा। मैं धार्मिक कारणों से / usr / स्थानीय / बिन पसंद करता हूं। स्क्रिप्ट का पूरा रास्ता / usr / स्थानीय / बिन / फ़ायरवॉल होगा, लेकिन इसे कंसोल से कॉल करना हमेशा फ़ायरवॉल कमांड के साथ किया जा सकता है।

स्टार्टअप


और अब - ऑटोलॉड, इसके साथ और अधिक कठिन। मैं तुरंत एक ऑटोलॉड स्क्रिप्ट के निर्माण का वर्णन करूंगा जिसमें आप कुछ भी रटना कर सकते हैं। यह प्रणाली के साथ शुरू होगा, nooo ...

आप केवल एक ऑटोलॉड फ़ाइल नहीं ले सकते और बना सकते हैं। एक समस्या है - डेबियन ने कुछ समय के लिए स्टार्टअप फ़ाइलों के लिए अपनी आवश्यकताओं को संशोधित किया है। यह केवल एक फ़ाइल बनाने के लिए पर्याप्त नहीं है, इसे एक विशेष तरीके से प्रारूपित करने की आवश्यकता है:
  1. पहली समस्या एलएसबी हेडर है। यह स्टार्टअप फाइल हैडर है। इसकी आवश्यकता है क्योंकि स्टार्टअप घटकों को एक निश्चित क्रम में निष्पादित किया जाना चाहिए, क्योंकि उनमें से कुछ एक-दूसरे पर निर्भर हैं। मान लीजिए कि आपके पास ऑटोलैड में दो स्क्रिप्ट हैं - उनमें से एक को एक नेटवर्क फ़ोल्डर माउंट करना होगा, और दूसरा - इसके लिए फ़ाइलों का बैकअप लेने के लिए। स्वाभाविक रूप से, पहले आपको पहले पूरा करने की आवश्यकता है, और फिर दूसरा, चूंकि दूसरा पहले पर निर्भर करता है। ऐसी निर्भरताओं को इंगित करने के लिए, बूट फ़ाइल के हेडर का उपयोग किया जाता है। हालाँकि, मैं नमूना स्टार्टअप फ़ाइल में जो शीर्षक डालूंगा वह पर्याप्त होगा।
  2. दूसरी समस्या यह है कि सिस्टम स्टार्टअप पर स्टार्टअप में किसी भी स्क्रिप्ट को कमांड / etc / init.d / script start के साथ कहा जाता है, और जब कंप्यूटर को बंद किया जाता है, कमांड / etc / init.d / script स्टॉप के साथ। हमें इन मामलों को संभालने के लिए शर्तों को जोड़ने की आवश्यकता है।
मैंने इसे बस किया - मैंने एक आधार के रूप में /etc/init.d/ में लोगों से स्क्रिप्ट ली - उन्हें नियमों के अनुसार बनाया जाना चाहिए, फिर मैंने इस स्क्रिप्ट का अध्ययन किया और उन सभी चीजों को काट दिया, जिनसे इसकी आवश्यकता नहीं थी। दो जगह बची हैं जिन्हें बदलने की आवश्यकता है - सिस्टम शुरू होने पर निष्पादित होने वाली कमांड के लिए एक स्थान और कंप्यूटर के शट डाउन होने पर निष्पादित होने वाली कमांड के लिए एक स्थान। हालाँकि, अब आप सब कुछ देखेंगे:

 #!/bin/sh ### BEGIN INIT INFO # Provides: firewall # Required-Start: $network $local_fs $remote_fs # Required-Stop: $network $local_fs $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # X-Interactive: false # Short-Description: Start user autorun events ### END INIT INFO case "$1" in start) echo "Starting user autorun events" /usr/local/bin/firewall #  ,       ;; stop) echo "Stopping user autorun events" #  ,        # NAT   ;; *) echo "Usage: /etc/init.d/user-autorun {start|stop}" exit 1 ;; esac exit 0 

फिर से, निष्पादन अधिकार दें:
 chmod +x /etc/init.d/user-autorun 
स्टार्टअप फ़ाइल में, निष्पादन योग्य फ़ाइल के लिए पूर्ण पथ निर्दिष्ट करना बेहतर होता है, क्योंकि अन्यथा जब कभी-कभी लोड होता है तो "फ़ायरवॉल: कमांड नहीं मिला" जैसी समस्याएं होती हैं।

हमने इस फ़ाइल को /etc/init.d/ फ़ोल्डर में रखा है। हमारी स्टार्टअप फ़ाइल का पूर्ण पथ /etc/init.d/user-autorun है। यह केवल उस सिस्टम को इंगित करने के लिए बना रहता है जिसे इस फ़ाइल को बूट समय पर निष्पादित किया जाना चाहिए:
 update-rc.d user-autorun defaults 
एक ही समय में यह कमांड यह भी जांचता है कि क्या स्क्रिप्ट शीर्षक आपकी ज़रूरत के अनुसार मेल खाता है, इसलिए - यदि इसके साथ कोई समस्या है, तो कुछ भी ऑटोलॉड में नहीं डाला जाएगा और आपको त्रुटियों से निपटना होगा। सब कुछ, स्टार्टअप स्क्रिप्ट काम करने के लिए तैयार है और हर बार सिस्टम शुरू होने के बाद, रूटिंग स्क्रिप्ट शुरू करते हुए निष्पादित किया जाएगा। बेशक, इस समाधान की अपनी कमियां हैं, जैसे कि किसी भी तरह इंटरनेट पर उपयोगकर्ता की पहुंच को नियंत्रित करने की असंभवता, स्क्रिप्ट को बंद / चालू करने के अलावा, लेकिन पोर्टेबल सर्वर के मामले में प्लस एक विशाल एक के लिए यह बस काम करता है, बिना हस्तक्षेप के और स्थिर और वैकल्पिक प्रणाली। मेरे पास अभी भी जरूरतों पर विचार करने का समय है।
एक अच्छी सेटिंग है!

अगला लेख सबसे अधिक संभावना है कि वेबफ़ीड का उपयोग करके एक साधारण पायथन वेब इंटरफ़ेस लिखना होगा। इस इंटरफ़ेस के माध्यम से NAT का प्रबंधन करना संभव होगा (हालाँकि लिखित स्क्रिप्ट की क्षमताओं से अधिक नहीं), wvdial चालू / बंद करें, एसएमएस भेजें और मॉडेम की स्थिति देखें ... और जो भी आपके हाथों तक पहुंचे। अब तक मैं मॉडेम के साथ बातचीत करने और इंटरफ़ेस पर इस तरह से सोचने के लिए एक स्क्रिप्ट लिख रहा हूं कि मोबाइल उपकरणों पर भी इसका उपयोग करना आसान है। स्टॉक में भी cpufreqd का उपयोग करके लैपटॉप ऊर्जा-बचत सेटिंग्स स्थापित करने पर लगभग तैयार लेख है। क्या इसे फैलाना इसके लायक है, क्या यह प्रासंगिक होगा?
तर्कपूर्ण आलोचना और लेख के परिवर्धन का जोरदार स्वागत है।

Source: https://habr.com/ru/post/In188886/


All Articles