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
を機能させることはできますか?
HOSTALIASES
機能は、glibcのリゾルバー関数gethostbyname()
によって提供されます。この関数では、エイリアスルックアップ結果が_hosts:
_の_/etc/nsswitch.conf
_で指定された後続のlibnssモジュール呼び出しにそのまま渡されるため、それを処理できるモジュールがない場合、gethostbyname()
は終了します失敗してアップ。
ほとんどのプログラムでは、_10.10.0.1
_や_2a00:1450:400c:c05::67
_などの数値アドレス表記は、inet_aton()
inet_pton()
getaddrinfo()
によって処理されてから、gethostbyname()
が呼び出されることに注意してください。 。
Dnsmasqを含む一部のDNSサーバーは、inet_aton()
が適用されているかのように、数値のアドレス文字列を含むクエリに有効なアドレスレコードを返します。 FQDN _10.10.0.1
_を照会するために、Aレコード_10.10.0.1.
_を返します。ただし、BINDを含む他のサーバーは、そのようなクエリに対してNXDOMAINを返すだけです。したがって、これに依存して_work 10.10.0.1
_を_/etc/hosts
_の代替としてHOSTALIASES
に定義することはできません。
考えられる回避策の1つは、 xip.io のようなパブリックDNSサービスを利用して、任意のIPv4アドレスの解決可能なFQDNを取得することです。たとえば、次のように_10.10.0.1
_に対してwork
を定義できます。
_work 10.10.0.1.xip.io
_