Como ligar um endereço IPv6 não local?

5

Existe um equivalente de net.ipv4.ip_nonlocal_bind para ipv6? Preciso começar meu nginx na inicialização desse IP ...

Meu Ubuntu não tem este IPv6 atribuído em eth0 com rapidez suficiente apesar deste / etc / network / interface:

iface eth0 inet6 static
    address 1:2:3:4::5
    netmask 64

Durante a inicialização:

Starting nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
[emerg]: bind() to [1:2:3:4::5]:80 failed (99: Cannot assign requested address)

Eu preciso executar /etc/init.d/nginx restart alguns segundos após o boot para fazer as coisas funcionarem: - /

NB: 1: 2: 3: 4 :: 5 é usado aqui apenas para demonstração, eu tenho um endereço IPv6 válido no meu servidor.

    
por Valentin 17.02.2011 / 09:18

5 respostas

3

O net.ipv6.ip_nonlocal_bind sysctl foi adicionado no kernel 4.3, então se você está rodando um sistema mais avançado, agora você pode resolver este problema diretamente com o sysctl, ao invés de contornar o problema com hacks do script init. / p>     

por 11.05.2016 / 05:16
2

O atraso provavelmente se deve a Detecção de endereço duplicado IPv6 . Desativar isso (é claro) quebraria o padrão, mas você pode tentar definir net.ipv6.conf.eth0.dad_transmits para 0 (o padrão é 1 no meu sistema Ubuntu):

sysctl -w net.ipv6.conf.eth0.dad_transmits=0

Para tornar permanente:

sudo /bin/bash -c 'echo "net.ipv6.conf.eth0.dad_transmits=0" > /etc/sysctl.d/99-disable-dad-eth0.conf'

Naturalmente, a outra opção é apenas vincular a :: (todos os zeros IPv6 ou qualquer endereço IPv6) e desativar o firewall em interfaces que não devem expô-lo.

    
por 30.04.2011 / 06:38
1

Você pode simplesmente configurar uma entrada de endereço IPv6 estático na interface de loopback. Isso permitirá que o nginx ouça o IP / PORT mesmo se o endereço ainda não estiver disponível no eth0.

Manual:

/sbin/ip -6 addr add 2001:db8::ffff:1/64 dev lo

Arquivo de configuração:

# File: '/etc/network/interfaces'

auto lo
iface lo inet loopback

iface lo inet6 static
    address 2001:db8::ffff:1
    netmask 64
    
por 05.06.2011 / 10:51
0

Como parece que não existe tal parâmetro do kernel para o ipv6, você pode hackear o script init do nginx e adicionar:

grep -q eth0 /etc/network/run/ifstate || ifup eth0

em algum lugar antes do comando iniciar o nginx?

Ou, como você parece usar um debian ou um derivatice, você poderia tentar reordenar seus scripts init por dependência com a ajuda do pacote insserv e alternar para o lançamento do script init paralelo definindo a variável CONCURENCY=makefile em /etc/default/rcS (se você estiver usando o Debian Squeeze esta é a configuração padrão).

    
por 17.02.2011 / 10:13
0

Tenho certeza de que você solucionou seu problema em algum momento nos últimos quatro anos desde que este post foi iniciado, mas acabei tentando encontrar uma solução para iniciar o nginx em um sistema CentOS 7 habilitado para systemd com questões, então talvez isso ajude os outros.

Meu nginx surgiu antes que a rede para IPv4 e IPv6 aumentasse, fazendo com que ele falhasse na inicialização e permanecesse inativo. O RedHat tem um bug onde o systemd 'After' network-online.target é definido antes do IPv6 estar ativo, então o nginx é executado antes de poder se ligar aos endereços IPv6 em sua configuração.

Infelizmente, como é um bug, minha única opção era introduzir uma chamada de inatividade na definição de serviço do systemd para nginx, para que ela durasse o suficiente durante a inicialização para que o IPv6 estivesse ativo.

    
por 16.07.2015 / 20:23