MacOS Sierra에서 /etc/resolver/가 변경되는 원인은 무엇입니까?

MacOS Sierra에서 /etc/resolver/가 변경되는 원인은 무엇입니까?

특정 도메인에 대해 기본이 아닌 DNS 확인자를 사용하고 싶은데, 첫 번째 아이디어는 단순히 로컬 dnsmasq를 사용하는 것입니다. MacOS 버전을 찾는 동안 다음과 같은 /etc/resolver/example.com간단한 한 줄로 도메인 이름이 있는 파일을 생성하면 동일한 작업을 수행할 수 있다는 것을 발견했습니다.

nameserver 8.8.8.8

모든 것이 정상이고 예상대로 작동하며 해결 방법이 작동하고 scutil --dns확인됩니다.

resolver #8
  domain   : example.com
  nameserver[0] : 8.8.8.8
  flags    : Request A records
  reach    : Reachable

다음으로, 터미널에서 실행할 수 있는 간단한 한 줄짜리 코드를 만들어 친구들과 공유하고 싶었습니다.

sudo mkdir -p /etc/resolver/ && echo "nameserver 8.8.8.9" | sudo tee /etc/resolver/example.net

재확인 scutil --dns:

resolver #10
  domain   : example.net
  nameserver[0] : 8.8.8.9
  flags    : Request A records
  reach    : Reachable

그러다가 오타를 발견하여 주소를 8.8.8.8로 수정하고 다음 줄을 다시 실행했습니다.

sudo mkdir -p /etc/resolver/ && echo "nameserver 8.8.8.8" | sudo tee /etc/resolver/example.net

그러나 이것은 아무런 효과가 없는 것 같습니다.

resolver #10
  domain   : example.net
  nameserver[0] : 8.8.8.9
  flags    : Request A records
  reach    : Reachable

파일 내용을 확인했는데 모든 것이 괜찮아 보입니다.

$ cat /etc/resolver/example.net 
nameserver 8.8.8.8

그런 다음 에서 파일을 열고 다음 vim으로 변경했습니다 8.8.4.4.

resolver #10
  domain   : example.net
  nameserver[0] : 8.8.4.4
  flags    : Request A records
  reach    : Reachable

몇 번 앞뒤로 확인했는데 파일에 주소를 에코하면 변경 사항이 적용되지 않지만 파일을 여는 것만으로도 충분하며 vim아무 것도 변경하지 않고(종료만 하면) 이전에 에코된 변경 사항이 적용됩니다. 이것의 메커니즘은 무엇입니까?

답변1

[It] 그냥 열면 충분합니다 vim. 아무 것도 변경하지 않고(그냥 종료하면) 이전에 에코된 변경 사항이 적용됩니다.

sudo vim일하는데 사용해야 해요 . 일반 사용자로 실행해도 효과가 없습니다. 내 이론은 /etc/resolver디렉토리의 파일이 아닌 디렉토리의 변경 사항을 감시 하고 디렉토리에 대한 변경 사항을 발견하면 그 안의 모든 것을 다시 로드한다는 것입니다. Vim은 기본적으로 편집 중인 파일과 동일한 디렉터리에 위치하는 스왑 파일을 만듭니다. 이는 디렉토리에 대한 변경이며 관찰자에 의해 발견됩니다. 그래서 내가 할 때 :

sudo vim -n /etc/resolver/example.net

스왑 파일 생성이 비활성화 되면 -n파일 변경 사항이 더 이상 적용되지 않습니다.

답변2

기존 파일의 변경 사항은 /etc/resolver폴더에서 파일이 생성되거나 삭제될 때만 인식되지 않습니다.

이 폴더를 모니터링하는 플러그인입니다 IPMonitor. 소스 코드에서:configd

status = notify_monitor_file(notify_token, resolver_directory_path, 0);

이 기능의 목적은 inode경로에 모니터를 설정하는 것입니다. 따라서 해당 디렉터리의 파일이 변경 inode될 때만 알림을 받게 되며 /etc/resolver.inode

UNIX에서 디렉토리는 디렉토리의 내용을 나열하는 테이블의 내용을 포함하는 파일과 같습니다. 따라서 파일을 추가하거나 삭제할 때마다 테이블이 업데이트되고 그에 따라 inode업데이트되어 알림이 트리거됩니다. 디렉터리에 있는 파일을 편집하는 경우 inode해당 디렉터리는 전혀 건드리지 않습니다.

하지만 /etc/resolvermacOS에서는 전혀 사용하면 안 됩니다. 이전 버전과의 호환성을 위해서만 유지됩니다. 대신 도구를 사용하여 액세스할 수 있는 동적 저장소에 DNS 항목을 만들어야 합니다 scutil. 확인해주십시오이 주제에 대한 나의 답변.

답변3

컴퓨터를 다시 시작하거나 다음과 같이 네트워크 장치 DNS 설정을 강제로 새로 고칠 때까지 scutil --dns예상된 DNS 항목을 다시 가져올 수 없습니다.

networksetup -setdnsservers Wi-fi 8.8.8.8

이 수정/해킹에 대한 자세한 내용을 여기에 작성하세요.https://josephharding.github.io/tutorials/2018/06/28/mac-resolver-refresh.html

관련 정보