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 / user-203214

Adrian's questions

Martin Hope
Adrian
Asked: 2024-11-25 11:25:40 +0800 CST

Por que uma interface de rede precisa ter uma entrada na tabela de roteamento configurada para responder a solicitações ARP?

  • 5

Estou usando uma instalação mínima nova do Ubuntu server 24.04.1 LTS. Eu executo esses comandos como root para configurar a rede e fazer alguns experimentos:

apt install -y netcat-traditional tcpdump inetutils-ping

ip netns add ns1
ip netns add ns2

ip link add my_veth1 type veth peer name my_veth2

ip link set my_veth1 up netns ns1
ip link set my_veth2 up netns ns2

ip -n ns1 address add 1.2.3.4 dev my_veth1
ip -n ns1 route add 2.3.4.0/24 dev my_veth1

ip -n ns2 address add 2.3.4.5 dev my_veth2

Então executo esses comandos em diferentes terminais:

# Terminal 1
ip netns exec ns1 tcpdump -l -i my_veth1

# Terminal 2
ip netns exec ns2 tcpdump -l -i my_veth2

# Terminal 3
ip netns exec ns1 ping 2.3.4.5

Recebo a mesma saída nos terminais 1 e 2:

02:40:27.511438 ARP, Request who-has 2.3.4.5 tell 1.2.3.4, length 28
02:40:27.511438 ARP, Request who-has 2.3.4.5 tell 1.2.3.4, length 28
02:40:27.511438 ARP, Request who-has 2.3.4.5 tell 1.2.3.4, length 28
...

veth2tem o endereço IP 2.3.4.5 e está recebendo a requisição ARP. Por que ele não envia uma resposta? Ele só responde quando eu configuro uma entrada na tabela de roteamento:

ip -n ns2 route add 1.2.3.0/24 dev my_veth2

Mas isso não deveria ser necessário, pois o endereço MAC da interface de rede que veth2deve responder já está codificado na solicitação à qual ela está respondendo.

network-interface
  • 2 respostas
  • 34 Views
Martin Hope
Adrian
Asked: 2024-11-25 04:23:29 +0800 CST

Por que não estou obtendo nenhuma saída no tcpdump mesmo quando há dados sendo enviados e recebidos ao usar namespaces de rede?

  • 5

Estou usando uma instalação mínima nova do Ubuntu server 24.04.1 LTS. Eu executo esses comandos como root para configurar a rede e fazer alguns experimentos:

Se você viu esta postagem , é a mesma configuração, mas com o endereço IP 2.3.4.5atribuído my_veth2e a entrada na tabela de roteamento 1.2.3.0/24para garantir que os dados possam ser enviados e recebidos de cada namespace de rede.

# Terminal 1

apt install -y netcat-traditional tcpdump

ip netns add ns1
ip netns add ns2

ip link add my_veth1 type veth peer name my_veth2

ip link set my_veth1 up netns ns1
ip link set my_veth2 up netns ns2

ip -n ns1 address add 1.2.3.4 dev my_veth1
ip -n ns1 route add 2.3.4.0/24 dev my_veth1
ip -n ns2 address add 2.3.4.5 dev my_veth2
ip -n ns2 route add 1.2.3.0/24 dev my_veth2

ip netns exec ns2 nc -l -p 8080

então abro mais 2 terminais para rodar tcpdumpem cada namespace de rede:

# Terminal 2
ip netns exec ns1 tcpdump -i my_veth1

# Terminal 3
ip netns exec ns2 tcpdump -i my_veth2

então abro mais um último terminal para enviar dados do ns1 para o servidor netcat no ns2:

# Terminal 4
ip netns exec ns1 nc 2.3.4.5 8080 <<< 'Hello world from network namespace ns1'

Resultados:

  • A mensagem enviada do Terminal 4 é impressa no Terminal 1, como esperado.
  • Nenhum pacote está sendo exibido em nenhum dos tcpdump. POR QUÊ?
routing
  • 1 respostas
  • 18 Views
Martin Hope
Adrian
Asked: 2024-11-23 07:26:28 +0800 CST

Por que o netcat não imprime nada ao escutar no modo UDP quando não consegue alcançar o cliente, mesmo quando o cliente consegue alcançar o servidor?

  • 8

Estou usando uma instalação mínima nova do Ubuntu server 24.04.1 LTS. Eu executo esses comandos como root para configurar a rede e fazer alguns experimentos:

apt install netcat-traditional

ip netns add ns1
ip netns add ns2

ip link add my_veth1 type veth peer name my_veth2

ip link set my_veth1 up netns ns1
ip link set my_veth2 up netns ns2

ip -n ns1 address add 1.2.3.4 dev my_veth1
ip -n ns1 route add 2.3.4.0/24 dev my_veth1

ip netns exec ns2 nc -u -l -p 8080

então eu executo isso de outro terminal:

ip netns exec ns1 nc -u 2.3.4.5 8080 <<< 'Hello world from network namespace ns1'

UDP é um protocolo sem conexão. Se meu entendimento estiver correto, isso deve significar que o servidor UDP netcat do namespace de rede ns2 deve ser capaz de imprimir a mensagem que o cliente do ns1 enviou, independentemente de o servidor poder alcançar o cliente ou não, então, em teoria, eu não deveria ter que configurar uma rota em ns2ou um endereço IP em my_veth2. No entanto, nenhuma mensagem está sendo impressa no primeiro terminal, a menos que o endereço IP e a entrada da tabela de roteamento estejam configurados. Por quê?

  • Tentei adicionar o endereço IP 2.3.4.5, my_veth2mas não funcionou.
  • Tentei criar uma nova entrada na tabela de roteamento ns2para redirecionar todo o tráfego de 1.2.3.0/24para my_veth2, mas isso também não funcionou.
  • A mensagem só seria impressa ao adicionar o endereço IP 2.3.4.5a my_veth2AND criar uma nova entrada de tabela de roteamento em ns2 para redirecionar todo o tráfego de 1.2.3.0/24para my_veth2. Por que isso?

EDIT: Desabilitar o rp_filter não parece resolver o problema:

ip netns exec ns1 dd of=/proc/sys/net/ipv4/conf/all/rp_filter <<< '0'
ip netns exec ns2 dd of=/proc/sys/net/ipv4/conf/all/rp_filter <<< '0'
ip netns exec ns1 dd of=/proc/sys/net/ipv4/conf/my_veth1/rp_filter <<< '0'
ip netns exec ns2 dd of=/proc/sys/net/ipv4/conf/my_veth2/rp_filter <<< '0'

EDIT 2: Instalando e executando o tcpdump Aprendi que havia algumas solicitações ARP sendo enviadas e não estavam sendo respondidas:

$ ip netns exec ns1 tcpdump -l -i my_veth1
23:38:14.402259 ARP, Request who-has 2.3.4.5 tell 1.2.3.4, length 28
23:38:14.402259 ARP, Request who-has 2.3.4.5 tell 1.2.3.4, length 28
23:38:14.402259 ARP, Request who-has 2.3.4.5 tell 1.2.3.4, length 28
...

ns2 my_veth2 fornece a mesma saída

Então tentei criar a entrada da tabela ARP manualmente...

ip -n ns1 neighbour add 2.3.4.5 dev my_veth1 lladdr $(ip netns exec ns2 cat /sys/class/net/my_veth2/address)

E agora aparentemente o pacote UDP está sendo enviado

$ ip netns exec ns1 tcpdump -l -i my_veth1
00:24:15.164245 IP 1.2.3.4.36170 > 2.3.4.5.8080: UDP, length 39

ns2 my_veth2 fornece a mesma saída

No entanto, o primeiro terminal que tem o servidor UDP netcat em execução ainda não produz nada. Por quê?


EDIT 3: Depois de fazer tudo isso, tentei atribuir um endereço IP para my_veth2:

ip -n ns2 address add 2.3.4.5 dev my_veth2

E agora, quando envio o pacote UDP, recebo este erro no terminal que está executando o netcat em modo de escuta:

no connection : Network is unreachable

Por quê? Quero dizer, é claro que a rede está inacessível, mas isso não deve impedir o servidor de receber e exibir pacotes UDP. Na verdade, esse erro só é exibido quando ele recebe o pacote UDP. Então, mesmo que ele saiba que não pode responder, ele deve ser capaz de receber e exibir a mensagem, certo?

routing
  • 2 respostas
  • 71 Views
Martin Hope
Adrian
Asked: 2024-11-22 02:31:40 +0800 CST

Estou recebendo `Erro: Atributo falhou na validação de política.` ao executar `ip link add`. Por quê?

  • 5

Eu executo este comando:

ip link add dev proof_of_concept_virtual_network_interface type veth

e recebo esta mensagem de erro:

Error: Attribute failed policy validation.

O erro não é descritivo nem útil.

iproute
  • 1 respostas
  • 16 Views
Martin Hope
Adrian
Asked: 2022-03-30 13:59:13 +0800 CST

Por que o relógio bash -c '"echo $RANDOM"' não imprime nada?

  • 1

Espero que este comando imprima um valor aleatório na tela a cada 2 segundos, mas, em vez disso, não imprime nada:

watch bash -c '"echo $RANDOM"'

Este comando, no entanto, imprime um valor aleatório a cada 2 segundos:

watch bash -c '"echo \$RANDOM"'

Aparentemente eu tenho que escapar do cifrão, mas gostaria de entender o porquê, porque no primeiro caso o comando watch informa no topo estar executando o comando corretamente:

Every 2.0s: bash -c "echo $RANDOM"

No segundo caso relata estar executando este comando, conforme esperado:

Every 2.0s: bash -c "echo \$RANDOM"

Ok, entendi, o cifrão tem que ser escapado para alcançar o comando bash corretamente. Mas ainda assim, por quê? O que o comando watch faz com $ RANDOM antes de executar o comando para que ele não produza nada?

bash variable
  • 2 respostas
  • 154 Views

Sidebar

Stats

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk 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