Encaminhando o tráfego IPv6 através do Debian pptpd para o túnel IPv6 da Hurricane Electric

5

Eu configurei um túnel usando os serviços da Hurricane Electric em uma máquina Debian. Parece funcionar bem; Eu posso ping6 ipv6.google.com e abri-lo em links .

Eu também configurei um daemon PPTP na máquina. (Sim, eu li que o PPTP é inseguro; isso é principalmente para fins experimentais.) Quando eu me conecto a este daemon PPTP usando o Mac OS X, o IPv4 funciona bem.

Parece que não consigo obter o roteamento do tráfego IPv6 para funcionar, no entanto. O OS X não seleciona um endereço IPv6 por meio do PPTP e ignora os anúncios usando radvd , que parece ser um daemon para anunciar a existência do roteador IPv6. Para esclarecer: vejo os anúncios do roteador enviados por radvd aparecerem no Wireshark na interface ppp0 da máquina OS X.

No geral, isso não é uma produção nem uma configuração de longo prazo, apenas algo que eu gostaria de começar a trabalhar (caso contrário, eu poderia estar postando no ServerFault). Por isso, não me importo com o fato de que, se a máquina reinicializar, metade da configuração será desativada até que seja reinicializada manualmente. Na verdade, isso é uma vantagem para mim, neste caso.

/ etc / network / interfaces (snippet)

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
        address 2001:dead:beef:f00d::2
        netmask 64
        endpoint  216.66.86.114
        ttl 255
        gateway 2001:dead:beef:f00d::1

/etc/pptpd.conf

option /etc/ppp/pptpd-options
localip 10.0.101.1
remoteip 10.0.101.2-200

/ etc / ppp / pptpd-options

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
nodefaultroute
lock
nobsdcomp
ipv6 ,

/ etc / ppp / chap-secrets

ivucica pptpd THEPASSWORDHERE 10.0.101.2 10.0.101.3 10.0.101.4 10.0.101.5

/etc/radvd.conf

interface ppp0
{
        AdvSendAdvert on;
        prefix 2001:dead:beef:f00d::/64
        {
        };
};

Liguei o encaminhamento de ipv6:

echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

E sim, reiniciei radvd sempre que reconectei / recriou-o-ppp0-device. :-)

O que estou perdendo?

    
por Ivan Vučica 03.05.2013 / 04:03

2 respostas

6

Então acontece que houve vários problemas com minha configuração. Vamos documentar tudo!

SO do cliente

O Mac OS X não gosta particularmente do IPv6 em relação ao PPP. Use o seguinte após a conexão ter sido configurada:

sudo ipconfig set ppp0 AUTOMATIC-V6
sudo route add -inet6 default -interface ppp0

O anterior parece fazer o OS X aderir aos anúncios do roteador; o último adiciona uma rota padrão para o IPv6. (Agora, se apenas a versão de route do sistema operacional de certos frutados-móveis fornecesse -inet6 , eu seria um menino de madeira feliz.)

Observe também que o OS X ignorará qualquer endereço que deveria ser negociado no IPv6 e configurará apenas um endereço local. Isso pode interferir no roteamento para o OS X.

Por outro lado, o Windows 8 (de todos os sistemas!) alegremente pegou o endereço enviado pelo PPP, tomou nota do anúncio do roteador e, em geral, configurou-se perfeitamente. O PPTP realmente funciona bem no Windows.

Servidor

A primeira coisa que eu perdi foi que o corretor de túneis da Hurricane Electric na verdade atribui prefixos TWO / 64; um é suposto ser apenas para uso do cliente, enquanto o outro é destinado ao roteamento de clientes adicionais (como o cliente PPTP). E se você precisar de mais endereços (ou prefixos!), Você pode até obter um prefixo / 48. (Com IPv6, isso significa que há mais bits para 'seu' uso; o prefixo de HE usa 'apenas' 48 bits. Assim, você fornece mais alguns bits para controlar antes do sufixo gerado automaticamente, criado a partir de um endereço MAC ou até mesmo criado aleatoriamente , entra em ação e assume os últimos 64 bits.Você poderia, teoricamente, wiggle e subnet, mesmo com apenas 64 bits de sobra, mas eu vi um comportamento estranho no Windows 8 ou OS X, então eu não confiaria muito nisso .)

Em vez de configurar radvd diretamente e executá-lo como um servidor, simplesmente não o configure globalmente. Isto é, não o execute como um serviço no Debian.

Em vez disso, vamos seguir o exemplo de Konrad Rosenbaum , no Silmor.de, e ter o radvd configurado após pppd cria a interface PPP.

  1. Configure sua conectividade IPv6. Eu uso o furacão elétrico; Eu configurei da seguinte forma:

    # hurricane electric tunnel
    # based on: http://www.tunnelbroker.net/forums/index.php?topic=1642.0
    auto he-ipv6
    iface he-ipv6 inet6 v4tunnel
        address 2001:470:UUUU:VVVV::2
        netmask 64
        endpoint  216.66.86.114
        ttl 255
        gateway 2001:470:UUUU:VVVV::1
        ## from http://lightyearsoftware.com/2011/02/configure-debian-as-an-ipv6-router/
        # I did not set up the routing of the /64 nor the /48 prefix here, but
        # this would ordinarily do it.  
        #up ip link set mtu 1280 dev he-ipv6
        #up route -6 add 2001:470:WWWW:VVVV::/64 he-ipv6
    
        # Note that Hurricane Electric provides different /64 IPv6 prefixes
        # for the client (UUUU:VVVV) and routing (WWWW:VVVV). 
        # And the /48 prefix is very different altogether.
    
  2. Instale o pptpd. (Claro, tome nota da insegurança do PPTP como um protocolo, e considere o uso do OpenVPN ou de alguma outra alternativa).

  3. Edite o /etc/ppp/pptpd-options

    name pptpd
    refuse-pap
    refuse-chap
    refuse-mschap
    require-mschap-v2
    require-mppe-128
    proxyarp
    nodefaultroute
    lock
    nobsdcomp
    ipv6 ::1,::2
    

    Observe que a última linha é diferente do texto da minha pergunta. Você está atribuindo alguns endereços estáticos que podem ser respeitados pelo sistema operacional do seu cliente ou não. (OS X parece ignorá-los, mas o Windows os usa.)

  4. Crie usuários para PPTP. Filtros de segunda coluna baseados no argumento name em pptpd-options . Editar /etc/ppp/chap-secrets :

    ivucica pptpd AHyperSecretPasswordInPlainText 10.0.101.2 10.0.101.3 10.0.101.4
    

    Você deveria poder substituir os endereços com * em vez de listá-los manualmente. Eu não tentei isso.

  5. Atribua aos seus usuários PPTP alguns prefixos IPv6. NOTA: isso é usado exclusivamente pelo script que listarei abaixo, que é derivado do script do Konrad.

    Edite o /etc/ppp/ipv6-addr :

    ivucica:1234
    littlejohnny:1235
    
  6. Adicionar novo arquivo /etc/ppp/ipv6-up.d/setupradvd :

    #!/bin/bash
    ADDR=$(grep ^$PEERNAME: /etc/ppp/ipv6-addr |cut -f 2 -d :)
    if test x$ADDR == x ; then
     echo "No IPv6 address found for user $PEERNAME"
     exit 0
    fi
    
    # We'll assign the user a /64 prefix.
    # I'm using a Hurricane Electric-assigned /48 prefix.
    
    # Operating systems seem to expect to be able to assign the 
    # last 64 bits of the address (based on ethernet MAC address
    # or some other identifier). So try to obtain a /48 prefix.
    
    # If you only have a /64 bit prefix, you can try to assign a
    # /80 prefix to your remote users. It works, but I'm only now
    # trying to enable these users to have routing.
    
    USERPREFIX=2001:470:XXXX:$ADDR
    USERPREFIXSIZE=64
    USERPREFIXOURADDRESS=1
    USERPREFIXUSERADDRESS=2
    
    # Add the address for your side of the tunnel to the PPP device.
    ifconfig $IFNAME add $USERPREFIX::$USERPREFIXOURADDRESS/$USERPREFIXSIZE
    
    # establish new route
    # (when a packet is directed toward user subnet, send it to user ip)
    route -6 add $USERPREFIX::/$USERPREFIXSIZE gw $USERPREFIX::$USERPREFIXUSERADDRESS
    
    #generate radvd config
    RAP=/etc/ppp/ipv6-radvd/$IFNAME
    RA=$RAP.conf
    echo interface $IFNAME >$RA
    echo '{ AdvSendAdvert on; MinRtrAdvInterval 5; MaxRtrAdvInterval 100;' >>$RA
    echo ' prefix' $USERPREFIX::/$USERPREFIXSIZE '{};' >>$RA
    
    # Instead of your DNS...
    #echo ' RDNSS $USERPREFIX::$USERPREFIXOURADDRESS {}; };' >>$RA
    # ...try assigning the Google DNS :)
    echo ' RDNSS 2001:4860:4860::8888 {}; }; ' >> $RA
    
    # The creation of radvd configuration could be more readable, but whatever.
    
    # Start radvd
    /usr/sbin/radvd -C $RA -p $RAP.pid
    
    exit 0
    

    Não se esqueça de chmodar o script para torná-lo executável em pppd :

    chmod 755 /etc/ppp/ipv6-up.d/setupradvd
    
  7. O script envia a configuração radvd para /etc/ppp/ipv6-radvd/ ... certifique-se de que a pasta exista!

    mkdir /etc/ppp/ipv6-radvd
    
  8. Adicione também /etc/ppp/ipv6-down.d/setupradvd (e torne-o executável!) - obtido textualmente de Konrad :

    #!/bin/bash
    RAP=/etc/ppp/ipv6-radvd/$IFNAME
    kill 'cat $RAP.pid' || true
    rm -f $RAP.*
    

    e

    chmod 755 /etc/ppp/ipv6-down.d/setupradvd
    

Eu não testei o uso do DHCPv6 para distribuir informações de roteamento, endereços ou informações de DNS, especialmente porque rtadv deve estar cumprindo essas funções. Também não me ajudaria, porque a partir do Mountain Lion, o OS X ainda não é fornecido com um cliente DHCPv6 (talvez intencionalmente nove em cada dez dentistas a maioria dos especialistas em IPv6 concorda que o DHCP é um mal).

Mais uma vez, observe os comentários de Michael sobre a segurança do PPTP ; considere o uso do OpenVPN na produção.

Sim, Konrad Rosenbaum também tem um tutorial sobre IPv6 sobre o OpenVPN . : -)

    
por 07.05.2013 / 20:18
1

O Poptop não parece ter qualquer suporte para o IPv6. E os seus mantenedores recomendam que você não o use de qualquer maneira, por motivos de segurança .

PPTP is known to be a faulty protocol. The designers of the protocol, Microsoft, recommend not to use it due to the inherent risks. Lots of people use PPTP anyway due to ease of use, but that doesn't mean it is any less hazardous. The maintainers of PPTP Client and Poptop recommend using OpenVPN (SSL based) or IPSec instead.

Versões recentes do O OpenVPN suporta IPv6 , então essa é provavelmente a sua melhor aposta durante a transição.

    
por 03.05.2013 / 18:14