带有 IP 地址的 Hostaliases 文件

带有 IP 地址的 Hostaliases 文件

环境变量HOSTALIASES允许用户设置自己的主机别名,而不必这样做sudoedit /etc/hosts(更多详细信息,例如,在http://blog.tremily.us/posts/HOSTALIASES/

但是,/etc/hosts我可以将 IP 地址别名为名称,也可以将名称别名为名称,而HOSTALIASES似乎仅适用于名称别名。

我试过:

cat > .hosts
work 10.10.0.1
g www.google.com
^D
export HOSTALIASES=$PWD/.hosts

现在

curl g #works 
curl 10.10.0.1 #works
curl work #doesn't work

我可以curl work在不需要编辑我没有写入权限 ( /etc/hosts) 的文件的情况下完成工作吗?

答案1

HOSTALIASES该功能由 glibc 中的解析器函数提供gethostbyname()。在此函数中,别名查找结果按原样传递给hosts:in指定的后续 libnss 模块调用/etc/nsswitch.conf,因此如果没有可以处理它的模块,gethostbyname()将以失败告终。

请注意,在大多数程序中,调用之前处理过的数字地址符号(如10.10.0.1和 )。2a00:1450:400c:c05::67inet_aton() inet_pton() getaddrinfo()gethostbyname()

一些 DNS 服务器(包括 dnsmasq)将有效的地址记录返回给带有数字地址字符串的查询,就像inet_aton()应用于它一样:例如,它们返回 A 记录10.10.0.1以查询 FQDN 10.10.0.1.。但是,其他服务器(包括 BIND)仅针对此类查询返回 NXDOMAIN。所以你不能依赖它来定义work 10.10.0.1HOSTALIASES的替代品/etc/hosts

一种可能的解决方法是利用公共 DNS 服务,例如xip.io获取任意 IPv4 地址的可解析 FQDN。例如,您可以work这样定义10.10.0.1

work 10.10.0.1.xip.io

相关内容