在 Windows とモバイル端末では、プロキシの実装方法は非常に直感的で、特定のソフトウェアを起動すれば機能します。しかし、Linux プロキシはユーザーインターフェースがなく、実行ボタンもなく、手をこまねいてしまいます。
国内のマシンでのミラーのダウンロード速度が遅く、頻繁に接続が切れるのにうんざりしていました。apt の更新に半時間もかかることもあり、AhFei もかつては苦しんでいました。
この記事の内容は、99% のプロキシ加速のニーズを解決できるはずです。国内のマシンで GitHub プロジェクトをどうやってダウンロードするのか?また、国内のマシンで apt を使ってソフトウェアを迅速に更新し、Docker でイメージを引っ張るにはどうすればよいのでしょうか?
対応システム:Debian 系のディストリビューション、Ubuntu や Armbian を含む
私は何か間違えたかもしれませんので、何か間違っていたら教えてください!
なぜミラー加速を使わないのか?
- AhFei が初めて Linux に触れたとき、ネット上にはミラーの設定方法がたくさんありましたが、奇妙なことに、これらのミラーソースは私のマシンに対して加速効果が全くないとは言えず、肉眼では識別できませんでした。だから、私にはミラー加速はゴミのように思えました。
- 根本的な対策。清風山岡、明月大江。プロキシ加速、一発で全てをカバーする、使いやすく、幅広く適用可能です。
次に、魔法のソフトウェアをインストールし、設定を編集し、SOCKS5 と HTTP プロキシアドレスを取得する方法については、各プロジェクトの公式チュートリアルを参照してください。この記事は加速のための使用方法に特化しており、技術交流のためのもので、魔法の方法には触れません。
仮に SOCKS プロキシアドレスが 127.0.0.1:1080 で、HTTP プロキシアドレスが 127.0.0.1:8118 だとします。
プロキシが正常に動作しているかどうかを確認する方法:(cip.cc このサイトはあなたのマシンの IP を返します)
# SOCKS プロキシ
curl -x socks5://127.0.0.1:1080 cip.cc
# HTTP プロキシ
curl -x 127.0.0.1:10809 cip.cc
パスワード付きの場合:
curl -x socks5://Username:[email protected]:10808 cip.cc
SOCKS を HTTP プロキシに変換#
このセクションがある理由は、一部の魔法の方法が HTTP プロキシを提供せず、SOCKS を HTTP に変換する必要があるためです。apt や Docker などで使用するためです。
すでに HTTP プロキシがある場合は、スキップできます。
privoxy#
公式サイト: Privoxy - Home Page
インストール:
sudo apt install -y privoxy
設定:
sudo vim /etc/privoxy/config
listen-address
と forward-socks5t
を変更します。具体的な説明:
listen-address
は後でローカル HTTP プロキシがリッスンするポートで、デフォルトでは 127.0.0.1 の 8118 ポートをリッスンします。
# 国内のマシンの場合、ローカルアクセスのみを許可するように設定するべきです
listen-address 127.0.0.1:8118
# 家庭用サーバーの場合は、ローカルネットワークの他のマシンが使用できるように開放できます
listen-address 0.0.0.0:8118
8118 ポートはもちろん自由に変更できます。他のプログラムに占有されていなければ大丈夫です。
forward-socks5t
は privoxy がリッスンする SOCKS プロキシで、上記の HTTP ポートリッスンをこの SOCKS プロキシに転送するための橋渡しです。最後の.
を忘れないでください。
forward-socks5t / 127.0.0.1:1080 .
# パスワード付き
forward-socks5 / Username:[email protected]:1080 .
再起動して有効にします:
sudo systemctl restart privoxy.service
sleep 3
sudo systemctl status privoxy.service
forward-socks5t
と forward-socks5
は異なるプロキシプロトコルです。
- forward-socks5t:これは透明な転送をサポートする SOCKS5 プロキシプロトコルです。このプロトコルを使用すると、プロキシサーバーはクライアントから送信された TCP データパケットをそのままターゲットサーバーに転送し、ターゲットサーバーからの応答も直接クライアントに送信されます。この方法は透明なプロキシを実現し、クライアントとターゲットサーバー間の接続は双方にとって完全に透明で、互いに気づくことはありません。
- forward-socks5:これは一般的な SOCKS5 プロキシプロトコルです。このプロトコルを使用する場合、クライアントとプロキシサーバー間で接続が確立された後、クライアントは特定のコマンドを送信してプロキシサーバーにターゲットサーバーとの接続を確立するよう要求する必要があります。プロキシサーバーはクライアントの要求データをターゲットサーバーに中継し、ターゲットサーバーからの応答をクライアントに送信します。この方法では、クライアントは自分がプロキシを通じて通信していることを認識し、ターゲットサーバーもリクエストがプロキシサーバーから来ていることを知っています。
したがって、違いは主に透明な転送と通常のプロキシの違いにあります。クライアントとターゲットサーバー間のプロキシの存在を隠す必要がある場合は、forward-socks5t
を選択できます。一方、クライアントとターゲットサーバーがプロキシの存在を認識し、特定のインタラクションプロトコルで通信する場合は、forward-socks5
を選択できます。
環境変数の設定#
まず原理を説明します。この方法が特定のソフトウェアをプロキシ経由で動作させることができ、他のソフトウェアには効果がないのは、効果のあるソフトウェアが実行時に環境変数にプロキシが設定されているかどうかを確認するからです。あれば当然プロキシを使用します。
つまり、この方法自体はマシンのネットワーク構造を変更するものではなく、効果があるかどうかはソフトウェアがサポートしているかどうかに依存します。
サポートされているソフトウェアは、一般的にオプションを提供し、手動でプロキシを指定することができるため、実際にはより制御可能です。例えば:
pip3(環境変数 http_proxy があれば、これを使用する必要はありません)
pip3 install --proxy="http://127.0.0.1:8118" packageName
2 つの環境変数だけを設定します:HTTP_PROXY
と HTTPS_PROXY
:
export http_proxy="http://127.0.0.1:8118" # http トラフィックが通るプロキシ
export https_proxy="http://127.0.0.1:8118"
export no_proxy=127.0.0.1,localhost,192.168.* # プロキシを通さないネットワークセグメント
プロキシを解除する
unset http_proxy https_proxy no_proxy
プロキシが機能しているかテストする
curl cip.cc
認証付きのプロキシ:
export http_proxy="Username:Password@proxy-server-ip:8118"
export https_proxy="Username:Password@proxy-server-ip:8118"
上記のコマンドは使いにくいため、エイリアスを使用してコマンドを簡略化できます。
vim ~/.bashrc
追加(プロキシのアドレスを変更することに注意)
alias ftz='export http_proxy="127.0.0.1:8118" https_proxy="127.0.0.1:8118" no_proxy=127.0.0.1,localhost,192.168.*'
alias ctz='unset http_proxy https_proxy no_proxy'
すぐに設定を有効にする:
source ~/.bashrc
これで、サーバーに接続した後、ターミナルで
ftz
(プロキシを有効にする)と入力すれば、ターミナルにプロキシが設定されますctz
(プロキシを無効にする)と入力すれば、ターミナルのプロキシが解除されます
また、ftz の後、このプロキシは現在のターミナルでのみ有効で、退出して再ログインするとプロキシは無効になります。これにより、制御性が向上します。
apt プロキシ#
Apt は HTTP Proxy 環境変数を使用しません。独立した設定ファイルを使用します。
/etc/apt/apt.conf.d/
に新しい設定ファイルを作成します:
sudo vim /etc/apt/apt.conf.d/proxy.conf
Acquire {
HTTP::proxy "http://127.0.0.1:8118";
HTTPS::proxy "http://127.0.0.1:8118";
}
確認:
sudo apt update
Docker イメージプロキシ#
イメージの取得と管理はすべて docker daemon が担当し、docker daemon は systemd によって管理されているため、systemd の設定から始めて、docker daemon にプロキシを設定します。
公式ドキュメント: Configure the daemon with systemd | Docker Docs
- dockerd 関連の systemd ディレクトリを作成します。この .d ディレクトリ内の設定はデフォルトの設定を上書きします。
sudo mkdir -p /etc/systemd/system/docker.service.d
- 新しい設定ファイル
http-proxy.conf
を作成します。
sudo vim /etc/systemd/system/docker.service.d/proxy.conf
設定を追加します。前述のように:
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:8118/"
Environment="HTTPS_PROXY=http://127.0.0.1:8118/"
Environment="NO_PROXY=127.0.0.1,localhost,192.168.*,*.example.com"
# もし `NO_PROXY=*` なら、すべてのリクエストはプロキシサーバーを通過しません
- 設定ファイルを再読み込みし、Dockerd を再起動して有効にします。
sudo systemctl daemon-reload
sudo systemctl restart docker
- 環境変数が正しく設定されているか確認します:
sudo systemctl show --property=Environment docker
イメージを取得して加速効果を試してみてください。
Docker コンテナプロキシ#
コンテナの実行段階で、インターネットにプロキシを通して接続する必要がある場合は、環境変数を追加するだけです。例えば docker-compose を使用する場合、その設定ファイルの環境変数に以下の 3 つを追加します。
environment:
- http_proxy="192.168.1.11:10809"
- https_proxy="192.168.1.11:10809"
- no_proxy="localhost,127.0.0.1,.example.com"
その原理は、上記の「環境変数を設定する」ということです。したがって、効果があるかどうかは、内部で実行されるサービスが環境変数を取得するかどうかに依存します。
これはあまり役に立たないように感じますが、国内の emby がスクレイピングできない場合にこれを使って解決できます。ただし、このようなグローバル変数は他の機能に影響を与える可能性があります。
コンテナがデフォルトでプロキシを使用する場合は、~/.docker/config.json
を設定することもできます。
{
"proxies":
{
"default":
{
"httpProxy": "http://proxy.example.com:8080",
"httpsProxy": "http://proxy.example.com:8080",
"noProxy": "localhost,127.0.0.1,.example.com"
}
}
}
これはユーザー単位の設定で、proxies
の他に、docker login
などの関連情報も含まれます。また、情報表示の形式やプラグインパラメータなども設定できます。
注意:docker run
や docker build
のいずれも、デフォルトではネットワークが隔離されています。プロキシが localhost:3128
のようなものである場合、無効になります。このようなローカル専用のプロキシは、--network host
を追加しないと正常に使用できません。
Docker Build プロキシ#
docker build
の本質もコンテナを起動することですが、環境は若干異なり、ユーザー単位の設定は無効です。ビルド時には http_proxy
などのパラメータを注入する必要があります。
docker build . \
--build-arg "HTTP_PROXY=http://proxy.example.com:8080/" \
--build-arg "HTTPS_PROXY=http://proxy.example.com:8080/" \
--build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
-t your/image:tag
原文リンク: https://technique.vfly2.com/2023/11/linux-proxy-acceleration-for-apt-docker/
版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (technique.vfly2.com) 。
保持更新 ٩(・̤̀ᵕ・̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,或在支持 ActivityPub 的平台关注 @[email protected]
接收新文章的推送,如果能留言互动就更好了。