我遇到过这样的情况:一台服务器有两个 IP 地址,都分配给同一个接口。如何告诉 APT 使用特定 IP 下载软件包和更新缓存?
基本上我正在寻找类似--interface
in 的东西curl(1)
,仅适用于 APT。
--interface <name>
Perform an operation using a specified interface. You
can enter interface name, IP address or host name...
我已经调查过apt.conf(5)
并apt-transport-http(1)
发现那里没有选择。
我想到了两种解决方法:
设置一个能够识别不同接口/IP 的代理,并用于
Acquire::http::Proxy
告诉 APT 通过该代理。也许我可以设置一些网络命名空间来实现这一点,尽管我还没有深入研究文档。
APT 是否可以使用特定的网络接口/IP 地址?如果没有,更好的解决方法是什么?
以下是具体情况:
一台服务器被分配了两个 IP 地址,每个地址都位于通往 Internet 的 NAT 后面。 (这里的bridge只是为了方便配置管理,实际上只是enp1s0
在后面br0
。)
$ ip address show br0
9. br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.0.2/22 brd 192.168.3.255 scope global dynamic br0
valid_lft 1055sec preferred_lft 1055sec
inet 192.168.0.3/22 brd 192.168.3.255 scope global secondary br0
valid_lft forever preferred_lft forever
inet6 fe80::5867:78ff:fef8:7146/64 scope link
valid_lft forever preferred_lft forever
这两个 IP 在不同的公共 IP 后面进行 NAT。其中之一 ( 192.168.0.3
) 具有较高的 Internet 带宽,适合下载 APT 软件包。然而,几乎所有其他网络连接都应该通过其他 IP,因此它 ( 192.168.0.2
) 被设置在默认路由中。
期望的效果是APT用来192.168.0.3
下载包和缓存。
答案1
如果您有多个可以路由到更新服务器的接口,那么您需要确保选择路由到一组给定的 IP 地址(您的更新服务器):策略路由。
这是一篇博客文章,讨论了我认为与您需要的类似的内容:https://osric.com/chris/accidental-developer/2019/03/linux-policy-based-routing/