Proxmox4.4でLinuxコンテナを実行しています。コンテナはDebianJessieに基づいています。バージョンの詳細は次のとおりです。
root@myHostName:/home/myUserName# uname -a
Linux myHostName 4.4.35-1-pve #1 SMP Fri Dec 9 11:09:55 CET 2016 x86_64 GNU/Linux
root@myHostName:/home/myUserName# cat /etc/debian_version
8.6
root@myHostName:/home/myUserName# cat /etc/issue
Debian GNU/Linux 8 \n \l
このコンテナは分離されています。その唯一の方法は、SSHトンネルを経由することです。そのため、パッケージ管理(apt-getなど)にSSHトンネルを使用しています。これはほとんど機能しているようですが、警告やエラーが発生することがあります。
これがoriginal/ etc/apt/sources.listです:
deb http://ftp.debian.org/debian jessie main contrib
deb http://ftp.debian.org/debian jessie-updates main contrib
deb http://security.debian.org jessie/updates main contrib
updated/ etc/apt/sources.listは次のとおりです。
deb http://localhost:39860/debian jessie main contrib
deb http://localhost:39860/debian jessie-updates main contrib
deb http://localhost:39861 jessie/updates main contrib
SSHトンネルを作成する方法は次のとおりです。
ssh -N -L39860:ftp.debian.org:80 -L39861:security.debian.org:80 myRemoteUserName@myRemoteHostname
apt-get updateを実行するとどうなりますか?
root@myHostName:/home/myUserName# apt-get update
Ign http://localhost:39860 jessie InRelease
Hit http://localhost:39860 jessie-updates InRelease
Ign http://localhost:39861 jessie/updates InRelease
Hit http://localhost:39860 jessie Release.gpg
Get:1 http://localhost:39860 jessie-updates/main AMD64 Packages/DiffIndex [8392 B]
Hit http://localhost:39860 jessie-updates/contrib AMD64 Packages
Hit http://localhost:39860 jessie-updates/contrib Translation-en
Get:2 http://localhost:39860 jessie-updates/main Translation-en/DiffIndex [3196 B]
Ign http://localhost:39861 jessie/updates Release.gpg
Hit http://localhost:39860 jessie Release
Ign http://localhost:39861 jessie/updates Release
Hit http://localhost:39860 jessie/main AMD64 Packages
Hit http://localhost:39860 jessie/contrib AMD64 Packages
Hit http://localhost:39860 jessie/contrib Translation-en
Hit http://localhost:39860 jessie/main Translation-en
Err http://localhost:39861 jessie/updates/main AMD64 Packages
404 Not Found [IP: ::1 39861]
Err http://localhost:39861 jessie/updates/contrib AMD64 Packages
404 Not Found [IP: ::1 39861]
Ign http://localhost:39861 jessie/updates/contrib Translation-en
Ign http://localhost:39861 jessie/updates/main Translation-en
Fetched 11.6 kB in 9s (1279 B/s)
W: Failed to fetch http://localhost:39861/dists/jessie/updates/main/binary-AMD64/Packages 404 Not Found [IP: ::1 39861]
W: Failed to fetch http://localhost:39861/dists/jessie/updates/contrib/binary-AMD64/Packages 404 Not Found [IP: ::1 39861]
E: Some index files failed to download. They have been ignored, or old ones used instead.
最後に表示される警告とエラーを回避するにはどうすればよいですか?
HTTPプロトコルのHost:
ヘッダーが原因で、このアプローチは機能しません。
通常の状況では、HTTPクライアント(この場合はapt-get
)はヘッダーHost: ftp.debian.org
を送信します。これにより、サーバーが複数のドメインをホストしている場合に、ロードするWebサイトをサーバーに通知します。
apt-get
にHost: localhost:39860
を送信させます。これは、リモートサーバー上に何も存在しない可能性があります。これがHTTP404 NotFoundエラーの説明です。
ホストにHTTPプロキシを配置し、SSHポートフォワーディングを介してコンテナで使用できるようにします。
Sudo apt install squid
この構成を/etc/squid/squid.conf
に書き込みます。
http_port 8080
acl container src XXX.XXX.XXX.XXX/32
http_access allow container
XXX.XXX.XXX.XXX
をコンテナのIPアドレスに置き換えます。
service squid restart
でSquidを起動または再起動します。次のコマンドを使用して、インターネットに接続されたマシンからコンテナに接続します。
ssh -R8080:localhost:8080 myRemoteUserName@myRemoteHostname
myRemoteUserName@myRemoteHostname
をコンテナへのログイン資格情報に置き換えます。
コンテナ内に、次の内容の/etc/apt/apt.conf.d/80proxy
という名前の新しいファイルを作成します。
Acquire::http::Proxy "http://localhost:8080/";
apt
パッケージマネージャーはリモートリクエストを行うことができます。プロキシにサイト制限を追加する必要がある場合は、チェックアウトしてください Squidアクセスを1つのサイトのみに制限 。