it-swarm-eu.dev

Nastavte síťový rozsah v proměnné prostředí no_proxy

Jsem v síti pomocí proxy. Mám stroje, které tu a tam používají spoustu skriptů, které se navzájem přistupují přes HTTP.

  • Síť je 10.0.0.0/8.
  • Moje proxy je 10.1.1.1:81, takže jsem ji nastavil odpovídajícím způsobem:

    export http_proxy=http://10.1.1.1:81/
    
  • Chci vyloučit svůj vlastní rozsah, který má být přístupný pomocí proxy. Vyzkoušel jsem jakoukoli dostupnou kombinaci.

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

Žádná z výše uvedených prací!

Testuji s wget a vždy se pokusí dotazovat proxy, bez ohledu na IP adresu, ke které se chci připojit.

  • Protože spousta skriptů leží všude ve všech systémech, --no-proxy volba ve skutečnosti není možnost. Chci jej nastavit do širokého systému.
61
SamK

Díváš se na to špatně. The no_proxy proměnná prostředí uvádí přípony domény, nikoli předpony. Od dokumentace :

no_proxy: Tato proměnná by měla obsahovat seznam oddělených čárkami, pro které by proxy neměla být použita.

Pro adresy IP tedy máte dvě možnosti:

1) Přidejte každou IP v plné výši:

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

2) Přejmenujte wget na wget-original a napište wrapper skript (nazvaný wget), který vyhledá IP hostitele dané URL a určí, zda by měl použít proxy server:

#!/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 "[email protected]";
else
   wget-original "[email protected]";
fi;
45
janmoesen

info wget říká:

 `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.

Proměnná by tedy měla obsahovat seznam domén, nikoli rozsahy IP. Budete muset nastavit správné místní aliasy pro místní stroje v /etc/hosts soubory.

Kromě toho mějte na paměti, že nastavení proměnné prostředí ne záruka, že proxy bude nebo nebude použit. Je to jen informace, kterou může používat programy, které ji podporují.

19
rozcietrzewiacz

Tady je o něco jednodušší (jednořádkový) přístup založený na janmoesenově řešení.

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

který byl dále vylepšen na základě vstupu Cory Ringdahlové:

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

sed tlumivky na všechny argumenty předané expanzí 10.1.{1..255}.{1..255}, buď v jeho kódu, nebo v mém. Takže pokud opravdu potřebujete rozšířit na 256 * 256 IP adres, možná budete moci dále přizpůsobit přístup Cory Ringdahla, ale pokud potřebujete pouze 256 nebo tak, některá z nich by pro vás měla fungovat dokonale.

Hádám, že verze, kde jsou rozšířeny 2 oktety, bude vypadat asi takto:

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

ale iTerm mi dává chyby v tom, že seznamy argumentů jsou příliš dlouhé, takže nemůžu s jistotou říci, zda existuje řešení, jak tuto práci provést ...

13
iconoclast

Není to přesně správné řešení, ale může to vyřešit váš problém. Pokud předpokládáte, že přístup k čemukoli z vnějšku proxy bude používat DNS jména a ne přímo pomocí IP adres, můžete to nastavit takto:

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

Pokud vím, žádná top doména nekončí číslem, takže pokud ano, musí to být IP adresa.

12
Lars Berntzon