Use iptables para encaminhar ipv6 para ipv4?

14

Atualmente tenho uma configuração onde, devido a configuração que demoraria uma eternidade para consertar, tenho um servidor que só pode ser acessado pelo ipv4. Eu também, no entanto, tenho um servidor que pode ser acessado pelo ipv6. Eu queria saber se eu poderia usar o iptables para encaminhar o tráfego ipv6 em uma determinada porta de um dos servidores para outro servidor usando o tráfego ipv4.

    
por Eli 03.06.2011 / 02:44

5 respostas

14

IPtables não podem fazer isso no momento, então você precisa de um processo de espaço de usuário para fazer proxy das conexões. socat é uma ferramenta adequada para isso:

socat TCP6-LISTEN:1234,fork TCP4:1.2.3.4:1234
    
por 14.08.2012 / 09:03
9

Conforme observado nos comentários sobre sua pergunta , NAT64 está longe de estar pronto, até 3 anos depois.

Você pode, no entanto, tentar 6tunnel , como sugerido por perplexidade.

Felizmente, ele está presente nos repositórios Debian e Ubuntu, então você pode instalá-lo facilmente usando sudo apt-get install 6tunnel . Se você estiver usando outro sistema, terá de compilá-lo a partir da fonte .

Criar a partir do código-fonte não é difícil, e é apenas uma questão de executar alguns comandos (como root):

git clone https://github.com/wojtekka/6tunnel && cd 6tunnel && ./autogen.sh && make && make install

Aqui está sua sintaxe simplificada:

6tunnel [-4|-6] [-l local-host] original-port destination-host destination-port
  • O [-4|-6] é opcional e permite especificar se você ligará (escuta) em IPv4 ou IPv6 (respectivamente).
  • -l também é opcional. Ele permite escolher em qual endereço (IPv4 ou IPv6) você deseja vincular.
  • A porta original é a porta na qual você ligará.
  • O host de destino é para onde você encaminha o tráfego. Pode ser em qualquer lugar: localhost ou em algum outro lugar na sua rede ou na Internet.
  • A porta de destino é a porta no host de destino que receberá seu tráfego encaminhado.

Por exemplo, se você quiser permitir que um servidor somente IPv4, escutando na porta 1337, seja acessado por IPv6, use:

6tunnel -6 1337 localhost 1337

O comando acima escutará na porta 1337 no IPv6 e encaminhará o tráfego para a porta 1337 na mesma máquina via IPv4. Ele será executado em segundo plano, para que você não precise se preocupar com isso.

Na verdade, você deve configurar uma tarefa cron para garantir que ela ainda esteja em execução. 6tunnel fornece um exemplo para sua conveniência! Executá-lo na inicialização também não deve ser uma má idéia.

Para mais documentação, execute 6tunnel -h ou man 6tunnel .

    
por 12.07.2014 / 17:02
3

As versões recentes de xinetd também podem escutar no IPv6 e depois encaminhar a conexão para um endereço IPv4.

Uma configuração de amostra que escuta as conexões IPv6 na porta 3389 e as encaminha para a porta 3389 de um endereço IPv4 interno:

service rdp_port_forward
{
    flags           = IPv6
    disable         = no
    type            = UNLISTED
    socket_type     = stream
    protocol        = tcp
    user            = nobody
    wait            = no
    redirect        = 10.187.20.42 3389
    port            = 3389
}

Isso pode ser útil em ambientes mais restritos, já que xinetd provavelmente será instalado com seu sistema básico ou disponível em repositórios de fornecedores aprovados.

    
por 12.07.2014 / 17:18
2

Mais para o benefício de pessoas que encontram esta página do que o OP necessariamente (eu vim aqui procurando uma solução para conectividade IPv6 para um aplicativo IPv4 (Twisted)), uma possibilidade é o aplicativo 6tunnel, escuta IPv6 e encaminha solicitações para outra interface e porta.

    
por 18.06.2011 / 23:32
2

Eu queria comentar sobre Leo Lams e votar, mas não tenho reputação suficiente. Primeiro de tudo: Muito obrigado Leo Lam!

Para quem vem por este fio: Meu ISP mudou minha conexão de IPv4 para IPv6 com Dual Stack Lite, o que significa que eu não tenho mais meu próprio endereço IPv4. Este foi um problema, como eu quero acessar minha câmera IP de anyhwere que não suporta IPv6. Para resolver isso, tentei o seguinte:

  1. Ativando o IPv6 Forward para a porta 99 em meu roteador para minha máquina Ubuntu.
  2. Máquina Ubuntu (rede doméstica): sudo 6tunnel -6 99 192.168.178.35 80
  3. vServer Debian com endereço IPv4 e IPv6 estático: sudo 6tunnel -4 99 IPV6PREFIXROUTER:IPV6INTERFACEIDUUBUNTUMACHINE 99
  4. vServer Debian: Permitir conexões tcp de entrada na porta 99 no iptables

O prefixo ipv6 foi indicado em meu roteador e o ID da interface foi mapeado no processo de encaminhamento do IPv6.

Agora posso acessar a câmera de qualquer lugar usando o domínio vServer example.com:99 .. Perfeito! Eu planejo comprar uma framboesa que cumpra esse trabalho ou uma banana pi m3 para outras tarefas também.

    
por 19.12.2015 / 19:10