티스토리 블로그를 개설한 지 얼마 되지 않았는데 이상하게 블로그가 통째로 다음에서 검색이 안되기 시작했습니다. 구글 애드센스를 달기 위해서 나름 열심히 노력하고 있는데 특정 글이 아닌 블로그 전체가 검색이 안되니까 많이 속상하네요. 힘내서 글을 써보려고 합니다.
개요
본 글에서는 git 명령 수행시에 "Could not resolve host: github.com" 에러가 뜨는 문제를 해결하는 방법에 대해서 설명하고자 합니다.
문제의 상황
신용카드 크기의 미니 컴퓨터인 라즈베리파이는 휴대하기 정말 간편합니다. 시골집에 라즈베리파이를 가져와서 작업 중인데 기존에 잘 사용하던 repository에서 git pull을 했는데 아래와 같은 에러 메시지가 뜨면서 git pull이 되지 않더군요.
$ git pull fatal: unable to access 'https://github.com/boyinblue/raspberry.git/': Could not resolve host: github.com |
여기저기 검색을 해보면서 결국 해결을 하기는 했습니다만, 완벽한 솔루션을 한 번에 제공하는 페이지는 찾을 수 없었습니다.
문제 원인 분석
이 상황에서 www.github.com으로 ping을 날려보면 ping이 제대로 나가지 않는 것을 확인할 수 있습니다.
$ ping www.github.com ping: www.github.com: Name or service not known |
도메인 네임에 해당하는 IP를 찾을 수 없어서 발생하는 문제입니다.
$ sudo cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN # 127.0.0.53 is the systemd-resolved stub resolver. # run "systemd-resolve --status" to see details about the actual nameservers. nameserver 127.0.0.53 options edns0 trust-ad |
/etc/resolv.conf 파일을 살펴보면 nameserver 설정이 올바르지 않다는 것을 확인할 수 있습니다. 여기서 주의할 점은 /etc/resolve.conf (X)파일이 아니라 /etc/resolv.conf (O) 파일이므로 이 점을 유념하시기 바랍니다.
임시 대책 (/etc/resolv.conf 파일 수정)
/etc/resolv.conf 파일을 편집해서 hostname에 8.8.8.8과 8.8.4.4를 추가해주면 됩니다.
$ sudo cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN # 127.0.0.53 is the systemd-resolved stub resolver. # run "systemd-resolve --status" to see details about the actual nameservers. nameserver 127.0.0.53 nameserver 8.8.8.8 nameserver 8.8.4.4 options edns0 trust-ad |
위와 같이 수정하고 www.github.com으로 ping을 날려보면 ping이 제대로 나가는 것을 확인하실 수 있습니다.
$ ping www.github.com PING github.com (15.164.81.167) 56(84) bytes of data. 64 bytes from ec2-15-164-81-167.ap-northeast-2.compute.amazonaws.com (15.164.81.167): icmp_seq=1 ttl=46 time=11.9 ms 64 bytes from ec2-15-164-81-167.ap-northeast-2.compute.amazonaws.com (15.164.81.167): icmp_seq=2 ttl=46 time=11.7 ms |
이 상태에서 git 명령을 실행시켜보면 정상적으로 github 서버와 통신이 되는 것을 확인하실 수 있습니다. 하지만 이게 영구적인 대책은 아닙니다. 왜냐하면 /etc/resolv.conf 파일을 재부팅 시에 자동으로 생성되어 리셋될 수 있기 때문입니다. 실제로 리부팅하면 /etc/resolv.conf가 초기화되어 있는 것을 확인할 수 있습니다.
영구 대책 (resolvconf 설정)
영구적으로 nameserver 설정을 제대로 해주는 방법이 있습니다. 물론 여러가지 방법들이 있겠지만 reolvconf 패키지를 설치해서 설정하는 방법에 대해서 설명드리겠습니다.
1. 우선 resolvconf 패키지를 설치합니다.
$ sudo apt-get install resolvconf 패키지 목록을 읽는 중입니다... 완료 의존성 트리를 만드는 중입니다... 완료 상태 정보를 읽는 중입니다... 완료 다음 새 패키지를 설치할 것입니다: resolvconf 0개 업그레이드, 1개 새로 설치, 0개 제거 및 0개 업그레이드 안 함. 54.7 k바이트 아카이브를 받아야 합니다. 이 작업 후 203 k바이트의 디스크 공간을 더 사용하게 됩니다. 받기:1 http://ports.ubuntu.com/ubuntu-ports jammy/universe arm64 resolvconf all 1.84ubuntu1 [54.7 kB] 내려받기 54.7 k바이트, 소요시간 1초 (36.7 k바이트/초) 패키지를 미리 설정하는 중입니다... Selecting previously unselected package resolvconf. (데이터베이스 읽는중 ...현재 232581개의 파일과 디렉터리가 설치되어 있습니다.) Preparing to unpack .../resolvconf_1.84ubuntu1_all.deb ... Unpacking resolvconf (1.84ubuntu1) ... resolvconf (1.84ubuntu1) 설정하는 중입니다 ... Created symlink /etc/systemd/system/sysinit.target.wants/resolvconf.service → /lib/systemd/system/resolvconf.service. Created symlink /etc/systemd/system/systemd-resolved.service.wants/resolvconf-pull-resolved.path → /lib/systemd/system/resolvconf-pull-resolved.path. Created symlink /etc/systemd/system/systemd-resolved.service.wants/resolvconf-pull-resolved.service → /lib/systemd/system/resolvconf-pull-resolved.service. Processing triggers for man-db (2.10.2-1) ... Processing triggers for resolvconf (1.84ubuntu1) ... |
2. 설정 파일 편집 /etc/resolvconf/resolv.conf.d/tail
/etc/resolvconf/resolv.conf.d 경로에 들어가보면 head 파일도 있고 tail 파일도 있습니다. 눈치를 채셨겠지만 head 파일에 nameserver를 추가하면 그 내용이 resolv.conf 파일의 앞쪽에 적용되고, tail 파일에 nameserver를 추가하면 뒤쪽에 적용됩니다.
대부분의 경우 로컬의 hostname을 먼저 처리해줘야되기 때문에 추가적인 nameserver는 tail에 작성해주시는 게 맞습니다. 또한 head 설정은 직접 편집하지 말라는 경고 문구까지 있습니다.
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN # 127.0.0.53 is the systemd-resolved stub resolver. # run "systemd-resolve --status" to see details about the actual nameservers. |
따라서 /etc/resolvcon/resolv.conf.d/tail 파일을 열어서 nameserver를 추가해주겠습니다.
$ vi /etc/resolvconf/resolv.conf.d/tail
아래 2줄을 추가해줍니다.
nameserver 8.8.8.8 nameserver 8.8.4.4 |
3. 설정 적용 sudo resolvconf -u
$ sudo resolvconf -u
위의 명령으로 설정 파일을 바로 적용합니다. 리부팅을 하더라도 /etc/resolv.conf 파일의 설정이 올바로 유지가 됩니다.
추가 대책
만약 위의 방법으로도 해당 문제가 해결되지 않는다면, /etc/resolvcon/resolv.conf.d/tail 파일에 "options edns0 trust-ad"를 추가해보는 것도 괜찮은 시도 방법입니다. 물론, 해당 설정이 /etc/resolv.conf 파일에 없다는 가정에서 설명드립니다.
/etc/resolvconf/resolv.conf.d/tail 파일을 편집기로 엽니다.
$ sudo vi /etc/resolvconf/resolv.conf.d/tail
options edns0 trust-ad 라인을 가장 마지막에 추가해줍니다.
nameserver 8.8.8.8 nameserver 8.8.4.4 options edns0 trust-ad |
변경된 설정을 적용합니다.
$ sudo resolvconf -u
긴급 대책
만약 위의 방법으로도 안 된다면 /etc/hosts 파일에 아래 라인을 추가합니다. dns를 거쳐서 도메인 네임을 IP로 변환하는 게 아니라, 그냥 로컬에서 "github.com"을 "15.164.81.167"로 변환해줍니다.
127.0.0.1 localhost 15.164.81.167 github.com # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters |
22.04 업그레이드시에 발생한 문제라면
만약 22.04 이전 버전에서 22.04 버전으로 업그레이드 한 이후에 이 문제가 발생했다면, /etc/resolv.conf 설정 파일이 22.04 이전의 설정 파일을 가리키고 있어서 발생하는 문제일 수 있습니다. 아래의 글을 참고하시기 바랍니다.
이상입니다.
'SW개발 > 우분투 리눅스' 카테고리의 다른 글
우분투 22.04 한글 입력 안되는 문제 해결 방법 (kime로 대동단결) (5) | 2022.06.07 |
---|---|
Ubuntu 22.04 설치 실패 [Errno 5] Input/output error (0) | 2022.06.05 |
[우분투] 핫스팟 로그인시에 화면 깨져서 나오는 문제 해결 방법 (0) | 2022.06.03 |
주소를 찾을 수 없음. 도메인을 찾지 못하여 메일을 전송하지 못했습니다. 오타나 불필요한 공백이 있는지 확인한 후 다시 시도하세요. (0) | 2022.06.02 |
crontab이 제대로 실행되지 않는다면 crontab에서 지원하지 않는 명령일 수 있습니다. (pushd, popd 명령 사용 불가) (0) | 2022.05.26 |
우분투 리눅스에서 키보드 입력이 느린 문제 해결 방법 (USB 3.0 문제일 수 있습니다.) (0) | 2022.05.23 |
ssh 연결시 "Bad owner or permissions on /home/user/.ssh/config" 발생시 해결 방법 (0) | 2022.05.20 |
Ubuntu Linux 전체 언어 지원을 설치하지 못했습니다. 패키지 의존성을 해결할 수 없습니다. thunderbird-locale-en (0) | 2022.05.10 |