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 / unix / Perguntas / 460028
Accepted
rkjnsn
rkjnsn
Asked: 2018-08-03 00:48:33 +0800 CST2018-08-03 00:48:33 +0800 CST 2018-08-03 00:48:33 +0800 CST

Mova automaticamente interfaces de rede física para namespace

  • 772

Gostaria que todas as interfaces físicas do meu sistema residissem em um namespace de rede específico chamado "físico". É fácil mover dispositivos manualmente usando comandos como ip link set enp2s0 netns physicale iw phy phy0 set netns name physical, mas eu gostaria que isso acontecesse automaticamente tanto na inicialização quanto para qualquer dispositivo conectado em tempo de execução.

Parece que a melhor maneira de fazer isso seria através das regras do udev, ou possivelmente alguma mágica do systemd.

Meu primeiro pensamento foi apenas escrever uma regra udev que executasse o comando apropriado, mas me deparei com algumas perguntas que não consegui responder por meio de minhas pesquisas:

  1. Como faço para distinguir interfaces físicas de interfaces virtuais?
  2. Como faço para diferenciar as interfaces WLAN para que eu possa emitir o iwcomando em vez do ipcomando?
  3. Como obtenho o nome de um phy de WLAN para que eu possa passá-lo para o iwcomando?

Eu esperava que o acima fosse relativamente direto, mas não vejo nenhum fator distintivo óbvio no udevadm info.

networking systemd
  • 2 2 respostas
  • 2832 Views

2 respostas

  • Voted
  1. rkjnsn
    2018-08-05T22:43:20+08:002018-08-05T22:43:20+08:00

    Com base na resposta de AB, cheguei à seguinte regra:

    SUBSYSTEM=="net", ACTION=="add", DEVPATH!="/devices/virtual/*", TAG+="systemd", ENV{SYSTEMD_WANTS}="[email protected]"
    

    DEVPATH!="/devices/virtual/*é a chave para pegar apenas dispositivos físicos. [email protected]é um serviço oneshot que move a interface para o namespace desejado ( physical):

    [Unit]
    Description=Move interface to physical namespace
    [email protected]
    [email protected]
    
    [Service]
    Type=oneshot
    ExecStart=/usr/local/sbin/move-netif %I physical
    

    ( [email protected]apenas cria um namespace de rede com o nome fornecido.)

    Por fim, move-netifé responsável por descobrir como mover a interface:

    #!/bin/bash
    
    devpath="$1"
    target_ns="$2"
    
    if [[ -e "$devpath/phy80211" ]]; then
      phy="$(basename "$(readlink "$devpath/phy80211")")"
      iw phy "$phy" set netns name "$target_ns"
    else
      ifname="$(basename "$devpath")"
      ip link set "$ifname" netns "$target_ns"
    fi
    
    • 5
  2. Best Answer
    A.B
    2018-08-03T13:12:26+08:002018-08-03T13:12:26+08:00

    A maioria dessas informações são recuperáveis ​​de /sys:

    1a. /sys/class/net/: lista de dispositivos de rede, todos os tipos incluídos

    1b. /sys/devices/virtual/net/: lista de dispositivos de rede virtual: inclui lo, túneis, veth, pontes ... então se estiver no primeiro, mas não neste, deve ser físico.

    1. se um dispositivo for um dispositivo sem fio moderno (driver), ele terá a entrada /sys/class/net/<device>/phy82011/name, por exemplo:

      $ grep -s --with-filename ''  /sys/class/net/*/phy80211/name
      /sys/class/net/wlan0/phy80211/name:phy0
      /sys/class/net/wlan1/phy80211/name:phy1
      /sys/class/net/wlan2/phy80211/name:phy2
      

    Então, executando o script adequado do udevambiente e comparando com esses diretórios e arquivos do /sys, você deve ter todas as informações necessárias para fazê-lo.

    Apenas como uma observação lateral, se mais tarde, para trabalhar nesses dispositivos, você alterar apenas o namespace da rede ( por exemplo , using nsenter --net=/var/run/netns/physical), /sysainda estará no namespace de montagem do host e não refletirá a chegada desses dispositivos, mas os mostrará ausência de. Usar ip netns exec physical commandé bom, ele altera o namespace de montagem e remonta /syspara você.

    • 3

relate perguntas

  • Pergunta sobre arquivos montados em rede

  • Um endereço IP pode terminar em 255 e não ser um endereço IP de transmissão?

  • Incapaz de identificar qual saída de endereço MAC do comando arp ou comando ip está correta

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Roteador estranho funciona com centos 6 [fechado]

Sidebar

Stats

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

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

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 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

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 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
    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
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +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
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +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