IPv6 방법을 사용하도록 apt-get * not * 확인


239

내가 일하고있는 ISP는 결국 IPv6 인터넷에 연결하기 위해 내부 IPv6 네트워크를 설정하고 있습니다. 결과적 으로이 네트워크의 일부 서버는 이제 실행할 때 기본적으로 IPv6 주소를 통해 security.debian.org에 연결하려고 시도하므로 apt-get update모든 종류의 업데이트를 다운로드 할 때마다 긴 시간 초과를 기다려야합니다 .

apt에게 IPv4를 선호하거나 IPv6을 완전히 무시하도록 지시하는 방법이 있습니까?


3
라우팅 실패와 함께 즉시 반환되지 않아야합니까?
pjc50

7
아니요, 내부 네트워크에 여러 서브넷 (및 호스트에 IPv6 기본 게이트웨이가 있음)간에 라우팅이 있지만 외부 세계에 대한 IPv6 연결이없는 것이 전적으로 가능합니다.
앤드류 메디 코

5
의 A 레코드가 AAA 레코드보다 먼저 반환 /etc/gai.conf되도록 설정하는 방법이있을 수 security.debian.org있지만 해당 파일에 무엇을 넣을지 정확히 모르겠습니다.
Gilles

3
@AndrewMedico-네트워크의 기본 게이트웨이가 외부 ipV6 연결이 없음을 알고 에지에서 아웃 바운드 시도를 매우 빨리 거부해서는 안됩니까? 여기에 네트워크 문제와 질문이 있다고 생각합니다.
Michael Kohne

7
에지 라우터 / 방화벽 / 문제를 일으키는 것은 문제를 해결하는 가장 좋은 방법입니다. 그것은 해야 ICMP 목적지 도달 할 수없는 패킷을 반환한다. 이것은 일어나지 않거나 무언가를 막고 있습니다. 어느 쪽이든, 문제는 네트워크 담당자에게보고해야합니다.
Michael Hampton

답변:


319

-o Acquire::ForceIPv4=true실행할 때 추가하십시오 apt-get.

설정을 영구적으로 유지하려면 /etc/apt/apt.conf.d/99force-ipv4를 작성 하여 입력 Acquire::ForceIPv4 "true";하십시오.

echo 'Acquire::ForceIPv4 "true";' | sudo tee /etc/apt/apt.conf.d/99force-ipv4

구성 옵션이 Acquire::ForceIPv4있으며 2013 년 10 월에 릴리스 된 Ubuntu Saucy 및 2015 년 4 월에 릴리스 된 Debian Jessie 이후에 사용할 수있는 Acquire::ForceIPv6버전 0.9.7.9 ~ exp1 ( 버그 611891 참조 )에 추가되었습니다.


7
"수락 된"을 이것으로 옮기는 것; 원래 30 점의 대답은 완벽하게 정확하면서이 할 수있는 옵션을 제공한다, 그것은 훨씬 광범위한 규모 적용의 단지 apt-get을 제한합니다.
Shadur

답을 올바르게 설명하십시오. -o Acquire :: ForceIPv4 = true는 사용자가 ipv4를 사용할 수 있도록하는 명령에 추가 된 것입니다.
Kendrick

답변은 Kendrick의 제안에 따라 업데이트되었습니다
mmoya

1
내 나머지 부분에서 판단 apt.conf하면 다음과 같이 작성해야합니다. Acquire::ForceIPv4 "true";(큰 따옴표로)
mirabilos

6
@ZAB는 파일에 대한 쓰기 액세스 권한 sudo echo 'test' > file이 없으면 사용자 권한으로 리디렉션이 실행되기 때문에 작동하지 않기 때문에
LeartS

81

으로 질 말한다 , 사용 gai.conf. 노트:

  1. 이는 APT보다 훨씬 낮은 수준 (DNS 및 IP 네트워킹)에서 작동하므로 모든 응용 프로그램의 네트워크 방식 ( 적어도 모든 사용 네트워크)을 변경합니다 getaddrinfo.
  2. 을 (를) 편집하기 전에 gai.conf이를 백업하고 읽어야합니다 (걱정하지 마십시오). 아래 편집 내용은 현재 파일에 이미 언급되어있을 것입니다. 현재 파일이 아래 언급 된 것과 다른 것을 나타내는 경우 현재 파일에있는 것을 선호해야합니다.

그러나 이것이 원하는 것이라면 (아마도 가능하다면) 계속 진행해 봅시다. 우리는 두 호스트가 말 www.he.netwww.ripe.net:

$ host www.he.net
www.he.net is an alias for he.net.
he.net has address 216.218.186.2
he.net has IPv6 address 2001:470:0:76::2

$ host www.ripe.net
www.ripe.net has address 193.0.6.139
www.ripe.net has IPv6 address 2001:67c:2e8:22::c100:68b

사례 1 : 모든 호스트에 IPV4 선호

/etc/gai.conf다음 줄에 추가 하십시오.

precedence ::ffff:0:0/96  100

편집 된 파일을 저장 한 후 (다시 시작할 필요가 없음 telnet) IPV4를 사용하는 네트워킹 앱 (예 :)이 표시됩니다.

$ telnet www.ripe.net 81
Trying 193.0.6.139...
^C
$ telnet www.he.net 81
Trying 216.218.186.2...

사례 2 : 특정 호스트에 IPV6 선호

IPV6 www.he.net또는 네트워크 에만 IPV6을 사용하려는 경우 IPV6 주소의 전체 또는 일부에 마스크 / 접두사 를 추가 할 수 있습니다 /etc/gai.conf. 예를 들어, 다음 줄 :

precedence 2001:470::/32 100

(편집 된 파일을 저장 한 후) 생성

$ telnet www.ripe.net 81
Trying 193.0.6.139...
^C
$ telnet www.he.net 81
Trying 2001:470:0:76::2...
^C

사례 3 : 특정 호스트에 IPV4 선호

우리가 마스크를 뒤집 으면 그 반대가 사실입니까? @GrueMaster에 따르면,

precedence 2001:470::/96 100

IPV6을 비활성화 한 후 그를 위해 일했습니다 security.ubuntu.com(그렇지 않으면 영원히 중단 됩니다).


또한보십시오:


위의 링크가 사라지는 경우 내용을 요약하면 어떻습니까?
Faheem Mitha

그렇다면 특정 이름 또는 적어도 특정 주소 (범위)에 대해 IPv6을 비활성화하는 구문은 무엇입니까? 게시물에 추가하면 가장 좋은 답변이 될 것입니다.
Gilles

감사. #security.debian.org has IPv6 address 2610:148:1f10:3::73 \n #security.debian.org has IPv6 address 2001:4f8:8:36::6 \n precedence 2001:4f8::/96 100 \n precedence 2610:148::/96 100 /etc/gai.conf 에 2 줄 을 추가 했는데 apt-get 업데이트가 완벽하게 작동합니다.
밝게 돈

10

당신은 설정 수 는 apt-cacher는-ng를 모든 호스트에 대한 프록시 / 캐시의 역할을하도록 여분의 컴퓨터에. 구성이 특정 호스트 만 사용하도록하거나 해당 시스템에서 @badp가 제안한 / etc / hosts 트릭을 사용하도록 강제 할 수 있습니다.

apt-get install apt-cacher-ng

apt-cache-ng 설정을 마치면 /etc/apt/apt.conf.d/90httpproxy에 다음 줄 (캐시 컴퓨터를 가리 키도록 IP 주소 / 호스트 이름을 변경 한 상태)을 삭제하면됩니다.

Acquire::http { Proxy "http://[192.168.1.254]:3142"; };

해당 설정을 사용하여 대역폭 사용을 줄이지 만 문제를 해결해야합니다. 불행히도 apt-get 자체에 대해 ipv6 조회를 직접 비활성화하는 방법을 알지 못합니다.


여전히 완벽한 솔루션은 아니지만 얻을 수있는만큼 좋습니다. 감사.
Shadur

5

ip6 응답을 삭제 한 DNS 프록시 서버를 설정하여이 문제를 해결할 수 있습니다.


지역 리졸버가 여전히 AAAA 레코드를 얻으려고 시도하지 않습니까? 그리고 시간 초과?
Mikel

4

/etc/hosts관련 주소 를 재정의 할 때 줄을 추가하는 것은 어떻습니까? 예를 들어

130.89.149.226  ftp.debian.org      
195.20.242.89   security.debian.org 

13
다른 방법이 전혀 없다면이 솔루션을 마지막에 저장하겠습니다. 나는 정말 어수선 좋아하지 않는 /etc/hosts나 자신을 소유하지 않은 IP 주소로.
Shadur

@Shadur 그렇습니다, 나는 당신의 요점을 완전히 볼 수 있습니다 :)
badp

참고 : 이것들은 뒤집어 야합니다. 따라서 IP는 호스트 명입니다
Mike T

1

오래된 주제를 납치했지만 최근에 같은 문제가 발생했습니다. 따라서 위의 조언과 호스트whois 의 출력을 기반으로합니다 .

# host security.debian.org
security.debian.org has address 212.211.132.250
security.debian.org has address 195.20.242.89
security.debian.org has address 212.211.132.32
security.debian.org has IPv6 address 2001:8d8:580:400:6564:a62:0:2
security.debian.org has IPv6 address 2001:a78:5:0:216:35ff:fe7f:be4f
security.debian.org has IPv6 address 2001:a78:5:1:216:35ff:fe7f:6ceb

약간 다른 방식으로 문제를 해결 했습니다. /etc/gai.conf 에서 security.debian.org 를 포함하는 IPv6 네트워크의 우선 순위가 낮아졌습니다 .

# Make IPv6 for security.debian.org undesirable
precedence 2001:8d8:580::/48    5
precedence 2001:a78:5::/48      5

따라서 security.debian.org를 제외하고 IPv6이 여전히 선호 됩니다.


1

2014 년 10 월 8 일 현재 로컬 네트워크의 프록시 뒤에서 데비안을 업데이트하려고 시도하면서 동일한 문제가 발생했습니다. 그것이 다른 사람들과 관련이 있기를 바랍니다. 다른 사람들이 언급했듯이, 편집 /etc/hosts은 조심해야 할 것입니다.

그러나 개인적으로 나는 단지 업데이트를하고 싶었습니다.

업데이트를 수행 할 때 /etc/apt/sources.list의 내용 (업데이트 이전과 다릅니다.) :

deb http://http.debian.net/debian/ testing main
deb-src http://http.debian.net/debian/ testing main

deb http://mirrors.kernel.org/debian/ wheezy main
deb-src http://mirrors.kernel.org/debian/ wheezy main

deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main

/etc/apt/apt.conf의 내용 :

Acquire::http::proxy "http://192.168.1.10:7777/";
Acquire::http::Timeout "10";
Acquire::ftp::Timeout "10";

/ etc / hosts에 추가 :

#Workaround for making apt-get work (08-10-2014)
195.20.242.89 security.debian.org
130.89.148.12 ftp.debian.org

이제 apt-get update ; apt-get upgrade루트로 실행 하면 잘 작동했습니다.

다른 답변에서 언급했듯이 도메인에서 host 명령을 실행하여 hosts 파일에 올바른 ip를 삽입하십시오.

예:

$ host ftp.debian.org
ftp.debian.org has address 130.89.148.12

이것으로 시스템이로 성공적으로 업데이트되었습니다 Debian GNU/Linux testing (jessie). 테스트 리포지토리를 사용하지 않고 소스에서 제거하기 만하면됩니다. 테스트 리포지토리는 여러 패키지의 최신 업데이트를 제공하지만 안정적인 것으로 간주되지는 않습니다.


다시 말하지만 hosts파일 수정은 매우 차선책입니다.
Shadur

0

나는 이것을하는 더 좋은 방법을 찾았습니다. sources.list파일을 열고 repos의 호스트 이름을 적어 둡니다. 자신의 가져 오기 의 IPv4 , 주소를 다음 편집 sources.list는 IPv4가 호스트 이름이 아닌 주소. Apt-get은 이제 IPv6을 무시하고 지정한 IPv4 주소를 통해 리포지토리에 연결해야합니다.

repos에는 일반적으로 일종의로드 밸런싱 및 / 또는 IP 지리적 위치가 설정되어 있으며,이 방법은 무시합니다. 그러나 소수의 사람들 만 그렇게해도 문제가되지 않습니다. 하나의 미러가 느리다는 것을 발견하면 다른 리포 IP 주소 (예 : 온라인 핑 서비스 사용)를 가져 와서 사용해보십시오.


2
그것은 이미 설명 한 이유로 실제로 나쁜 해결책입니다.
Shadur

-4

당신을 위해 효과가 있다면 이것을 시도 할 수 있습니다

user@ubuntuvm:~$ sudo bash
root@ubuntuvm:~# echo 1 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6 

-> 인터페이스 이름을 바꾸십시오


이것은 내가 묻는 것과 다른 질문에 대한 해결책입니다.
Shadur
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.