it-swarm-vi.com

Thuyết phục apt-get * not * để sử dụng phương thức IPv6

ISP tôi làm việc đang thiết lập một mạng IPv6 nội bộ để chuẩn bị cuối cùng kết nối với internet IPv6. Do đó, một số máy chủ trong mạng này hiện cố gắng kết nối với security.debian.org qua địa chỉ IPv6 theo mặc định khi chạy apt-get update, và điều đó dẫn đến việc phải chờ thời gian chờ lâu bất cứ khi nào tôi tải xuống các bản cập nhật thuộc bất kỳ loại nào.

Có cách nào để nói với apt là thích IPv4 hoặc bỏ qua IPv6 hoàn toàn không?

245
Shadur

Thêm vào -o Acquire::ForceIPv4=true khi chạy apt-get.

Nếu bạn muốn duy trì cài đặt, chỉ cần tạo /etc/apt/apt.conf.d/99force-ipv4 và đặt Acquire::ForceIPv4 "true"; trong đó:

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

Tùy chọn cấu hình Acquire::ForceIPv4Acquire::ForceIPv6 đã được thêm vào phiên bản 0.9.7.9 ~ exp1 (xem bug 611891 ) có sẵn kể từ Ubuntu Saucy (được phát hành trong Tháng 10 năm 2013) và Debian Jessie (phát hành vào tháng 4 năm 2015).

324
mmoya

Như Gilles nói , sử dụng gai.conf. Ghi chú:

  1. Điều này hoạt động ở mức thấp hơn nhiều (mạng DNS và IP) so với APT, do đó, nó sẽ thay đổi cách tất cả mạng ứng dụng của bạn - ít nhất là tất cả, sử dụng getaddrinfo.
  2. Trước khi chỉnh sửa gai.conf, Bạn nên sao lưu và đọc nó (đừng lo lắng, nó ngắn). Các chỉnh sửa dưới đây có thể đã được đề cập trong tệp hiện tại của bạn; nếu tệp hiện tại chỉ ra điều gì đó khác với những gì được đề cập dưới đây, có lẽ bạn nên thích những gì trong tệp hiện tại của mình.

Nhưng nếu đây là những gì bạn muốn (có thể là như vậy), hãy tiếp tục. Giả sử chúng tôi có hai máy chủ 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

Trường hợp 1: thích IPV4 cho tất cả máy chủ

Nối vào /etc/gai.conf Dòng sau:

precedence ::ffff:0:0/96  100

Sau khi lưu tệp đã chỉnh sửa (không cần khởi động lại), bạn sẽ thấy các ứng dụng mạng (ví dụ: telnet) bằng IPV4: ví dụ:

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

Trường hợp 2: thích IPV6 cho các máy chủ cụ thể

Nếu chúng tôi muốn chỉ thích IPV6 cho www.he.net Hoặc mạng của nó, chúng tôi có thể nối thêm mặt nạ/tiền tố cho tất cả, hoặc chỉ một phần, địa chỉ IPV6 của nó vào /etc/gai.conf. Ví dụ: dòng sau:

precedence 2001:470::/32 100

(sau khi lưu tệp đã chỉnh sửa) tạo ra

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

Trường hợp 3: thích IPV4 cho các máy chủ cụ thể

Nếu chúng ta đảo ngược mặt nạ thì điều ngược lại có đúng không? Theo @GrueMaster, việc bổ sung

precedence 2001:470::/96 100

đã làm việc cho anh ta sau khi vô hiệu hóa IPV6 cho security.ubuntu.com (nếu không thì nó bị treo mãi mãi).


Xem thêm:

84
Lmwangi

Bạn có thể thiết lập apt-cacher-ng trên máy dự phòng để hoạt động như một proxy/bộ đệm cho tất cả các máy chủ của bạn. Bạn có thể buộc cấu hình chỉ sử dụng các máy chủ cụ thể hoặc sử dụng thủ thuật/etc/hosts được đề xuất bởi @badp trên một máy đó.

apt-get install apt-cacher-ng

Khi bạn đã thiết lập apt-cache-ng, bạn chỉ cần bỏ dòng sau (với địa chỉ IP/tên máy chủ được thay đổi để trỏ đến máy tính của bạn) trong / etc/apt/apt.conf.d/90httpproxy = =

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

Tôi sử dụng thiết lập đó để giảm việc sử dụng băng thông nhưng nó sẽ giải quyết vấn đề của bạn. Thật không may, tôi không biết cách vô hiệu hóa trực tiếp tra cứu ipv6 cho apt-get.

10
Richm

Bạn có thể giải quyết vấn đề này bằng cách thiết lập máy chủ proxy DNS loại bỏ phản hồi ip6.

5
pjc50

Làm thế nào về việc thêm một dòng trong /etc/hosts ghi đè các địa chỉ liên quan? ví dụ.,

130.89.149.226  ftp.debian.org      
195.20.242.89   security.debian.org 
4
badp

Chiếm chủ đề cũ, nhưng phải đối mặt với cùng một vấn đề gần đây. Vì vậy, dựa trên lời khuyên đưa ra ở trên và đầu ra của Máy chủ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

Giải quyết vấn đề theo một cách hơi khác - giảm mức độ ưu tiên của các mạng IPv6 có chứa security.debian.org trong /etc/gai.conf:

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

Vì vậy, IPv6 vẫn được ưu tiên ngoại trừ security.debian.org .

1
Timur Bakeyev

Kể từ ngày 08 tháng 10 năm 2014, tôi gặp vấn đề tương tự, cố gắng cập nhật debian đằng sau một proxy trên mạng cục bộ. Với hy vọng nó sẽ có liên quan đến những người khác, tôi đăng phản hồi của mình ở đây. Như những người khác đã đề cập, chỉnh sửa /etc/hosts Là điều bạn nên cẩn thận.

Nhưng cá nhân tôi chỉ muốn cập nhật.

Nội dung của /etc/apt/source.list khi thực hiện cập nhật (nó khác trước khi cập nhật ..):

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

Nội dung của /etc/apt/apt.conf:

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

Ngoài ra/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

Bây giờ, chạy apt-get update ; apt-get upgrade Khi root hoạt động tốt.

Như đã đề cập trong các câu trả lời khác, hãy sử dụng, chạy lệnh Host trên miền để lấy đúng ip để chèn vào tệp máy chủ.

Thí dụ:

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

Điều này đã cập nhật thành công hệ thống thành Debian GNU/Linux testing (jessie). Bạn có thể không muốn chạy với kho kiểm tra, sau đó chỉ cần xóa nó khỏi các nguồn. Các kho lưu trữ thử nghiệm cung cấp cho bạn các bản cập nhật gần đây hơn của một số gói, nhưng không được coi là ổn định.

1
NordicViking

Tôi đã tìm thấy một cách tốt hơn nhiều để làm điều này. Mở tệp sources.list Của bạn và ghi lại tên máy chủ của repos. Nhận địa chỉ IPv4 của họ, sau đó chỉnh sửa sources.list Bằng địa chỉ IPv4 thay vì tên máy chủ. Giờ đây, Apt-get nên liên hệ với các kho lưu trữ qua các địa chỉ IPv4 mà bạn đã chỉ định, bỏ qua IPv6.

Có một nhược điểm là các repos thường có một số loại cân bằng tải và/hoặc định vị địa lý IP được thiết lập, mà phương pháp này tất nhiên bỏ qua. Tuy nhiên, sẽ không có vấn đề gì nếu chỉ có một vài người làm việc đó. Nếu bạn thấy một máy nhân bản chậm, hãy thử lấy một địa chỉ IP repo khác (ví dụ: bằng cách sử dụng dịch vụ ping trực tuyến) và sử dụng địa chỉ đó.

0
D. Strout