Evitar que o zypper tente usar o IPv6

1

Estou configurando uma caixa com o OpenSUSE 13.1. Por razões além da minha compreensão, o Zypper insiste completamente em usar endereços IPv6 e recusa-se a usar o IPv4. O que é um problema, já que o IPv6 não funciona em nossa LAN.

Eu tentei desativar o IPv6 de várias maneiras:

  • Eu disse ao YaST para desativar o IPv6.
  • Eu tentei cutucar e cutucar /etc/modprobe .
  • Tentei definir ipv6.disable=1 como um parâmetro de inicialização do kernel.

Nenhuma dessas coisas teve o menor efeito; O zypper ainda se recusa a usar endereços IP reais e continua tentando desesperadamente usar o IPv6.

Note que posso fazer o ping do servidor de download muito bem; O comando ping consulta o endereço IPv4 do servidor e não tem problema em efetuar ping dele. E ainda, o Zypper ainda insiste em usar o IPv6, e depois desistir porque o destino é inacessível. (Que é isso - via IPv6.)

Estou com o problema exato descrito em esta questão . (Até mesmo o endereço IPv6 com falha é idêntico.) Essa questão trata de uma versão mais antiga do OpenSUSE, e a resposta aceita apenas diz para desabilitar o IPv6, que eu já tentei.

Agora perdi várias horas da minha vida tentando realizar a tarefa trivial de instalar alguns pacotes de software. alguém sabe como eu posso destruir completamente o IPv6 e fazer a rede funcionar novamente?

    
por MathematicalOrchid 07.02.2014 / 17:45

3 respostas

2

Parece que você fez as coisas certas para zaptar o IPv6 do ponto de vista do kernel, mas eu também posso - supondo que você não se importa com o IPv6 - excluir qualquer entrada IPv6 em / etc / hosts. Se isso ainda não resolver o problema (e isso está ocorrendo), tive um problema com o backup do Amanda uma vez que era muito semelhante ao seu problema, e só consegui consertá-lo instalando o xinetd em vez do inetutils-inetd (note que não tenho idéia do que o SuSE instala por padrão). Por último (e como uma medida de desespero), eu poderia sugerir o uso de "strace" com algo como: strace -s 1024 -f -o /tmp/zypper.log / path / to / zypperexecutable e, em seguida, percorrer o arquivo de log procurando esse endereço IPv6 e ver se há algo informativo que possa ser útil. (FYI, "strace" pode gerar um arquivo enorme, então você provavelmente deseja abortar o zypper assim que ele falhar).

    
por 07.02.2014 / 22:31
0

Seguindo a sugestão de user995746 , tentei executar strace . Aqui está o que tem a dizer:

...
1179  socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 5
1179  connect(5, {sa_family=AF_INET6, sin6_port=htons(80), inet_pton(AF_INET6, "2001:67c:2178:8::13", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable)
1179  close(5)                          = 0
1179  madvise(0x7ff48750c000, 8368128, MADV_DONTNEED) = 0
1179  _exit(0)                          = ?
1179  +++ exited with 0 +++
1177  <... poll resumed> )              = 0 (Timeout)
1177  socket(PF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_TCP) = 5
1177  fcntl(5, F_GETFL)                 = 0x2 (flags O_RDWR)
1177  fcntl(5, F_SETFL, O_RDWR|O_NONBLOCK) = 0
1177  connect(5, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("195.135.221.134")}, 16) = -1 EINPROGRESS (Operation now in progress)
1177  poll([{fd=5, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
1177  poll([{fd=5, events=POLLOUT}], 1, 1000) = 0 (Timeout)
1177  poll([{fd=5, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
1177  poll([{fd=5, events=POLLOUT}], 1, 1000) = 0 (Timeout)
1177  poll([{fd=5, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
1177  poll([{fd=5, events=POLLOUT}], 1, 1000) = 0 (Timeout)
1177  poll([{fd=5, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
1177  poll([{fd=5, events=POLLOUT}], 1, 1000) = 0 (Timeout)
1177  poll([{fd=5, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
1177  poll([{fd=5, events=POLLOUT}], 1, 1000) = 0 (Timeout)
1177  poll([{fd=5, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
1177  poll([{fd=5, events=POLLOUT}], 1, 1000) = 0 (Timeout)
1177  poll([{fd=5, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
1177  poll([{fd=5, events=POLLOUT}], 1, 1000) = ? ERESTART_RESTARTBLOCK (Interrupted by signal)
1177  --- SIGINT {si_signo=SIGINT, si_code=SI_KERNEL} ---
...

Parece, então, que mesmo que a mensagem de erro do Zypper diga claramente "Falha ao conectar-se a 2001: 67c: 2178: 8 :: 13: Rede está inacessível", o programa é na verdade vendo que o IPv6 está inacessível e voltando ao IPv4. A questão permanece por que não pode se conectar via IPv4 - isso é provavelmente algum tipo de problema de firewall com a nossa LAN.

Em resumo, parece que o IPv6 não é o problema, é apenas que a mensagem de erro do Zypper é altamente enganadora.

    
por 10.02.2014 / 11:32
0

Resolvendo o download.opensuse.org (ou qualquer servidor d / l que você queira usar) e então alimentando seu endereço IPv4 no (s) arquivo (s) .repo fez isso por mim. Eu usei sed (1) para procurar + substituir tudo lá; funcionou como um encanto.

Não perfeito, certamente; e não poder recorrer a uma conexão v4 (...) funcionando é ... menos que estelar. Não importa que qualquer outro aplicativo compatível com dualstack seja perfeitamente capaz (e capaz) de acessar, digamos, download.opensuse.org quando houver uma rede v6 local que não seja roteada (porque o ISP não joga junto, por exemplo) .

Até lá, basta usar endereços IPv4 (numéricos).

Nota: o zypper usa libcurl mas não honra $HOME/.curlrc . Talvez isso honre os arquivos de configuração de curvas globais ou as variáveis de ambiente. curl quer que -4 / --ipv4 force o ipv4.

Além disso, se alguém fosse recompilar o próprio libcurl sem suporte a ipv6 e depois apontar o zypper via ld.so.conf ou algo assim, eu imagino que as coisas deveriam funcionar como o esperado.

    
por 15.04.2016 / 02:32