I am setting up a number of VMs and containers and I am partitioning some private network ranges accordingly.
Suppose I have guests separated into a "frontend" (192.168.100.0/24) and "backend" (192.168.200.0/24) network (some may have access to both). The "frontend" network uses NAT and so guests do have access to the internet through that. However, some of the VMs are supposed to be as much separated and so the "backend" network only allows access between the guests on that network and the host. DNS lookups will also be strictly limited as well as outgoing traffic from these guests.
Let's now say I have an apt-cacher-ng
instance running on 192.168.200.1 (backend), which happens to be the host. The name apt-cacher.backend.local
resolves to that IP address and there are no other access restrictions.
If I would adjust all my sources.list
snippets in /etc/apt
of the VMs from:
deb http://us.archive.ubuntu.com/ubuntu/ focal main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ focal main restricted
... to (the hacky way):
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
... or choose the somewhat cleaner configuration stanza for APT:
Acquire::http { Proxy "http://apt-cacher.backend.local:3142"; };
So summarizing the facts:
apt-cacher.backend.local
(= 192.168.200.1) and any names that may be needed by the "backend" VM will resolve fine, anything else won'tapt-cacher-ng
will run listening on 192.168.200.1:3142- access from "backend" VM is limited to the backend network (192.168.200.1/24) entirely and netfilter rules will ensure only the services the VM offers will be available and only the
apt-cacher-ng
instance can be accessed
Will my system be able to update all its packages this way? (Nope, no other software will be used, or I'll package it myself.)
Bonus questions:
- Suppose the updates would work this way, is there anything else to watch out for in such a configuration?
- Is there a sensible way to deal with package repos that use
https://
? E.g. would it be viable to "simply" mirror the respective packages to a local repo which doesn't usehttps://
?
I understand you want to completely limit access to the outside world for the backend. The host at 192.168.200.1 is part of the backend.
Your idea will work but the ACNG host also needs access to the upstream repositories to proxy the request for packages for the backend (at least that's how I understand you want to do this). Thus, the host will also need to be part of the frontend or have some other way to connect to the internet. Alternatively, you can preload all necessary packages to the acng host repo. That looks like a cumbersome solution for little gain, though.
I suggest you look into the /etc/apt-cacher-ng/backend* files to hardwire what upstream servers will be used.
I also suggest you install the squid-deb-proxy-client package on the VM. This will allow you a fully transparent configuration of the VM without even fiddling with /etc/apt/sources.list. The magic happens via avahi and /etc/apt/apt.conf.d/30autoproxy. Run /usr/share/squid-deb-proxy-client/apt-avahi-discover from one of the VM to make sure you get the IP of the ACNG host back.
If you change the sources.list files on the backend machines/VM to apt-cacher.backend.local no further changes are necessary. If you put us.archive.ubuntu.com in there, then you would need to resolve that via DNS (it can basically resolve to any IP you like as the request will be proxied to the ACNG host).
Serving upstream repos accessible via https will require additional configuration.
Some additional considerations added a day later
You mentioned that you will have some locally-produced packages to install. I assume you will serve them from $host inside the LAN. In that case I suggest to add a file /etc/apt/apt.conf.d/99proxy containing
"Acquire::http::Proxy::$host "DIRECT";
. This bypasses the acng proxy. Personally, I have included this file in a configuration deb-file I install in all machines, it is among the files I serve from $host. That configuration deb-file has another config snippet in /etc/apt/sources.list.d/private.list containingdeb http://$host/repo/debs/ generic private
pointing to a reprepro repository. Maybe this is something that would benefit you as well.One thing I'd also like to make you aware of is that if
avahi-browse
or/usr/share/squid-deb-proxy-client/apt-avahi-discover
list more than one instance of an apt_proxy service you might run into an issue depending on the version of your VM OS.If you have allowed http tunnels in
apt-cacher-ng
then the answer to all your questions is yes, this is howapt-cacher-ng
is used.After installation, on the
apt-cacher-ng
machine go to http://localhost:3142/ for instructions and http://localhost:3142/acng-report.html for reports.Edit the configuration file on the
apt-cacher-ng
machine like so:uncomment
PassThroughPattern: .*
to allow HTPS connection tunneling.then save the file and close the editor by pressing Ctrl + x then press y then press Enter.
then restart
apt-cacher-ng
with the new configuration like so:Limiting connections to the backhand network on the
apt-cacher-ng
machine is also recommended. This can be done by editing the/etc/hosts.allow
file and adding the following line to it:and editing
/etc/hosts.deny
file and adding the following line to it:also consider adding rules to the firewall on the
apt-cacher-ng
machine to only allow connections to the needed repositories links only.You can find more in this link.
However, if you want to have a local copy of the repositories for your clients to update from locally, then I would suggest using
apt-mirror
andproftpd-basic
to do that on a local machine that has access to Internet and then use this machines IP in your clients' sources lists to update locally.To do this, please follow these steps:
On the update machine:
apt-mirror
andproftpd-basic
like so:/etc/apt/mirror.list
so it contains the repositoris of the release you want to mirror ( eg.bionic
) like so:and modify/add repositories accordingly so it looks like this:
then save the file and close the editor by pressing Ctrl + x then press y then press Enter.
apt-mirror
like so:apt-mirror
will download around 200 GB of data and that might take some time./etc/proftpd/conf.d/anonymous.conf
configuration file like so:and copy and paste the following to the editor:
then save the file and close the editor by pressing Ctrl + x then press y then press Enter.
proftpd
process like so:On the clients to be updated:
/etc/apt/sources.list
file so that they point toftp://Update_Machine_IP/
and changeUpdate_Machine_IP
to the IP of the update machine like so:so it will look like this:
then save the file and close the editor by pressing Ctrl + x then press y then press Enter.