AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1163370
Accepted
libesesc0
libesesc0
Asked: 2024-08-02 00:15:28 +0800 CST2024-08-02 00:15:28 +0800 CST 2024-08-02 00:15:28 +0800 CST

Pacotes IPv4 provenientes da interface VPN são enviados de volta corretamente, mas não IPv6

  • 772

Eu tenho uma VPN Wireguard configurada para encaminhar pacotes (com iptables) recebidos em um VPS para um servidor, o que funciona muito bem. Porém, a configuração automática da eno2interface (do servidor) pelo Debian cria rotas IP, uma delas é a x:x:x:x::/64 dev eno2, que é a rede local em que o servidor está.

Isso cria um comportamento indesejado, pois quando eu (da rede local) envio pacotes para o servidor através do VPS (isso significa que o servidor receberá os pacotes na interface wg0), o servidor responde na rede local (interface eno2), pois o IPv6 de origem O endereço é o mesmo na Internet e na rede local e, portanto, corresponde à rota x:x:x:x::/64 dev eno2, mesmo que o tráfego IPv6 não local seja enviado wg0. E responde com um endereço IP que o computador de onde enviei os pacotes não conhece porque configurei o NAT com o Wireguard.

Conforme está escrito no título isso não ocorre com IPv4, pois ele usa NAT, então o endereço IP de origem não corresponde 192.168.1.0/24 dev eno2.

Sempre posso me conectar diretamente ao servidor sem passar pelo VPS, ou me conectar com os endereços link-local fe80::/10quando preciso e substituir a rota configurada automaticamente por uma que tenha métrica mais baixa e preferência mais alta (ex. x:x:x:x::/64 dev wg0 metric 200 pref high) para manter a configuração automática feita pelo Debian, exceto esta rota. Mas isso não leva em consideração que o prefixo da rede pode mudar. Também consegui fazê-lo funcionar adicionando uma regra SNAT iptablesdo VPS, mas isso interrompe os serviços que precisam do endereço IP de origem (por exemplo, SPF).

Existe uma solução melhor para o problema? Talvez adicionando uma rota que envie pacotes de volta wg0para wg0e fazendo com que essa rota tenha prioridade sobre a x:x:x:x::/64 dev eno2rota, para que eu ainda possa acessar o servidor na minha rede local com seu endereço IPv6 público?

debian
  • 2 2 respostas
  • 46 Views

2 respostas

  • Voted
  1. John Mahowald
    2024-08-02T20:00:59+08:002024-08-02T20:00:59+08:00

    Atribua diferentes endereços à VPN fora das redes existentes do servidor. Especialmente diferente de qualquer link /64 passando, digamos, por Ethernet.

    Um bom provedor de hospedagem encaminhará vários /64s nunca usados ​​para o seu host mediante solicitação, digamos um /56. Você pode então definir um /64 inteiro para endereços VPN. Como endereços IP públicos, eles podem acessar a Internet, se permitidos por firewalls.

    Um provedor de hospedagem menos bom fornecerá apenas prefixos de link adicionais. O gateway deles assumirá que pode fazer NDP sobre Ethernet quando realmente precisar ser roteado através do seu servidor via wg. Faça suas próprias respostas NDP como um hack para fazer isso funcionar, como acontece com o programa ndpresponder.

    Se o acesso à Internet não for necessário, considere gerar endereços ULA para fins de endereços VPN. Visite aqui para obter um prefixo ULA só para você.

    O espaço de endereço é tão grande que cada pessoa no planeta poderia receber milhares de /48, muito maiores, e talvez então a utilização fosse perceptível. Novas sub-redes para todos os fins são a maneira mais simples do IPv6 de fazer as coisas.

    • 1
  2. Best Answer
    libesesc0
    2024-08-03T23:17:18+08:002024-08-03T23:17:18+08:00

    Posso não ter me expressado muito bem, então só para deixar claro: estou usando o VPS como proxy reverso para acessar meu servidor. O cliente do qual desejo acessar o servidor não está na VPN, mas está na mesma rede local do servidor, então esse era o problema:

    wg0 2001::1 > fdea:0335:40b8::2
    eno2 fdea:0335:40b8::2 > 2001::1
    

    Enquanto eu esperava:

    wg0 2001::1 > fdea:0335:40b8::2
    wg0 fdea:0335:40b8::2 > 2001::1
    

    2001::1é o endereço IPv6 do cliente, fdea:0335:40b8::2é o endereço IPv6 do servidor na VPN.


    Como estou usando ULAs na VPN, posso rotear pacotes com base no endereço de origem (verifique se é um endereço da VPN).

    O servidor tem um endereço IPv6 na rede local, por exemplo x:x:x:x::2, e um endereço na VPN, por exemplo fdea:0335:40b8::2. Como o VPS encaminha pacotes para o servidor através da VPN alterando o destino IP para fdea:0335:40b8::2, o servidor responderá com este endereço IPv6. Com essas informações posso fazer o seguinte:

    ip -6 rule add from fdea:0335:40b8::2/128 table 2
    ip -6 route add default dev wg0 table 2
    

    Isso resolve o problema porque fdea:0335:40b8::2/128é mais específico que a rota mencionada, x:x:x:x::/64e, portanto, tem prioridade. Posso então adicionar os comandos acima no wg0arquivo de configuração com PostUp=e PreDown=, para que eles fiquem ativos apenas quando necessário.

    Obrigado a todos que ajudaram, diga-me se alguma coisa precisa de mais esclarecimentos ou algo para tornar esta pergunta e resposta mais explorável.

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve