私は組み込みLinuxシステムで壊れたシンボリックリンクを見つけました/etc/resov.conf
。特にそれは壊れたシンボリックリンクでした。私が説明できないのは、なぜそれらのいくつか(多く)が機能した理由です。
コードは Alpine Linux chroot 内で実行されます。 Debianの「ホスト」には最新の正しいresolv.confがありますが、chroot環境内のリンクが壊れています。私も見つけました。Alpineはデフォルトでnsswitch.confには付属していません。。すべてのホストは同じAlpine Linux chroot環境を持ち、ホストバージョンのDebianとネットワーク(物理的な場所)のみが異なります。
ホスト環境とchroot環境は/run
/sys
/proc
/dev
共有のみです。
ただし、一部のデバイスでは永続 FQDN を確認できます。もともとこれは共有DNSキャッシュに関連している可能性があると思いましたが、除外されました。 chrootの内部から:
$ ping unix.stackexchange.com
PING unix.stackexchange.com (151.101.193.69): 56 data bytes
64 bytes from 151.101.193.69: seq=0 ttl=58 time=3.962 ms
これらの組み込みデバイスは、以前にunix.stackexchange.comを確認するように求められたことがないため、DNSキャッシュにはありません。
現在、「動作する」デバイスと「壊れた」デバイスの違いが、そのデバイスがあるネットワークまたはリリースバージョンの微妙な違いかどうかを調査中です。詳細がわかったら、質問を更新します。
誰でも理由を説明できますか?一部次のうち、有効なresolv.confなしでFQDNを確認できるデバイスは何ですか?
chrootに関する追加情報
- それらはすべて同じchrootイメージを実行します。
- chroot 環境は「インベントリ」です。アルパインミニルートファイルシステムpython3を追加するだけです
apk add
。 nsswitch.conf
(前述)chrootファイルシステムは1つもなく、1つしかありません。非常に壊れたリンク/etc/resolv.conf
ホストに関する追加の詳細:
- さまざまなホスティング環境があります。
- これらすべてが複数のバージョンに分散しています。Debian は BeagleBoard.org から配布されます。。
- ホストの使用一般的なネットワークを設定します。
- 私には未知の理由で、彼らも実行されますDHCPクライアント、流通が進む方式のようです。
答え1
/etc/resolve.conf
ホストを検証するために必要なコンポーネントではありません。信頼できるインターフェイスは、アプリケーションがホスト名を解決するために呼び出すgetaddrinfo
(または廃止されたgethostbyname
)ライブラリ関数です。システム構成によっては、resolv.conf
カウンセリングが行われる場合もありません。
たとえば、DNSクエリがルーティングされている場合systemd-resolved
(そのように設定されている)、これは必要ありません。順番にどのように構成するかによって/etc/nsswitch.conf
/etc/resolv.conf
systemd-resolved
できるを使用することresolv.conf
ができます。維持する /run/systemd/resolve/resolv.conf
からシンボリックリンクを作成できます/etc/resolv.conf
。より体系的分析マンページ。
答え2
Alpine Linuxは、よりよく知られているものではなく、BusyboxとuClibcを使用しています。glibc。 uClibcの実装には珍しい点があります。住所情報の取得()localhost:53
他のネームサーバーが見つからない場合は、DNS要求を送信してください/etc/resolv.conf
。
これは、同じchroot環境にもかかわらず、一部のユニットがこのように実行され、他のユニットがそうでない理由を説明します。
dnsmasq
一部のホストにはインストールされており、他のホストにはインストールされていないようです。おそらく、BeagleBone開発者の意思決定が変わったからです。
beloのトレースはping -c1 unix.stackexchange.com
Alpine / Busybox / pingが開こうとし、/etc/resolv.conf
失敗した場合に要求を送信します127.0.0.1:53
。その後、そのアドレスから応答を受け取ります。
execve("/bin/ping", ["ping", "-c1", "unix.stackexchange.com"], 0xbec18768 /* 20 vars */) = 0
set_tls(0xb6f215ec) = 0
set_tid_address(0xb6f221a0) = 18047
mprotect(0x536000, 8192, PROT_READ) = 0
getuid32() = 0
getpid() = 18047
open("/etc/hosts", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC) = 0
read(3, "127.0.0.1\tlocalhost localhost.lo"..., 1024) = 79
read(3, "", 1024) = 0
close(3) = 0
open("/etc/resolv.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
clock_gettime(CLOCK_REALTIME, {tv_sec=1595644595, tv_nsec=840201586}) = 0
clock_gettime(CLOCK_REALTIME, {tv_sec=1595644595, tv_nsec=840992292}) = 0
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 3
bind(3, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
clock_gettime(CLOCK_REALTIME, {tv_sec=1595644595, tv_nsec=843970581}) = 0
sendto(3, "\247\206\1\0\0\1\0\0\0\0\0\0\4unix\rstackexchange\3"..., 40, MSG_NOSIGNAL, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 40
sendto(3, "\270D\1\0\0\1\0\0\0\0\0\0\4unix\rstackexchange\3"..., 40, MSG_NOSIGNAL, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 40
poll([{fd=3, events=POLLIN}], 1, 2500) = 1 ([{fd=3, revents=POLLIN}])
recvfrom(3, "\247\206\201\200\0\1\0\4\0\0\0\0\4unix\rstackexchange\3"..., 512, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 104
recvfrom(3, "\270D\201\200\0\1\0\0\0\1\0\0\4unix\rstackexchange\3"..., 512, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 124
close(3) = 0
ioctl(1, TIOCGWINSZ, {ws_row=38, ws_col=178, ws_xpixel=0, ws_ypixel=0}) = 0
writev(1, [{iov_base="PING unix.stackexchange.com (151"..., iov_len=47}, {iov_base=" data bytes\n", iov_len=12}], 2PING unix.stackexchange.com (151.101.65.69): 56 data bytes
) = 59
socket(AF_INET, SOCK_RAW, IPPROTO_ICMP) = 3
dup2(3, 0) = 0
close(3) = 0
setsockopt(0, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0
setsockopt(0, SOL_SOCKET, SO_RCVBUF, [7280], 4) = 0
rt_sigprocmask(SIG_UNBLOCK, [RT_1 RT_2], NULL, 8) = 0
rt_sigaction(SIGINT, {sa_handler=0x475b3c, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0xb6ec89fc}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=4280439, tv_nsec=868933133}) = 0
sendto(0, "\10\0Z\r\177F\0\0\5\16\31\236\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 64, 0, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("151.101.65.69")}, 28) = 64
rt_sigaction(SIGALRM, {sa_handler=0x475b3c, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0xb6ec89fc}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
setitimer(ITIMER_REAL, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=10, tv_usec=0}}, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=0, tv_usec=0}}) = 0
recvfrom(0, "E\0\0T8<\0\0:\1\253\215\227eAE\300\250\3\215\0\0b\r\177F\0\0\5\16\31\236"..., 192, 0, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("151.101.65.69")}, [16]) = 84
clock_gettime(CLOCK_MONOTONIC, {tv_sec=4280439, tv_nsec=879592488}) = 0
writev(1, [{iov_base="64 bytes from 151.101.65.69: seq"..., iov_len=56}, {iov_base="\n", iov_len=1}], 264 bytes from 151.101.65.69: seq=0 ttl=58 time=10.659 ms
) = 57
rt_sigaction(SIGINT, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0xb6ec89fc}, {sa_handler=0x475b3c, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0xb6ec89fc}, 8) = 0
writev(1, [{iov_base="", iov_len=0}, {iov_base="\n", iov_len=1}], 2
) = 1
writev(1, [{iov_base="--- unix.stackexchange.com", iov_len=26}, {iov_base=" ping statistics ---\n", iov_len=21}], 2--- unix.stackexchange.com ping statistics ---
) = 47
writev(1, [{iov_base="1 packets transmitted, 1 packets"..., iov_len=45}, {iov_base=" packet loss\n", iov_len=13}], 21 packets transmitted, 1 packets received, 0% packet loss
) = 58
writev(1, [{iov_base="round-trip min/avg/max = 10.659/"..., iov_len=45}, {iov_base=" ms\n", iov_len=4}], 2round-trip min/avg/max = 10.659/10.659/10.659 ms
) = 49
exit_group(0) = ?
+++ exited with 0 +++