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 / computer / Perguntas / 1566913
Accepted
MooseBoys
MooseBoys
Asked: 2020-07-08 13:33:55 +0800 CST2020-07-08 13:33:55 +0800 CST 2020-07-08 13:33:55 +0800 CST

Rotear pacotes destinados à interface local para o gateway

  • 772

Sem usar soquetes brutos, existe uma maneira no Linux de forçar um pacote de rede a ser enviado fisicamente para um gateway primeiro, mesmo que o endereço de destino esteja vinculado a uma interface local?

Meu sistema tem uma única interface ativa, eno1, à qual é atribuído um IPv4 192.168.1.1com uma /20máscara. O gateway tem endereço 192.168.0.1. Eu tentei adicionar uma rota usando ip route add 192.168.1.0/24 via 192.168.0.1, que tem a maior especificidade de roteamento para 192.168.1.1. Mas a chamada traceroute 192.168.1.1ainda mostra apenas um único salto, indicando que não foi a lugar nenhum. Eu esperaria que mostrasse um primeiro salto de 192.168.0.1, seguido por 192.168.1.1. Evidência adicional para a rota que não está sendo seguida é que o envio de pacotes com SO_TIMESTAMPINGresultados em carimbos de data/hora de hardware ausentes, indicando que o pacote não foi realmente colocado na rede.

Caso este seja um problema XY, estou tentando construir uma ferramenta de medição semelhante a ping que mede a latência de ida e volta e a perda de pacotes para o CMTS do meu ISP, mas o roteador usa limitação de taxa nas respostas ICMP, então não posso t medir a latência com a frequência que eu gostaria. Além disso, pings de dispositivos locais na minha rede contam com o limite de taxa, levando a pacotes descartados espúrios (embora eu suponha que poderia bloquear o encaminhamento de pacotes com o CMTS como destino ou aqueles com TTL = 1). Observe que, enquanto estou testando isso localmente em um sistema em minha rede privada usando meu próprio roteador como primeiro salto, na realidade estarei executando isso no próprio roteador, substituindo o .1.1endereço pelo meu endereço IPv4 público e o .0.1endereço com o endereço do roteador upstream do CMTS.

Meu pensamento era enviar um pacote para o roteador upstream com um destino de meu próprio IP público, o que, com sorte, resultaria no envio de volta ao meu próprio roteador, tendo percorrido cada perna uma vez, mas aparecendo para o ISP como encaminhado genérico tráfego em vez de algo ao qual o CMTS responde diretamente.

Idealmente, a solução pode ser configurada uma vez como superusuário e, em seguida, usada por tarefas de espaço de usuário, ou seja, não requer a execução da ferramenta como superusuário (daí o desejo de evitar raw-sockets).

linux networking
  • 1 1 respostas
  • 72 Views

1 respostas

  • Voted
  1. Best Answer
    user1686
    2020-07-08T13:52:48+08:002020-07-08T13:52:48+08:00

    Sem usar soquetes brutos, existe uma maneira no Linux de forçar um pacote de rede a ser enviado fisicamente para um gateway primeiro, mesmo que o endereço de destino esteja vinculado a uma interface local?

    Crie um namespace de rede separado:

    ip netns add foo
    

    Crie uma interface Ethernet virtual em cima da física e mova-a para o netns:

    ip link add eno1.foo link eno1 type macvlan mode private
    ip link set eno1.foo netns foo
    

    Configure seu endereço IP:

    ip netns exec foo ip link set eno1.foo up
    ip netns exec foo ip addr add 192.168.1.7/24 eno1.foo
    

    Execute o programa:

    ip netns exec foo ~/pingthing -i eno1.foo
    

    (Um namespace 'persistente' não é realmente necessário - você pode usar unshare --net <program>e mover a interface virtual para ele por PID - mas isso é um pouco menos conveniente.)

    Eu tentei adicionar uma rota usando ip route add 192.168.1.0/24 via 192.168.0.1, que tem a maior especificidade de roteamento para 192.168.1.1. Mas chamar traceroute 192.168.1.1 ainda mostra apenas um único salto, indicando que não foi a lugar nenhum.

    Antes do roteamento, todos os pacotes são verificados em relação às regras definidas em ip -4 rule. Por padrão, a primeira regra os envia primeiro por meio da tabela de roteamento 'local' especial (que contém rotas de loopback para todos os endereços IP "locais").

    As rotas na tabela de roteamento 'principal' são usadas apenas se não houver correspondência na tabela 'local'.

    Idealmente, a solução pode ser configurada uma vez como superusuário e, em seguida, usada por tarefas de espaço de usuário, ou seja, não requer a execução da ferramenta como superusuário (daí o desejo de evitar raw-sockets).

    Dê à ferramenta apenas o privilégio CAP_NET_RAW usando setcap cap_net_raw=epse for uma ferramenta CLI ou usando systemd's AmbientCapabilities=se for um serviço. Então você pode usar soquetes brutos sem obter nenhum outro privilégio de root.

    O primeiro (setcap no executável) é freqüentemente usado por ferramentas pinge mtr, então isso não é nada novo.

    (Sistemas de arquivos incorporados podem não suportar "recursos" no nível do arquivo, mas nesse caso você ainda pode definir o bit setuid. Ele precisa de mais cuidado com a segurança, pois sua ferramenta obtém privilégios de root completos mesmo quando executada por um usuário normal.)

    setcap/suid só funciona com executáveis ​​binários compilados, não com executáveis ​​de script interpretados.

    • 1

relate perguntas

  • Win10 1803: Como tornar o ponto de acesso móvel uma rede privada?

  • Como o nc identifica nomes de serviço

  • execute o contêiner do docker como root

  • Como ativar o sensor de impressão digital no domínio e no diretório ativo do Linux

  • Como alterar permanentemente Ctrl + C para Ctrl + K no CentOS 7?

Sidebar

Stats

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

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 Por que uma conexão de Internet gigabit/s via cabo (coaxial) não oferece velocidades simétricas como fibra? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    fixer1234 O "HTTPS Everywhere" ainda é relevante? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

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