Linux:如何以编程方式添加主机?

3

是否有一种在Linux下编程方式来将主机添加到本地名称解析器中?

我宁愿避免动态操纵/etc/hosts文件…

例如:添加名称foo并将其绑定到本地端口127.1.2.3

用例:我有一个应用程序已安装在本地,可通过Web浏览器访问。我希望该应用程序可以通过本地URI访问。


1
这与如何以编程方式执行此任务有关,因此在我看来SO是正确的。 - Noldorin
2
问题在于他正在询问如何动态修改DNS记录,这与编程没有直接关系。因此,这是一个伪装成编程问题的服务器故障问题。实际上,考虑到他试图将IP:端口映射到名称,似乎他需要阅读一些服务器故障相关的内容 :-) - Vinko Vrsalovic
为什么不解释你想要做什么,而不是如何去实现你认为的解决方案? - Vinko Vrsalovic
2
@Jean-Lou:只需以编程方式编辑/etc/hosts文件。在开始时保存一份副本,如果失败,则恢复该副本。对于如此琐碎的用途,这应该足够了。其他任何操作都是杀鸡焉用牛刀。 - Vinko Vrsalovic
如果你真的不想太多地涉及/etc/hosts或运行自己的名称服务器,我想你可以编写自己的nss插件并在/etc/nsswitch.conf中配置它,但这绝对算是“杀鸡焉用牛刀”;-) - ephemient
显示剩余2条评论
4个回答

4
添加名称为foo并将其绑定到本地端口127.0.0.1:9999。您可以在hosts文件中添加foo 127.0.0.1或在您的名称服务器中执行相应操作。但是,连接到端口1234上的foo始终会转到127.0.0.1:1234,无法根据名称将其重定向到端口9999,因为这个名称已经在调用connect时丢失了。

在Linux上,您可以将IP地址添加到环回设备(即ip addr add 127.1.2.3 dev lo),然后使用iptables将所有目标为127.1.2.3:1234的连接更改为127.0.0.1:9999,但我无法确定您是否需要这种可观察行为。


1
你需要搜索的谷歌关键词是“DDNS”,全称为“动态DNS”。这是一种动态向DNS服务器添加记录的技术,听起来正是你想要的。我相信大多数Linux发行版中的bind都支持它,但你可能需要了解如何配置它。

OP要求操作“本地名称解析器”。DDNS是一种解决方案,但不是“本地”的(也不是最简单的)。 - Kalle Richter

1

如果你只想添加主机,一个相对安全的方法是

echo -e "ip.add.re.ss\thostname" >> /etc/hosts

现在,如果您想删除它们,情况就变得有点棘手了。我猜您也想要将它们移除。

如果是这种情况,您可以使用动态 DNS。例如,BIND 有 nsupdate 工具可用于更新区域文件:

       $ nsupdate
       > update delete oldhost.example.com A
       > update add newhost.example.com 86400 A 172.16.1.1
       > send

这将执行以下操作:

删除 oldhost.example.com 的任何 A 记录。并添加一个 IP 地址为 172.16.1.1 的 newhost.example.com 的 A 记录。新添加的记录具有 1 天的 TTL(86400 秒)。


我是否可以将名称“foo”绑定到本地地址127.0.0.1的9999端口上?例如。 - jldupont
1
DNS将IP地址映射到名称,端口不是IP地址的一部分。所以,不行。 - Vinko Vrsalovic
@vinko:你如何让nsupdate仅更新本地DNS缓存,而不尝试与其他名称服务器通信? - jldupont
你不能:动态更新会更新区域,而不是缓存。缓存的更新不能通过标准方式完成(每个解析器可能都有自己专有的方式,你使用哪一个?) - bortzmeyer
@bortzmeyer:还有其他方法吗?即本地缓存是否可以通过其他方式访问? - jldupont

0
我将使用最近发现的方法:使用Avahi包的多播DNS。一个例子可以在这里找到。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接