Mac OS X에서 터미널 (또는 스크립트)에서 DNS 서버 변경


29

Mac OS X의 터미널에서 DNS 서버를 어떻게 변경합니까? [DNS가 VPN에서 올바르게 작동하지 않기 때문에 이것이 필요합니다. 때로는 기본 연결에 DNS를 사용하고 때로는 VPN에 지정된 DNS를 사용하고있을 수도 있습니다.]

답변:


15

scutil터미널에서 대화식으로 사용할 수 있습니다 . sudo scutil적절한 위치에서 DNS 서버를 교체하여 다음 명령을 실행 하고 실행 하십시오 .

> 열다
> d.init
d. 서버 주소 추가 * 8.8.8.8 9.9.9.9
> 상태 설정 : / Network / Service / PRIMARY_SERVICE_ID / DNS
> 종료

DNS 서버 를 사용 8.8.8.8하고 9.9.9.9사용 하는 대신 .

유일한 문제는 다시 부팅해도 지속되지 않는다는 것 입니다. 영구적으로 변경하려면 ncutil 이 필요 합니다 . /etc/resolv.conf최신 버전의 OS X에서 편집 이 충분하지 않은 이유 는 이제 configd가 데이터베이스를 사용하여 다른 응용 프로그램에서 읽은 현재 설정 정보를 저장하기 때문입니다. 일부 응용 프로그램 /etc/resolv.conf 모든 응용 프로그램에 해당되는 것은 아니지만 여전히 읽을 수 있습니다 (예 : 호스트).


2
그러나 8.8.8.8은 유효한 것입니다. 구글의 퍼블릭 DNS. 8.8.4.4가 보조입니다. :-)
잊혀진 세미콜론

알아요, 나는 그것을 사용합니다 :)
John T

1
그렇습니다. scutil --dns확인에 사용할 수 있습니다 .
John T

2
적어도 말 그대로는 Mac OSX 10.7.5 MBP에서 작동하지 않는 것 같습니다. set State:/Network/Service/PRIMARY_SERVICE_ID/DNS라인 에있는 것을 교체해야합니까, 아니면 그대로 사용할 수 있습니까? scutil --dns변경 후 새 DNS 서버가 출력에 표시되어야합니까 ?
ssc

2
@ssc Run scutil다음에 > listPRIMARY_SERVICE_ID를 바꿀 키를 찾으십시오.
J.Money

46

당신은 사용할 수 있습니다 networksetup:

sudo networksetup -setdnsservers <networkservice> DNS1, DNS2, DNS3

예 (공항 연결이 Google의 DNS 서버를 사용하도록 함)

sudo networksetup -setdnsservers AirPort 8.8.8.8 8.8.4.4

를 실행하여 네트워크 서비스 이름을 찾을 수 있습니다 networksetup -listallnetworkservices. 아마도 'Wi-Fi'일 것입니다.

이것은 시스템 환경 설정의 네트워크 환경 설정 패널에서 전체를 편집하는 것과 동일하므로 재부팅 할 때까지 지속됩니다.

Snow Leopard에서 DNS 서버에 대한 쿼리가 변경 될 때 발생하는 DNS 문제가 발생했을 수 있습니다 (질문 84144 참조).


와우, 84144는 내가 겪고있는 문제입니다. 아직도이 모든 것을 처리하고 있습니다 .... 대단히 감사합니다!
Dan Rosenstark 2009

6
DNS를 제거하려는 사람에게 한 가지 참고할 사항은 DNS 대신 "빈"(따옴표없이)을 작성하는 것입니다.sudo networksetup -setdnsservers <networkservice> empty
jackJoe

14

Chealion의 게시물에 답변 할 충분한 포인트가 없지만 추가하기 위해 인터페이스를 나열하는 것으로 시작합니다.

networksetup -listallnetworkservices

변경하려는 인터페이스가 있으면 아래에서 수행 할 수 있습니다 (Wi-Fi를 사용하고 있지만 다른 인터페이스를 수행 할 수 있음)

sudo networksetup -setdnsservers Wi-Fi empty
sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4
sudo killall -HUP mDNSResponder

위의 첫 번째 줄은 DNS 설정을 비운 다음 사용하려는 DNS 서버와 함께 DNS 캐시를 따르고 DNS 캐시를 미세하게 지 웁니다.

DNS 변경을 확인하려면이 작업을 전후에 또는 간단하게 수행 할 수 있습니다

scutil --dns | grep 'nameserver\[[0-9]*\]'

이 페이지를 우연히 발견 한 사람 이제 GitHub에 요점이 있습니다. gist.github.com/dkittell/34fe7b7422323fba546948b7448933a5
David Kittell

1

resolv.conf는 더 이상 OSX에서 작동하지 않습니다. 해당 파일의 맨 위에 다음과 같은 통지가 있습니다.

#
# macOS Notice
#
# This file is not consulted for DNS hostname resolution, address
# resolution, or the DNS query routing mechanism used by most
# processes on this system.
#
# To view the DNS configuration used by this system, use:
#   scutil --dns
#
# SEE ALSO
#   dns-sd(1), scutil(8)
#
# This file is automatically generated.
#

또한 networksetup -listallnetworkservices모든 VPN 인터페이스를 나열하지는 않습니다.

scutil을 사용하여 올바른 인터페이스를 대상으로하는 방법은 다음과 같습니다. 1. commands.txt대화 형 scutil 도구에 대한 명령을 사용하여 파일 을 만듭니다 . 예를 들어 필자의 경우 펄스 보안 인터페이스의 내용 :

get State:/Network/Service/net.pulsesecure.pulse.nc.main/DNS
d.add ServerAddresses * 8.8.8.8 9.9.9.9
set State:/Network/Service/net.pulsesecure.pulse.nc.main/DNS
  1. 파이프 된 명령으로 scutil을 실행하십시오. (sudo for set)
sudo scutil < commands.txt

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.