有没有办法给特定的接口 IP 设置别名?

有没有办法给特定的接口 IP 设置别名?

我有一个在 Debian 上运行的 VCS 作为生产服务器,并且由于一些虚拟机管理程序问题,它在过去一周内必须重新启动/迁移/更新多次。

因为我使用 docker 容器运行我的应用程序,所以我不能直接将localhost它连接到我的本地 postgres,所以我改用 ip ens2

ens2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.12.174.3  netmask 255.255.255.254  broadcast 10.12.174.3
        inet6 fe80::dc1c:14ff:fe51:5002  prefixlen 64  scopeid 0x20<link>
        inet6 2001:bc8:4740:205::1  prefixlen 127  scopeid 0x0<global>
        ether de:1c:14:51:50:02  txqueuelen 1000  (Ethernet)
        RX packets 37139  bytes 4801851 (4.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 39791  bytes 35291408 (33.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

但是每次重启时 IP 都会改变,我必须手动去环境变量中更改它,以便我的应用程序可以再次访问数据库,我相信你会同意这不是很实用。

所以我的问题是:有没有办法自动localhost为这个特定的接口分配一个类似的别名?

我想我仍然可以尝试解析ifconfig输出,但我宁愿先寻求实际的解决方案

答案1

DNS。

维护应用程序使用的记录,也许appdb.prod.example.org。由于这是一个服务名称,请考虑为当前运行它的主机创建 CNAME。

每次主机获得 IP 时更新 DNS 中的名称。例如,container1.example.org包含 的AAAA 记录2001:bc8:4740:205::1。具体如何执行此操作取决于您的编号方案和 DNS 配置。静态 IP 可以在分配后立即输入。DHCP 钩子可用于更新 DNS。并且存在可以监视每个接口的 IP 更改并执行 nsupdate 的软件,例如 自动 DDNS


不要在 Linux 上使用 ifconfig,不要将其用于新脚本。它已经过时至少11年了。

答案2

总是可以使用:

alias ip="hostname -I"

相关内容