web-dev-qa-db-ja.com

no_proxy環境変数にネットワーク範囲を設定する

プロキシを使用しているネットワークにいます。私はあちこちにたくさんのスクリプトを使用するマシンを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でテストしています。接続したいIPアドレスが何であれ、常にプロキシにクエリを送信しようとします。

  • 多くのスクリプトがすべてのシステムのどこにでもあるので、--no-proxyオプションは実際にはオプションではありません。システム全体に設定したい。
61
SamK

あなたはそれを間違った方法で見ています。 no_proxy環境変数には、プレフィックスではなくドメインサフィックスがリストされます。 ドキュメント から:

no_proxy:この変数には、ドメイン拡張プロキシのコンマ区切りのリストを含める必要があります使用しないでください

したがって、IPには2つのオプションがあります。

1)各IPを完全に追加します。

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

2)wgetの名前をwget-originalに変更し、ラッパースクリプト(wgetと呼ばれる)を記述して、指定されたURLのホストのIPを検索し、プロキシを使用するかどうかを決定します:

#!/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;
45
janmoesen

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.

したがって、変数にはIP範囲ではなくドメインのリストを含める必要があります。ローカルマシンの適切なローカルエイリアスを/etc/hostsファイルに設定する必要があります。

これとは別に、環境変数を設定しても、プロキシが使用される、または使用されないという保証は行われないことに注意してください。 mayをサポートするプログラムが使用する情報です。

19
rozcietrzewiacz

以下は、janmoesenのソリューションに基づいた、少し単純な(1行の)アプローチです。

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"

sedは10.1.{1..255}.{1..255}の展開から渡されたすべての引数について、彼のコードまたは私のいずれかでチョークを使用しています。したがって、本当に256 * 256のIPアドレスに拡張する必要がある場合は、Cory Ringdahlのアプローチをさらに適合させることができるかもしれませんが、256程度しか必要ない場合は、これらのいずれかが完全に機能するはずです。

2オクテットが拡張されたバージョンは次のようになると思います。

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

しかし、iTermは引数リストが長すぎるというエラーを表示しているので、これを機能させるための解決策があるかどうか確かには言えません...

13
iconoclast

正確な解決策ではありませんが、問題を解決する可能性があります。プロキシの外部から何かにアクセスする場合、IPアドレスを直接使用せずにDNS名を使用すると想定する場合は、次のように設定できます。

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

私の知る限り、トップドメインは数字で終わっていないので、数字の場合、それはIPアドレスである必要があります。

12
Lars Berntzon