特定のユースケースでは、プロキシをネイティブにサポートしていないプログラムでトラフィックをプロキシする必要がある。前回のブログでは、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
この例では、Proxyscrape 住宅用プロキシを使用しているが、プレミアムプロキシやその他のプロキシを使用することもできる。
プロキシを行うコンテナを作成したので、--network=container:tun2socks フラグを追加するだけで、このコンテナのネットワークを使用する任意のコンテナを使用できる。
すべてが正しく機能しているかどうかをテストするには、IPinfoの位置データを返すために私が作ったテスト・コンテナを使うことができる。
dockerrun--rm--network=container:tun2socks hibenji/checkip
もちろん、最初のコンテナを作るときにローテーションプロキシを使うこともできるが、複数のtun2socksコンテナを作って、スティッキーセッションを持たせることもできる。
Dockerにおけるプロキシへのこのアプローチは、可能性の世界を広げる。ビルトインのプロキシ・サポートがないものであっても、実質的にあらゆるDockerコンテナと組み合わせてプロキシを使用できるようになりました。これにより、コンテナ化されたアプリケーションの機能が強化され、このレベルのネットワーク制御がなければ困難であったり不可能であったタスクを実行できるようになります。
読んでくれてありがとう!
この記事は、ProxyScrape のユーザー、ベンジーによって書かれた。