web-dev-qa-db-ja.com

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を機能させることはできますか?

8
PSkocik

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
_
12
yaegashi