Use endereço temporário IPv6 somente com pares remotos

6

Acho que esta questão diz respeito à interação entre o algoritmo de seleção de endereço padrão configurável definido pelo RFC-3484 e o endereços temporários definidos pelo RFC-4941 , embora a solução possa exigir algum terceiro tipo de funcionalidade. Meu ambiente é Linux (versão do kernel 3.2.0 no Ubuntu 12.04) com o utilitário iproute2 (versão ss111117).

Como posso configurar meu computador para usar um endereço regular não otimizado para privacidade para conectar-me a outros nós com o mesmo prefixo, mas usar um endereço temporário para conexões com nós fora desse prefixo?

Por exemplo, digamos que meu computador seja fuzzy e meu servidor de arquivos seja bunny . Em algum lugar na Internet IPv6 é um site que eu quero visitar, nosey.example.com . Aqui estão os endereços atribuídos em fuzzy :

neirbowj@fuzzy:~$ ip -6 addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2001:db8:d00d:babe:6d3b:96d0:f584:beb3/64 scope global temporary dynamic 
       valid_lft 599342sec preferred_lft 80342sec
    inet6 2001:db8:d00d:babe:22fc:11ff:fe53:b2e7/64 scope global dynamic 
       valid_lft 2591986sec preferred_lft 604786sec
    inet6 fe80::22fc:11ff:fe53:b2e7/64 scope link 
       valid_lft forever preferred_lft forever

bunny tem um endereço configurado estaticamente no mesmo prefixo.

neirbowj@fuzzy:~$ grep bunny /etc/hosts
2001:db8:d00d:babe::1    bunny

nosey.example.com não está neste prefixo.

neirbowj@fuzzy:~$ host -t aaaa nosey.example.com
nosey.example.com has IPv6 address 2001:db8:b00b:1e5::1

Os rótulos de endereço em fuzzy estão definidos para seus padrões.

neirbowj@fuzzy:~$ ip addrlabel
prefix ::1/128 label 0 
prefix ::/96 label 3 
prefix ::ffff:0.0.0.0/96 label 4 
prefix 2001::/32 label 6 
prefix 2001:10::/28 label 7 
prefix 2002::/16 label 2 
prefix fc00::/7 label 5 
prefix ::/0 label 1 

Quando me conecto a bunny , quero usar 2001:db8:d00d:babe:22fc:11ff:fe53:b2e7 , porque não está marcado como " temporary ". Quando me conecto a nosey.example.com , quero usar 2001:db8:d00d:babe:6d3b:96d0:f584:beb3 porque está marcado como " temporary ". Isso é possível e, em caso afirmativo, como?

Eu já li Como funciona o trabalho de seleção de endereços de origem IPv6? no Linux , mas não vejo como qualquer uma das regras afetaria essa escolha, nem mesmo como o temporary flag informa a seleção de endereços.

A razão pela qual eu acho que deveria ser capaz de fazer isso é por causa desse trecho.

RFC-4941
Section 3.1 Assumptions

[...]

Finally, this document assumes that when a node initiates outgoing
communication, temporary addresses can be given preference over
public addresses when the device is configured to do so.
[ADDR_SELECT] mandates implementations to provide a mechanism, which
allows an application to configure its preference for temporary
addresses over public addresses.  It also allows for an
implementation to prefer temporary addresses by default, so that the
connections initiated by the node can use temporary addresses without
requiring application-specific enablement.  This document also
assumes that an API will exist that allows individual applications to
indicate whether they prefer to use temporary or public addresses and
override the system defaults.
    
por neirbowj 29.08.2013 / 05:11

1 resposta

2

Parece um lugar estranho, mas no Linux você pode fazer isso na tabela de roteamento.

Digamos que sua tabela de roteamento tenha esta aparência:

# ip -6 route
2001:db8:d00d:babe::/64 dev eth0  proto kernel  metric 256 
default via 2001:db8:d00d:babe::1 dev eth0  metric 1024 

Você pode especificar rotas que substituam o endereço de origem. Neste caso, você poderia fazer:

# ip -6 route add 2001:db8:d00d:babe::/64 \
                  dev eth0 \
                  src 2001:db8:d00d:babe:22fc:11ff:fe53:b2e7 \
                  metric 128

Como essa rota tem uma métrica menor que a atual (que tem métrica 256), ela será substituída. Quando você se conectar a bunny no endereço 2001:db8:d00d:babe::1 , essa rota corresponderá e usará o endereço de origem configurado.

Se você também quiser usar um endereço de origem específico para outras sub-redes, também poderá criar uma rota para isso. Por exemplo:

# ip -6 route add 2001:db8:d00d::/48 \
                  via 2001:db8:d00d:babe::1 \
                  dev eth0 \
                  src 2001:db8:d00d:babe:22fc:11ff:fe53:b2e7 \
                  metric 128
    
por 29.08.2013 / 21:26