DockerでProxyscrape プロキシを使用する方法

ガイド, ハウツー, 7-0720245分で読める

特定のユースケースでは、プロキシをネイティブにサポートしていないプログラムでトラフィックをプロキシする必要がある。前回のブログでは、Windows上でプロキシを利用する方法について説明したが、Linuxや、柔軟性を高めるためにDockerコンテナでもプロキシを利用するケースはたくさんある。

このブログ記事では、xjasonlyu/tun2socksDockerコンテナを使ってDockerコンテナでプロキシを使う方法について説明します。
tun2socksは軽量でポータブルなネットワーク・トンネリングツールで、プロキシサーバーを経由してトラフィックをルーティングすることができます。Goで書かれており、スタンドアロンの実行ファイルとしても、Dockerコンテナとしても利用できる。
このガイドでは、Dockerでの使い方に焦点を当て、他のDockerコンテナを接続してプロキシを使わせる方法を説明する。

まず、プロキシを行う最初のDockerコンテナを作る必要がある。

docker run -d --name tun2socks \
-e EXTRA_COMMANDS='echo "nameserver 1.1.1.1" > /etc/resolv.conf;ip rule add iif lo ipproto udp dport 53 lookup main;' \
-e PROXY=http://<user>:<pass>@rp.proxyscrape.com:6060 \
-v '/dev/net/tun:/dev/net/tun' --cap-add=NET_ADMIN \
xjasonlyu/tun2socks
  • EXTRA_COMMANDSは DNS が正しく動作するために必要である。tun2socks コンテナはデフォルトでは DNS を扱わず、自分自身でプロキシを行うだけだからである。
  • PROXYは 使用するプロキシを設定します。http/httpsとsocks4/5。詳しいリストはこちらにあります:
  • -v '/dev/net/tun:/dev/net/tun'ホストマシンの仮想ネットワークデバイス (/dev/net/tun) をコンテナにマウントし、tun2socks がネットワークトラフィックを操作できるようにする。
  • -cap-add=NET_ADMINネットワークスタックへのアクセスを与えることで、 プロキシトンネルの確立に必要なネットワーク管理機能をコンテナに付与する。

この例では、Proxyscrape 住宅用プロキシを使用しているが、プレミアムプロキシやその他のプロキシを使用することもできる。
プロキシを行うコンテナを作成したので、--network=container:tun2socks フラグを追加するだけで、このコンテナのネットワークを使用する任意のコンテナを使用できる。

すべてが正しく機能しているかどうかをテストするには、IPinfoの位置データを返すために私が作ったテスト・コンテナを使うことができる。

dockerrun--rm--network=container:tun2socks hibenji/checkip


もちろん、最初のコンテナを作るときにローテーションプロキシを使うこともできるが、複数のtun2socksコンテナを作って、スティッキーセッションを持たせることもできる。

Dockerにおけるプロキシへのこのアプローチは、可能性の世界を広げる。ビルトインのプロキシ・サポートがないものであっても、実質的にあらゆるDockerコンテナと組み合わせてプロキシを使用できるようになりました。これにより、コンテナ化されたアプリケーションの機能が強化され、このレベルのネットワーク制御がなければ困難であったり不可能であったタスクを実行できるようになります。

読んでくれてありがとう!

この記事は、ProxyScrape のユーザー、ベンジーによって書かれた。