はじめに
Proxy環境下で検証を行っていると、特定の宛先への通信はProxyを経由して欲しくないと言う場面があります。
通信先が一意に決まっていれば良いのですが、特定のネットワーク宛の通信はProxyを通したくないと言うケースも発生するかと思います。
調べてみたところLinuxの環境変数no_proxy
でネットワークアドレスを指定する方法が見当たらなかったので記事にさせていただきました。
※あまりに見つからなすぎて不安なので、間違い等あればコメントいただけると有難いです。
2020/09/23_補足(twitterで親切な方が教えてくれました)
Linuxに設定するno_proxy
はあくまで環境変数でしかありません。
実際にはcurlやyumなどLinux上で動作するソフトウェアがno_proxy
と言う環境変数を読み込んで動作する形になります。
なので書き方次第であるソフトウェアでは意図した通り認識してくれたけど別のソフトウェアでは意図した通り認識してくれない、なんてことも起こりえます。
以下の例で試したのはcurlによるHTTPリクエスト時にno_proxy
設定をネットワークアドレスで読み込ませるケースなので使用するソフトウェアによっては意図した通りに読み込まないかもしれません。
no_proxyはOSではなくソフトウェアレベルでCIDR形式を解釈してくれるかが異なるので鬼門ですね
— ぐるっと🔁 (@grugrut) September 23, 2020
環境
Ubuntu 18.04.4 LTS
(CentOS 7でも同様の動きでした)
設定方法
自身の環境では環境変数no_proxy
で以下のようにネットワークアドレスを指定(192.168.2.0/24
)することで、
そのネットワーク宛通信はProxyを経由せずに行うことができているように見えました。
~/.bashrc
export http_proxy=http://proxy.example.com:8080/
export https_proxy=http://proxy.example.com:8080/
export no_proxy=127.0.0.1,localhost,192.168.2.0/24
参考
自身が最初に見つけた以下の記事では上記とは異なる方法でネットワークアドレスを指定していました。
ただこのやり方だと対象が多くなった場合に引数が長すぎてvimなどが起動できなくなる問題が発生してしまいます。
no_proxy にネットワークアドレスとかワイルドカードを指定しても期待通りに動かない、でどうするかというお話
https://sechiro.hatenablog.com/entry/2013/08/06/no_proxy_%E3%81%AB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%A8%E3%81%8B%E3%83%AF%E3%82%A4%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89%E3%82%92