Endereço estático e SLAAC IPv6 para uma conexão NW

1

Estou tentando ter uma estação de trabalho com (pelo menos) 2 endereços IPv6. Um endereço seria um endereço IPv6 configurado manualmente e o outro seria gerado automaticamente pelo SLAAC (poderia haver mais deles).

Consegui conseguir isso por meio do arquivo /etc/network/interfaces definindo a interface como automática, mas adicionando outro endereço IP com essa linha:

up ip -6 addr add 2001:db8::10/64 dev enp0s3

(Intencionalmente usou o espaço de endereço da documentação, não o ULA realmente usado.)

Agora posso acessar minha infraestrutura interna com o endereço ULA e a Internet com o SLAAC. Isso funciona bem.

No entanto, eu quero conseguir isso com as configurações da GUI, porque agora terei que criar outra conexão para o usuário na estação de trabalho, para que ele possa alternar a conexão na vontade com alguns cliques.

Se eu criar a conexão secundária, isso funcionará. Quando eu crio a conexão descrita acima, não posso adicionar um endereço estático a ela com a GUI.

Como eu poderia ter duas conexões intercambiáveis, das quais uma teria a aquisição automática de endereço IPv6 junto com um endereço IPv6 estático?

    
por Girtsd 23.05.2018 / 10:32

1 resposta

0

Eu mesmo consegui resolver o problema.

Eu estava procurando várias maneiras de adicionar endereços extras a uma conexão via arquivos de configuração do Network Manager. Não consegui encontrar nenhuma maneira de fazer isso corretamente, mas havia uma opção de configuração reprovada para o escopo do ipv6 no arquivo de configuração de conexão localizado na pasta /etc/NetworkManager/system-connections . A diretriz de configuração "endereços", que foi supostamente usada para definir uma lista de endereços para adicionar à interface. O valor deve ser uma matriz de estruturas de endereços IPv6, que por sua vez é uma estrutura de 3 propriedades. Uma matriz de bytes contendo o endereço, um número uint32 contendo a máscara e outra matriz de bytes contendo o endereço do gateway. Isso é descrito na página do manual "nm-settings". Infelizmente, não consegui encontrar nenhum exemplo do formato necessário e não consegui fazê-lo funcionar, por isso desisti de encontrar uma solução através da configuração do Network Manager.

Em seguida, olhei para a opção de executar scripts de post-up, enquanto ainda estava usando o gerenciador de rede. Isso deve ser feito por scripts no diretório /etc/network/if-up.d/ , mas como não está totalmente integrado ao Network Manager e pode revelar inconsistências (de acordo com algumas fontes), fui forçado a continuar procurando. Foi quando eu encontrei este post ! Explica como é possível executar scripts com o Network Manager embutido no dispatcher. Então outro problema estava começando a aparecer. Os scripts de dispatcher personalizados que devem estar localizados no diretório /etc/NetworkManager/dispatcher.d/ podem ser executados em várias etapas do Network Managers e sua ordem de execução é controlada pelos 2 dígitos no início do nome do arquivo, mas eles são sempre executados no diretório. determinada fase. Então, se eu tivesse um script que deveria ser executado post-up (ou na fase inicial, de acordo com o Network Manager), ele sempre seria executado na fase "up" do Network Manager. Então, qualquer conexão que eu clicasse na GUI, o Network Manager acabaria executando o script. Isto não é o que eu estava procurando, porque eu sou obrigado a adicionar apenas um endereço IPv6 extra para uma das conexões que tenho que configurar e não o resto. Como o script seria executado sempre, eu precisava encontrar uma maneira de determinar a qual conexão esse script estava sendo chamado, onde a página do manual "NetworkManager" era útil. Ele diz que os scripts de dispatcher customizados estão sendo passados 2 argumentos (interface / device e action / phase), mas que o ambiente contém variáveis extras. Uma delas é a variável "CONNECTION_UUID". Isto contém o uuid da conexão que este script está sendo requisitado e o uuid da conexão pode ser encontrado no arquivo de configuração de conexão no diretório "/ etc / NetworkManager / system-connections /". Assim, dentro do meu script dispatcher, eu só tenho que verificar se a variável contém o uuid da minha conexão desejada e, em caso afirmativo, só então, executar o comando necessário.

Exemplo de arquivo de configuração de conexão para uma conexão que não requer o endereço extra "/ etc / NetworkManager / system-connections / regular_connection":

[802-3-ethernet]
duplex=full
mac-address=00:00:00:11:11:11

[connection]
id=regular_connection
uuid=12345678-90ab-cdef-0123-4567890abcde
type=802-3-ethernet

[ipv6]
method=auto

[ipv4]
method=auto

A conexão especial que requer o endereço IPv6 extra estático sobre os gerados pelo SLAAC teria um arquivo de configuração semelhante ao regular, mas a parte do uuid deve ser anotada para uso no script do dispatcher. Exmaple o arquivo de configuração para fins de clareza "/ etc / NetworkManager / system-connections / extra_static_ipv6_connection":

[802-3-ethernet]
duplex=full
mac-address=00:00:00:11:11:11

[connection]
id=extra_ipv6_con
uuid=88888888-4444-4444-4444-cccccccccccc
type=802-3-ethernet

[ipv6]
method=auto

[ipv4]
method=auto

O próximo passo seria criar o script do dispatcher. Script de dispatcher de exemplo "/etc/NetworkManager/dispatcher.d/99_super_connection_post_up_script":

#!/bin/sh -e
# Script to add static local IPv6 address when connected to super network
# Runs a single command on appropriate circumstances
# $0 is command. $1 is interface. $2 is action.  $UUID is the uuid of current connection.
if [ -z "$1" ]; then
    echo "$0: called with no interface" 1>&2
    exit1;
fi

# Set reader friendly environment
export IFACE="$1"

# Check for action and on "up" action (post-up) add IPv6 address if connection uuid matches
case "$2" in
     up)
        if [ "$CONNECTION_UUID" = "88888888-4444-4444-4444-cccccccccccc" ]; then
          ip -6 addr add 2001:db8::10/64 dev $IFACE
        fi;
        ;;
    *)
        echo "$0: called with unknown action \'$2'" 1>&2
        exit 1
        ;;
esac

Agora, basta alternar a conexão ativa na lista suspensa de conexão de rede do canto superior direito da GUI (local específico do Ubuntu 14.04 na GUI). Sempre que a conexão "extra_ipv6_con" for selecionada, depois de obter a configuração automática de IPv4 e IPv6, o script do dispatcher do Network Manager de fase pós-up / up será executado e um endereço IPv6 extra / estático será atribuído à interface. Se qualquer uma das outras conexões for clicada, a configuração da rede será alterada para a selecionada e o script do dispatcher será executado novamente, mas não terá efeito por causa da incompatibilidade no UUID.

TLDR:

Pode-se fazer com que o Network Manager execute um script localizado no diretório "/etc/NetworkManager/dispatcher.d/" sempre que uma conexão é ativada com um clique na GUI. Isso pode servir como um script de post-up ou qualquer outro tipo de TBH e só tem efeito em uma única conexão que é selecionada, combinando o UUID de conexão. Este script pode conter o comando mencionado na pergunta e, portanto, adicionar o endereço IPv6.

    
por Girtsd 06.06.2018 / 15:08