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 / 1083523
Accepted
Alexis
Alexis
Asked: 2021-11-15 07:06:39 +0800 CST2021-11-15 07:06:39 +0800 CST 2021-11-15 07:06:39 +0800 CST

Por que todo mundo usa MASQUERADE/SNAT em vez de NAPT/PAT?

  • 772

História

Eu tenho uma interface virtual VPN wireguard wg0(pode ser qualquer outra coisa) e uma interface física eth0. Desejo rotear pacotes da VPN para minha LAN ou de uma interface para outra interface.

Quase todos os blogs, artigos, tutoriais aconselham usando MASQUERADEou Source NATapenas:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Além disso, IP masqueradeé simplesmente um SNAT (Source NAT), não altera a porta de origem.

Pergunta

  • Estou errado em pensar que deveria usar um NAPT/PAT em vez disso?
  • Para completar, como posso adicionar uma regra NAPT/PAT com iptables e/ou nftables?

Pensamentos

Pode haver conflitos (porta de origem) entre os pacotes gerados pelo host e encaminhados de wg0(ou qualquer outra interface virtual/física). IMHO NAPT deve ser usado para evitar esses conflitos.

RFC 2663, Tradução de porta de endereço de rede (NAPT)

nat
  • 2 2 respostas
  • 3398 Views

2 respostas

  • Voted
  1. Best Answer
    Dylan
    2021-11-15T07:49:30+08:002021-11-15T07:49:30+08:00

    Se o destino puder rotear seu tráfego para a origem, nenhum NAT ou PAT será necessário.

    Como exemplo, nenhum NAT/PAT é necessário se os clientes VPN em 10.8.0.0/24 quiserem conversar com seus dispositivos LAN em 192.168.1.0/24, desde que os dispositivos envolvidos possam rotear para a outra rede (através de seu gateway ).

    Quando a origem está em uma rede rfc1918 (IP privado) e o destino é um IP público, porque as redes rfc1918 não são roteáveis ​​pela Internet, é necessário um NAT para substituir o IP privado pelo IP público. Esta é a tradução do endereço de origem. Este trabalho pode ser feito por um SNAT, não por um PAT.

    Além disso, você está errado assumindo que SNAT/MASQUERADE não altera as portas de origem.

    A opção --to-source é usada para especificar qual fonte o pacote deve usar. Esta opção, na sua forma mais simples, pega um endereço IP que queremos usar para o endereço IP de origem no cabeçalho IP. Se quisermos equilibrar vários endereços IP, podemos usar um intervalo de endereços IP, separados por um hífen. Os números de IP --to--source poderiam então, por exemplo, ser algo como no exemplo acima: 194.236.50.155-194.236.50.160. O IP de origem para cada fluxo que abrimos seria alocado aleatoriamente a partir deles, e um único fluxo sempre usaria o mesmo endereço IP para todos os pacotes nesse fluxo. Também podemos especificar um intervalo de portas a serem usadas pelo SNAT. Todas as portas de origem seriam então confinadas às portas especificadas. O bit de porta da regra seria semelhante ao exemplo acima, :1024-32000.O iptables sempre tentará evitar fazer qualquer alteração de porta se possível, mas se dois hosts tentarem usar as mesmas portas, o iptables irá mapear um deles para outra porta . Se nenhum intervalo de porta for especificado, se necessário, todas as portas de origem abaixo de 512 serão mapeadas para outras portas abaixo de 512. Aquelas entre as portas de origem 512 e 1023 serão mapeadas para portas abaixo de 1024. Todas as outras portas serão mapeadas para 1024 ou superior. Como dito anteriormente, o iptables sempre tentará manter as portas de origem usadas pela estação de trabalho real que está fazendo a conexão. Observe que isso não tem nada a ver com portas de destino, portanto, se um cliente tentar entrar em contato com um servidor HTTP fora do firewall, ele não será mapeado para a porta de controle FTP.

    https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#SNATTARGET

    Observe que, se seu dispositivo deseja acessar um servidor remoto em uma determinada porta de destino, há chances de que o sistema operacional já tenha atribuído uma porta de origem aleatória acima de 1024. Alcançar um servidor HTTPS remoto na porta 443 não envolve que a porta de origem seja 443.

    • 6
  2. Nikita Kipriyanov
    2021-11-15T11:30:24+08:002021-11-15T11:30:24+08:00

    Você tem de alguma forma a distinção errada entre SNAT/MASQUERADEe NAPT/PAT. Não está lá.

    No Linux, existem dois tipos de regras NAT dinâmicas, as quais você chama de "NAPT":

    • NAT de origem, que pretende deixar o endereço de destino intacto e alterar apenas o endereço de origem . Às vezes, também altera a porta de origem. Por exemplo, se a tabela de rastreamento de conexão já contém o registro com esta tupla específica (proto, src-addr, src-port, dst-addr, dst-port) (src-addr e src-port estão após a tradução), a ser capaz de fazer uma distinção qual é qual, a nova tradução deve usar outra src-port (porque este é o único grau de liberdade), então o "NAPT" inevitavelmente ocorrerá. Os exemplos de regras do tipo SNAT são SNATe MASQUERADE. A diferença entre eles é que com o SNAT você é obrigado a especificar na regrapara qual endereço traduzir (e, provavelmente, qual intervalo de portas usar), enquanto com o MASQUERADE ele faz a própria escolha, com base em qual interface o pacote está destinado a sair. Ambos devem ser instalados na POSTROUTINGcadeia, após a maioria dos outros processamentos terem sido realizados, incluindo o roteamento do pacote. Este tipo de regra é usado para permitir que muitos computadores fiquem ocultos atrás de um único endereço IP de saída, por exemplo, para acessar a Internet para a LAN e assim por diante. Isso inclui qualquer usuário de VPN também, se você pretende acessar a Internet via VPN.
    • NAT de destino, que deixa o endereço de origem como estava e só atualiza o endereço de destino e, se você configurou isso, a porta de destino, então essa é a regra "NAPT" também. Regras desse tipo são DNAT, REDIRECT, CLUSTERIPe provavelmente algumas outras, não me lembro de todas; estes são instalados em PREROUTINGcadeia, porque a decisão de roteamento geralmente deve ser alterada sob a influência da regra. O pacote que originalmente se destinava à própria máquina (tem seu endereço como destino) e deveria ser percorrido INPUTe alcançado algum processo local, está sendo traduzido e, após percorrerFORWARDchain ele está sendo encaminhado para algum outro sistema. Ou vice-versa. Para onde ir, INPUT ou FORWARD, é a decisão de roteamento que devemos alterar com a regra. Este tipo de regra é utilizado para fazer o acesso a algum sistema interno a partir da Internet.

    Às vezes, a propósito, ambas as regras podem ser usadas para um único pacote (e conexão). Este é o caso especial, mas útil se você precisar que os pacotes de algum sistema externo (portanto, o DNAT deve ser usado no PREROUTING) apareçam como vindos de algum endereço interno (para o qual o SNAT é usado no POSTROUTING).

    No Linux também existem as regras estáticas do tipo NAT, NETMAPque são bastante especiais e raramente usadas. Duvido que você esteja falando sobre isso e que tenha visto algum howto que mencione esse tipo de regra.

    O Linux não faz absolutamente nenhuma distinção entre endereços privados (RFC1918) e públicos. Você pode NAT em sua sub-rede pública se quiser (mas isso será um desperdício de endereços). Você pode deixar IPs privados sem tradução (mas geralmente isso não levará à conectividade com a Internet para eles).

    A VPN nada mais é do que interface de rede adicional na máquina e deve ser tratada como tal. Consequentemente, você tem permissão para usar endereços públicos para VPN, se os tiver. Por exemplo, eu posso ter alguma sub-rede /29 roteada pelo roteador VPN e configurar o OpenVPN para que toda essa sub-rede pública seja minha rede VPN! Embora o exemplo do OpenVPN pareça artificial, é muito mais provável que o WireGuard seja configurado assim. Por exemplo, a nova solução de namespace permite que o wireguard seja a única interface no sistema. Se houver um requisito para que o sistema tenha diretamente um IP público (não discutirei os motivos pelos quais esse requisito pode vir), é inevitável que você acabe usando IPs públicos dentro da VPN! Muito provavelmente, sem nenhum NAT para eles.

    • 6

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