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-288012

TheDiveO's questions

Martin Hope
TheDiveO
Asked: 2022-06-04 05:54:31 +0800 CST

nftables: pacotes UDP duplicados para destino específico IP:porta para um (segundo) destino IP:porta

  • 1

Eu gostaria de espelhar apenas um tráfego de pacotes muito limitado destinado a uma única porta IP e UDP para o mesmo IP, mas uma segunda porta. Eu bloqueei em https://superuser.com/questions/1593995/iptables-nftables-forward-udp-data-to-multiple-targets , mas parece que a instrução dup do nftable só permite duplicar para outro IP, mas não o mesmo IP e porta diferente.

Por exemplo, o tráfego para 127.0.0.1 porta 123 deve ser duplicado para 127.0.0.1 porta 456. Como esta é a única duplicação, não tenho nenhum problema com a perda do número da porta original. Agora eu me pergunto se esse tipo de duplicação é possível porque 127.0.0.1 não é uma interface de "drenagem"/saída, mas o destino final da duplicata. Poderia haver alguma maneira de combinar isso com DNAT?

Existe algum outro mecanismo disponível além de anexar uma sonda eBPF ao netdev com o tráfego UDP de entrada?

nftables
  • 1 respostas
  • 184 Views
Martin Hope
TheDiveO
Asked: 2018-11-28 06:17:05 +0800 CST

O que é uma rota IP do Linux sem interface de rede de saída (resposta RTLINK sem `RTA_OIF`) e como crio uma para teste?

  • 1

Ao usar o RTLINK para consultar a rota IP disponível de um kernel Linux (com namespace de rede), notei que em um sistema de teste o RTLINK retorna uma rota sem um RTA_OIFatributo, ou seja, sem uma interface de rede de saída especificada.

Infelizmente, não tenho ideia de como reproduzir essa situação (para teste) usando o ip route addcomando e até agora nenhuma pessoa ao meu alcance conseguiu explicar "o que" originalmente criou essa rota sem qualquer indicação de uma interface de rede de saída. De uma olhada nas fontes do kernel do Linux, notei que o atributo de interface de rede de saída na verdade é opcional. No entanto, minhas tentativas ip route addsempre acabam com uma interface de rede de saída adicionada automaticamente pelo kernel ou uma interface inacessível:

ip route add 1.1.1.1/32 via 1.1.1.2dá RTNETLINK answers: Network is unreachable.

Próxima tentativa (falhou):

ip addr add 1.1.1.2/32 dev ens33
ip route add 1.1.1.1/32 via 1.1.1.2
ip route show

... então dá 1.1.1.1 via 1.1.1.2 dev ens33, onde o kernel inseriu automaticamente uma interface de rede de saída adequada (e, portanto, RTA_OIFestá presente, mesmo que eu não a especifique no início).

Pesquisar coisas como "rota ip linux sem interface de saída" ou similar não me dá resultados utilizáveis ​​- a menos que eu esteja ignorando algo importante aqui.

Então, como posso criar um caso (de teste) em que tenho uma rota IP sem uma interface de rede de saída? O que estou negligenciando aqui?

linux routing
  • 1 respostas
  • 370 Views
Martin Hope
TheDiveO
Asked: 2018-07-19 06:59:31 +0800 CST

Mudar para um namespace de rede não altera /sys/class/net?

  • 7

A página de manual do Linux para namespaces de rede(7) diz:

Os namespaces de rede fornecem isolamento dos recursos do sistema associados à rede: [...], o diretório /sys/class/net, [...].

No entanto, simplesmente mudar para um namespace de rede diferente não parece alterar o conteúdo de /sys/class/net(veja abaixo como reproduzir). Estou apenas enganado aqui ao pensar que o namespace setns()da rede já é suficiente? É sempre necessário remontar /syspara obter a /sys/class/netcorrespondência correta do namespace de rede atualmente associado? Ou estou perdendo alguma coisa aqui?

Exemplo para reproduzir

Pegue um sistema *ubuntu, encontre o PID do rtkit-daemon, insira o namespace de rede do daemon, mostre suas interfaces de rede e verifique /sys/class/net:

$ PID=`sudo lsns -t net -n -o PID,COMMAND | grep rtkit-daemon | cut -d ' ' -f 2`
$ sudo nsenter -t $PID -n
# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
# ls /sys/class/net
docker0  enp3s0  lo  lxcbr0  ...

Observe que, embora ip link showcorretamente mostre apenas lo, /sys/class/netmostra todas as interfaces de rede visíveis no namespace de rede "raiz" (e no namespace de montagem "raiz").

No caso de rtkit-daemontambém entrar no namespace mount dele não faz diferença: sudo nsenter -t $PID -n -me depois ls /sys/class/netainda mostra as interfaces de rede não presentes no namespace da rede.

"Fixar"

Muitos elogios para @Danila Kiver por explicar o que realmente está acontecendo nos bastidores do kernel Linux. A remontagem sysfs enquanto o namespace de rede correto é associado mostrará as entradas corretas/sys/class/net em :

$ PID=`sudo lsns -t net -n -o PID,COMMAND | grep rtkit-daemon | cut -d ' ' -f 2`
$ sudo nsenter -t $PID -n
# MNT=`mktemp -d`
# mount -t sysfs none $MNT
# ls $MNT/class/net/
lo
# umount $MNT
# rmdir $MNT
# exit

Portanto, isso agora produz os resultados corretos em /sys/class/net.

linux namespace
  • 1 respostas
  • 2540 Views
Martin Hope
TheDiveO
Asked: 2018-06-27 21:47:23 +0800 CST

Detectando que uma interface de rede é "física" ou "virtual" usando apenas RTNETLINK no Linux?

  • 2

Gostaria de detectar se uma interface de rede é "física" ou "virtual", onde "física" significa que a interface possui hardware conectado, mesmo que esse "hardware" seja virtualizado por um hipervisor. "Virtual" significa então que é um dos elementos do kernel do Linux, como bridges, veths, macvlans, etc.

Estou ciente de que usando /sys/class/net/[nif]/...posso seguir o link do dispositivo e, assim, diferenciar entre interfaces de rede virtual (virtuais) físicas e "reais" (sic!), com base no caminho do dispositivo que contém o subdiretório "virtual" ou não. No entanto, ao lidar com namespaces de rede, isso requer uma remontagem adequada sysfspara poder ver as /sys/class/net/...entradas corretas. Portanto, um método mais simples baseado apenas em dados RTNETLINK pode ser mais adequado.

Ao usar o RTNETLINK para descobrir as interfaces de rede disponíveis, existe alguma propriedade/atributo que me permite diferenciar sem a necessidade de verificar /sys/class/net/[nif]?

linux networking
  • 1 respostas
  • 945 Views
Martin Hope
TheDiveO
Asked: 2018-06-23 10:37:23 +0800 CST

Caracteres permitidos em nomes de interface de rede Linux?

  • 9

Qual é o intervalo permitido de caracteres em nomes de interfaces de rede Linux? Pesquisei mas não encontrei nenhuma definição ou esclarecimento. Caracteres maiúsculos são permitidos? As letras maiúsculas e minúsculas são diferentes?

linux network-interface
  • 2 respostas
  • 6028 Views
Martin Hope
TheDiveO
Asked: 2018-05-13 02:00:57 +0800 CST

Acessar /proc/pid/ns/net sem executar o processo de consulta como root?

  • 3

Em um programa, estou enumerando namespaces de rede procurando /proc/pid/por ns/netlinks (sym). Este programa é executado dentro dos namespaces "raiz" (inicialização original) do próprio host. Normalmente, preciso executar a parte do scanner como root, caso contrário, terei apenas acesso limitado às /proc/pid/informações de outros processos. Gostaria de evitar executar o scanner como root, se possível, e gostaria de evitar o incômodo de perder privilégios.

Qual recurso do Linux preciso definir para meu programa de scanner para que ele possa ser executado por usuários não raiz e ainda ver a /proc/pid/árvore completa e ler os links de namespace da rede?

linux proc
  • 2 respostas
  • 873 Views
Martin Hope
TheDiveO
Asked: 2018-05-05 13:26:32 +0800 CST

Identificar se uma interface de rede é um `veth` usando `/sys/class/net`?

  • 2

É possível identificar inequivocamente que uma determinada interface de rede, como eth1, é na verdade uma vethinterface de rede do tipo? Observe que em contêineres, seus nomes de interface de rede geralmente começam com eth*em vez de veth*e não se pode ter certeza de que não há um real ethno conjunto. Isso pode ser detectado através de /sys/class/net?

Tenho a impressão de que o iflinkelemento in /sys/class/net/...não identifica de forma inequívoca vethas interfaces de rede, mas também é usado em outras situações. Se não houver como resolver minha dúvida usando o /sys/class/net/...sistema de arquivos, existe uma chamada de soquete que possa me fornecer essa informação, preferencialmente utilizável em Python?

networking veth
  • 1 respostas
  • 1668 Views
Martin Hope
TheDiveO
Asked: 2018-05-05 12:41:43 +0800 CST

Como encontrar o namespace de rede de um ifindex veth peer?

  • 14

Tarefa

Eu preciso de forma inequívoca e sem suposições "holísticas" encontrar a interface de rede peer de um veth final em outro namespace de rede.

Teoria ./. Realidade

Embora muita documentação e também respostas aqui no SO assumam que os índices ifindex de interfaces de rede são globalmente exclusivos por host em namespaces de rede, isso não ocorre em muitos casos : ifindex/iflink são ambíguos . Até o loopback já mostra o contrário, tendo um ifindex de 1 em qualquer namespace de rede. Além disso, dependendo do ambiente do contêiner, os ifindexnúmeros são reutilizados em diferentes namespaces . O que torna o rastreamento da fiação veth um pesadelo, especialmente com muitos contêineres e uma ponte de host com veth peers, todos terminando em @if3 ou algo assim ...

Exemplo: link-netnsidé0

Gire uma instância de contêiner do Docker, apenas para obter um novo vethpar conectando-se do namespace da rede do host ao novo namespace da rede do contêiner...

$ sudo docker run -it debian /bin/bash

Agora, no namespace da rede do host, liste as interfaces de rede (deixei de fora as interfaces que não interessam a esta pergunta):

$ show de link ip
1: lo: mtu 65536 qdisc noqueue estado DESCONHECIDO modo DEFAULT padrão do grupo qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
...
4: docker0: mtu 1500 qdisc noqueue state UP mode DEFAULT group default
    link/éter 02:42:34:23:81:f0 brd ff:ff:ff:ff:ff:ff
...
16: vethfc8d91e@if15: mtu 1500 qdisc noqueue master docker0 estado UP mode DEFAULT group default
    link/éter da:4c:f7:50:09:e2 brd ff:ff:ff:ff:ff:ff link-netnsid 0

Como você pode ver, embora o iflinkseja inequívoco, mas o link-netnsidé 0, apesar da extremidade do par estar em um namespace de rede diferente.

Para referência, verifique o netnsid no namespace de rede sem nome do contêiner:

$ sudo lsns -t rede
        NS TIPO NPROCS PID COMANDO DO USUÁRIO
...
...
4026532469 net 1 29616 root /bin/bash

$ sudo nsenter -t 29616 -n show de link ip
1: lo: mtu 65536 qdisc noqueue estado DESCONHECIDO modo DEFAULT padrão do grupo qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
15: eth0@if16: mtu 1500 qdisc noqueue state UP mode DEFAULT group default
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0

Portanto, para ambas as extremidades veth ip link show(e RTNETLINK fwif) nos diz que eles estão no mesmo namespace de rede com netnsid 0. O que está errado ou correto sob as suposições de que os netnsids de link são locais em oposição a globais. Não consegui encontrar nenhuma documentação que tornasse explícito qual escopo o link-netnsids deveria ter.

/sys/class/net/...NÃO para o resgate?

Procurei em /sys/class/net/ if /... mas só consigo encontrar os elementos ifindex e iflink; estes estão bem documentados. "ip link show" também parece mostrar apenas o par ifindex na forma da (in)famosa notação "@if#". Ou eu perdi algum elemento de namespace de rede adicional?

Conclusão/Pergunta

Existem syscalls que permitem recuperar as informações de namespace de rede ausentes para o ponto final de um par veth?

networking network-namespaces
  • 3 respostas
  • 14182 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