No_proxy वातावरण चर में एक नेटवर्क रेंज सेट करें


52

मैं एक प्रॉक्सी का उपयोग कर नेटवर्क में हूं। मुझे यहाँ बहुत सारी लिपियों का उपयोग करके मशीनें मिली हैं और HTTP पर एक-दूसरे को एक्सेस कर रही हैं।

  • नेटवर्क 10.0.0.0/8 है।
  • मेरा प्रॉक्सी 10.1.1.1:81 है, इसलिए मैंने इसे उसी हिसाब से सेट किया:

    export http_proxy=http://10.1.1.1:81/
  • मैं अपनी खुद की सीमा को प्रॉक्सी से एक्सेस करना चाहता हूं। मैंने उपलब्ध किसी भी संयोजन की कोशिश की।

    export no_proxy='10.*'
    export no_proxy='10.*.*.*'
    export no_proxy='10.0.0.0/8'
    

उपरोक्त कार्य में से कोई भी नहीं!

मैं परीक्षण कर रहा हूं wgetऔर यह हमेशा प्रॉक्सी को क्वेरी करने की कोशिश करता है, जो भी आईपी एड्रेस मैं कनेक्ट करना चाहता हूं।

  • चूंकि सभी सिस्टम में बहुत सारी स्क्रिप्ट्स निहित हैं, इसलिए --no-proxyविकल्प वास्तव में एक विकल्प नहीं है। मैं इसे सिस्टम वाइड सेट करना चाहता हूं।

1
यह लगभग 2019 है और CIDR को no_proxyपर्यावरण चर में लगाने का कोई तरीका नहीं है ? क्या लीनस टोरवेल्स !!
7_R3X

4
@ 7_R3X यह GNU wget है इसलिए मुझे उम्मीद है कि आप रिचर्ड स्टालमैन को शाप देना चाहते थे?
जैकब बोचेंस्की

जवाबों:


43

आप इसे गलत तरीके से देख रहे हैं। no_proxyवातावरण चर डोमेन प्रत्यय, नहीं उपसर्गों सूचीबद्ध करता है। से प्रलेखन :

no_proxy: इस चर में डोमेन एक्सटेंशन प्रॉक्सी की अल्पविराम से अलग की गई सूची होनी चाहिए जिसका उपयोग नहीं किया जाना चाहिए ।

तो आईपी के लिए, आपके पास दो विकल्प हैं:

1) पूर्ण में प्रत्येक आईपी जोड़ें:

printf -v no_proxy '%s,' 10.1.{1..255}.{1..255};
export no_proxy="${no_proxy%,}";

2) का नाम बदलें wgetकरने के लिए wget-originalऔर एक आवरण स्क्रिप्ट (बुलाया बारे में wget) है कि दिए गए URL के होस्ट के लिए आईपी को देखता है, और निर्धारित करता है कि यह प्रॉक्सी या नहीं का उपयोग करना चाहिए:

#!/bin/bash
ip='';
for arg; do
   # parse arg; if it's a URL, determine the IP address
done;
if [[ "$ip" =~ ^10\.1\. ]]; then
   wget-original --no-proxy "$@";
else
   wget-original "$@";
fi;

बहुत बहुत धन्यवाद, मैं अपनी पत्नी को लपेटने जा रहा हूं (और आईपी पते के बजाय होस्टनाम का उपयोग करता हूं)।
सैम

9
क्या no_proxy जोखिम प्रदर्शन समस्याओं में 255 * 255 पते होंगे?
jtpereyda

@ डैफराज़मैन: जो अच्छी तरह से हो सकता है। आखिरकार, यह लगभग 800 किलोबाइट बड़ा है, जो पर्यावरण चर के लिए कुछ हद तक चरम है। यह इस बात पर भी निर्भर करता है कि आपका वातावरण कितना बड़ा हो सकता है। इस चरम मामले के लिए, मैं आवरण दृष्टिकोण की सिफारिश करूंगा।
जनमोसेन

4
प्रत्येक IP को पूर्ण रूप से न जोड़ें - यह बहुत लंबा होगा और आप किसी भी कमांड को bash में निष्पादित नहीं कर पाएंगे।
रोस

5
कभी नहीं, यह किसी भी आदेश के लिए बहुत लंबा कुछ उत्पन्न करेगा, और, यदि आप इसे /etc/environmentफ़ाइल में रखते हैं, तो यह आपके सर्वर को तोड़ सकता है।
थॉमस डेकाक्स

15

info wget कहते हैं:

 `no_proxy'
     This variable should contain a comma-separated list of domain
     extensions proxy should _not_ be used for.  For instance, if the
     value of `no_proxy' is `.mit.edu', proxy will not be used to
     retrieve documents from MIT.

तो चर में आईपी ​​रेंज नहीं, डोमेन की एक सूची होनी चाहिए । आपको फ़ाइल (नों) में अपनी स्थानीय मशीनों के लिए उचित स्थानीय उपनाम सेट करने की आवश्यकता होगी ।/etc/hosts

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


यदि तार इस तरह से लागू होता है जैसे कि कर्ल करता है - और मुझे संदेह है कि यह करता है - तो कोई अंतर नहीं है अगर यह आईपी पता या डोमेन नाम है, दोनों को तार के रूप में माना जाता है - देखें github.com/curl/curl/issues-1208
पियोट्र डोब्रोगोस्ट

12

बिल्कुल सही समाधान नहीं है, लेकिन यह आपके लिए समस्या का समाधान कर सकता है। यदि आप मानते हैं कि प्रॉक्सी के बाहर से कुछ भी एक्सेस करना DNS-नामों का उपयोग करना होगा और सीधे आईपी-पतों का उपयोग नहीं करना होगा, तो आप इसके लिए उपयोग कर सकते हैं:

export no_proxy=0,1,2,3,4,5,6,7,8,9

जहाँ तक मुझे पता है, कोई भी शीर्ष डोमेन किसी संख्या के साथ समाप्त नहीं होता है इसलिए यदि ऐसा होता है, तो यह एक आईपी-पता होना चाहिए।


7
यह एक बहुत ही स्मार्ट समाधान है :) दुर्भाग्य से, यह किसी भी आईपी के लिए प्रॉक्सी को बाईपास करेगा, न केवल स्थानीय आईपी के लिए ... :( कोई रास्ता नहीं है (2018 में) "noproxy" चर में आईपी रेंज या CIDR निर्दिष्ट करने के लिए?
सोरिन पोस्टेलनिकु

डेटा सेंटर सर्वर के लिए यह एक बहुत ही चतुर चाल है। साइड इफेक्ट है, लेकिन स्वीकार्य है।
नोट्स-जेज

यह अपने आप के लिए काम नहीं किया ..
एरिक

12

यहां जानस्मेन के समाधान के आधार पर थोड़ा सरल (एक-पंक्ति) दृष्टिकोण है।

export no_proxy=`echo 10.1.1.{1..255} | sed 's/ /,/g'`

जिसे Cory Ringdahl के इनपुट के आधार पर और बेहतर बनाया गया है:

export no_proxy="`echo 10.1.1.{1..254},` 10.1.1.255"

10.1.{1..255}.{1..255}या तो उसके कोड या खदान के विस्तार से पारित सभी तर्कों पर sed चुटकुले । इसलिए यदि आपको वास्तव में 256 * 256 आईपी पते तक विस्तार करने की आवश्यकता है, तो आप Cory Ringdahl के दृष्टिकोण को और अधिक अनुकूलित करने में सक्षम हो सकते हैं, लेकिन यदि आपको केवल 256 या तो की आवश्यकता है, तो इनमें से किसी को भी आपके लिए पूरी तरह से काम करना चाहिए।

मैं उस संस्करण का अनुमान लगा रहा हूं जहां 2 ओकटेट्स विस्तारित हैं, कुछ इस तरह दिखाई देंगे:

export no_proxy="`echo 10.1.{1..255}.{1..254},` 10.1.255.255"

लेकिन iTerm मुझे तर्क सूचियों के बारे में त्रुटियों को बहुत लंबा दे रहा है, इसलिए मैं यह सुनिश्चित करने के लिए नहीं कह सकता कि क्या यह काम करने के लिए कोई समाधान है ...


1
चारों ओर हो करके sed का उपयोग कर सकते हैं"export no_proxy=`echo 10.1.1.{1..254},`10.1.1.255"
कोरी Ringdahl

अच्छा ... मैं कॉमा के बाद रिक्ति को सुसंगत बनाने के लिए इसे थोड़ा मोड़ रहा हूं, और मैं इसे जोड़ूंगा।
आइकनोकॉस्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.