我正在设置一些虚拟机和容器,并相应地划分一些私有网络范围。
假设我将客户机分为“前端”(192.168.100.0/24)和“后端”(192.168.200.0/24)网络(有些客户机可以同时访问这两个网络)。“前端”网络使用 NAT,因此客户机可以通过该网络访问互联网。但是,有些虚拟机应该被分开,因此“后端”网络只允许客户机之间进行访问在那个网络上和主机。DNS 查找以及来自这些来宾的传出流量也将受到严格限制。
现在假设我有一个apt-cacher-ng
实例在 192.168.200.1(后端)上运行,而该地址恰好是主机。名称apt-cacher.backend.local
解析为该 IP 地址,并且没有其他访问限制。
如果我要调整虚拟机sources.list
中的所有代码片段/etc/apt
:
deb http://us.archive.ubuntu.com/ubuntu/ focal main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ focal main restricted
... (黑客方式):
deb http://apt-cacher.backend.local:3142/us.archive.ubuntu.com/ubuntu/ focal main restricted
deb-src http://apt-cacher.backend.local:3142/us.archive.ubuntu.com/ubuntu/ focal main restricted
...或者选择更简洁一些的 APT 配置节:
Acquire::http { Proxy "http://apt-cacher.backend.local:3142"; };
总结一下事实:
apt-cacher.backend.local
(= 192.168.200.1)以及任何名称“后端”虚拟机可能需要的那个将很好地解决,其他的则不会apt-cacher-ng
将在 192.168.200.1:3142 上运行监听- 来自“后端”虚拟机的访问仅限于后端网络 (192.168.200.1/24)完全netfilter 规则将确保只有虚拟机提供的服务可用,并且只有实例
apt-cacher-ng
可以访问
我的系统可以更新吗全部就这样打包?(不,不用其他软件,或者我自己打包。)
附加问题:
- 假设更新以这种方式进行,在这样的配置中还有什么需要注意的吗?
- 有没有合理的方法来处理使用 的软件包仓库
https://
?例如,“简单地”将相应的软件包镜像到不使用 的本地仓库是否可行https://
?
答案1
我明白您想完全限制后端对外界的访问。192.168.200.1 处的主机是后端的一部分。
你的想法一定会实现但 ACNG 主机还需要访问上游存储库来代理后端的软件包请求(至少我是这样理解的)。因此,主机还需要成为前端的一部分,或者有其他方式连接到互联网。或者,您可以将所有必要的软件包预加载到 acng 主机存储库。不过,这看起来是一个麻烦的解决方案,而且收益不大。
我建议您查看 /etc/apt-cacher-ng/backend* 文件来硬连接将使用的上游服务器。
我还建议您在虚拟机上安装 squid-deb-proxy-client 软件包。这样您就可以完全透明地配置虚拟机,甚至无需摆弄 /etc/apt/sources.list。神奇的事情发生在 avahi 和 /etc/apt/apt.conf.d/30autoproxy 上。从其中一个虚拟机运行 /usr/share/squid-deb-proxy-client/apt-avahi-discover,以确保您重新获得 ACNG 主机的 IP。
如果您将后端计算机/VM 上的 sources.list 文件更改为 apt-cacher.backend.local,则无需进一步更改。如果您将 us.archive.ubuntu.com 放入其中,则需要通过 DNS 解析它(它基本上可以解析到您喜欢的任何 IP,因为请求将被代理到 ACNG 主机)。
通过 https 访问上游存储库需要附加配置。
一天后又添加了一些其他考虑因素
您提到您将安装一些本地生成的软件包。我假设您将从 LAN 内的 $host 提供它们。在这种情况下,我建议添加一个包含 的文件 /etc/apt/apt.conf.d/99proxy
"Acquire::http::Proxy::$host "DIRECT";
。这将绕过 acng 代理。就我个人而言,我已将此文件包含在我安装在所有机器上的配置 deb 文件中,它是我从 $host 提供的文件之一。该配置 deb 文件在 /etc/apt/sources.list.d/private.list 中有另一个配置片段,其中包含deb http://$host/repo/debs/ generic private
指向 reprepro 存储库的指针。也许这对您也有好处。我还想让你注意的一件事是,如果
avahi-browse
你/usr/share/squid-deb-proxy-client/apt-avahi-discover
列出多个 apt_proxy 服务实例,你可能会遇到问题取决于您的虚拟机操作系统的版本。
答案2
如果你已经允许http 隧道那么apt-cacher-ng
您所有问题的答案都是肯定的,这就是apt-cacher-ng
使用方法。
安装后,在apt-cacher-ng
机器上转到http://本地主机:3142/以获取说明和http://本地主机:3142/acng-report.html用于报告。
apt-cacher-ng
像这样编辑机器上的配置文件:
sudo nano /etc/apt-cacher-ng/acng.conf
取消注释PassThroughPattern: .*
以允许 HTPS 连接隧道。
Ctrl然后按+保存文件并关闭编辑器,x然后按,y然后按Enter。
然后apt-cacher-ng
使用新配置重新启动,如下所示:
sudo systemctl restart apt-cacher-ng
apt-cacher-ng
还建议限制与机器上的反手网络的连接。这可以通过编辑/etc/hosts.allow
文件并向其中添加以下行来实现:
apt-cacher-ng: 192.168.200.0/24
并编辑/etc/hosts.deny
文件并向其中添加以下行:
ALL: ALL
还可以考虑在机器的防火墙上添加规则apt-cacher-ng
,以仅允许连接到所需的存储库链接。
您可以在以下位置找到更多信息此链接。
但是,如果您想要拥有存储库的本地副本以供您的客户端从本地进行更新,那么我建议使用apt-mirror
并proftpd-basic
在可以访问 Internet 的本地计算机上执行此操作,然后在您的客户端的源列表中使用该机器的 IP 进行本地更新。
为此,请按照下列步骤操作:
在更新机器上:
- 安装
apt-mirror
并proftpd-basic
像这样:
sudo apt install apt-mirror proftpd-basic
- 进行编辑
/etc/apt/mirror.list
,使其包含您想要镜像的版本的存储库(例如bionic
),如下所示:
sudo nano /etc/apt/mirror.list
并相应地修改/添加存储库,使其看起来像这样:
############# config ##################
#
# set base_path /var/spool/apt-mirror
#
# set mirror_path $base_path/mirror
# set skel_path $base_path/skel
# set var_path $base_path/var
# set cleanscript $var_path/clean.sh
# set defaultarch <running host architecture>
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set nthreads 20
set _tilde 0
#
############# end config ##############
deb http://archive.ubuntu.com/ubuntu bionic main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu bionic-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu bionic-updates main restricted universe multiverse
#deb http://archive.ubuntu.com/ubuntu artful-proposed main restricted universe multiverse
#deb http://archive.ubuntu.com/ubuntu artful-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu bionic main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu bionic-security main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu bionic-updates main restricted universe multiverse
#deb-src http://archive.ubuntu.com/ubuntu artful-proposed main restricted universe multiverse
#deb-src http://archive.ubuntu.com/ubuntu artful-backports main restricted universe multiverse
clean http://archive.ubuntu.com/ubuntu
Ctrl然后按+保存文件并关闭编辑器,x然后按,y然后按Enter。
apt-mirror
像这样开始:
sudo apt-mirror
apt-mirror
将下载200 GB的数据,这可能需要一些时间。
/etc/proftpd/conf.d/anonymous.conf
像这样创建并编辑配置文件:
sudo nano /etc/proftpd/conf.d/anonymous.conf
并将以下内容复制并粘贴到编辑器中:
<Anonymous ~ftp>
User ftp
Group nogroup
UserAlias anonymous ftp
RequireValidShell off
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
</Anonymous>
Ctrl然后按+保存文件并关闭编辑器,x然后按,y然后按Enter。
proftpd
像这样重新启动该进程:
sudo systemctl restart proftpd
- 绑定镜像存储库目录FTP目录如下:
sudo mount --bind /var/spool/apt-mirror/mirror/archive.ubuntu.com/ /srv/ftp/
在要更新的客户端上:
- 编辑并修改文件中的源
/etc/apt/sources.list
,使它们指向ftp://Update_Machine_IP/
并更改Update_Machine_IP
更新机器的 IP,如下所示:
sudo nao /etc/apt/sources.list
所以它看起来会像这样:
deb ftp://Update_Machine_IP/ubuntu/ bionic main universe multiverse restricted
deb ftp://Update_Machine_IP/ubuntu/ bionic-security main multiverse universe restricted
deb ftp://Update_Machine_IP/ubuntu/ bionic-updates main multiverse universe restricted
Ctrl然后按+保存文件并关闭编辑器,x然后按,y然后按Enter。
- 通过运行以下命令进行更新:
sudo apt update