如何在连接的网络上有条件地解析主机名?

如何在连接的网络上有条件地解析主机名?

我有一台小型家庭服务器,我希望笔记本电脑上的程序能够从 LAN 和 WAN 访问它。我认为实现此目的的最简洁方法是定义自定义主机名并根据其连接的网络以不同方式解析它。

换句话说,是否可以解析主机名X作为 IP 地址A如果连接到网络,并作为 IP 地址否则?

我正在使用 Arch Linux 并netctl作为我的网络管理器。我假设实现我想要的方法是在网络配置文件中设置挂钩以某种方式更改主机文件,但我不确定如何执行后者。

当然,我也想听听更好的解决方案。

答案1

我用 解决了这个问题dnsmasq。按照问题中的示例,以下是我dnsmasq在笔记本电脑上设置为 DNS 缓存后所做的操作:

  1. 创建目录/etc/hosts.d

  2. 将以下脚本放入/etc/netctl/X/并使其可执行

 #!/bin/sh
 # /etc/netctl/X/X_local.sh
 echo 'A X' > /etc/hosts.d/X
 chmod 744 /etc/hosts.d/X
 #!/bin/sh
 # /etc/netctl/X/X_remote.sh
 echo 'B X' > /etc/hosts.d/X
 chmod 744 /etc/hosts.d/X
  1. 将以下行添加到网络配置文件中/etc/netctl/Foo
 ExecUpPost=/etc/netctl/X/X_local.sh
 ExecDownPre=/etc/netctl/X/X_remote.sh
  1. 附加addn-hosts=/etc/hosts.d/etc/dnsmasq.conf

这是有效的,因为该addn-hosts选项指示dnsmasq在目录中查找/etc/hosts.d其他主机名关联。

相关内容