带有 IP 地址的 Hostaliases 文件

PSk*_*cik 14 hosts

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

但是,使用/etc/hostsI 可以将 IP 地址别名为名称,将名称别名为名称,而HOSTALIASES似乎只能使用名称到名称别名。

我试过:

cat > .hosts
work 10.10.0.1
g www.google.com
^D
export HOSTALIASES=$PWD/.hosts
Run Code Online (Sandbox Code Playgroud)

现在

curl g #works 
curl 10.10.0.1 #works
curl work #doesn't work
Run Code Online (Sandbox Code Playgroud)

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

yae*_*shi 16

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

请注意,在大多数程序中,数字地址符号如10.10.0.12a00:1450:400c:c05::67inet_aton() inet_pton() getaddrinfo()before处理gethostbyname()

一些 DNS 服务器,包括 dnsmasq,使用数字地址字符串向查询返回有效地址记录,就像inet_aton()应用于它一样:例如,它们返回 A 记录10.10.0.1以查询 FQDN 10.10.0.1.。但是,包括 BIND 在内的其他服务器只为此类查询返回 NXDOMAIN。所以你不能依赖这个来定义work 10.10.0.1HOSTALIASES作为/etc/hosts.

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

work 10.10.0.1.xip.io
Run Code Online (Sandbox Code Playgroud)