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 / 787068
Accepted
A.L
A.L
Asked: 2024-11-23 05:11:43 +0800 CST2024-11-23 05:11:43 +0800 CST 2024-11-23 05:11:43 +0800 CST

Como lidar com diferentes interfaces enp*s0 com networking.service?

  • 772

Eu uso a rede através do networking.servicee do /etc/network/interfacesarquivo de configuração em um sistema Debian 12 (como mostrado aqui ).

Problema

Adicionei uma GPU e depois de reiniciar, o computador ficou offline. É um NAS sem display, então tive que conectar uma tela e um teclado.

E vi que ip addrreportou uma nova interface: enp3s0.

Problema: minha configuração é /etc/network/interfacesmencionada apenas enp2s0:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enp2s0

iface enp2s0 inet dhcp

Solução temporária

Tive que substituir enp2s0e enp3s0correr systemctl restart networkingpara recuperar a rede, e funcionou.

Se algum dia eu remover a GPU ou adicionar um dispositivo PCI-Express, o nome da interface de rede poderá mudar novamente e o servidor ficará offline.

Então eu alterei o arquivo conf para gerenciar enp2s0ou enp3s0:

# The primary network interface
# without GPU
allow-hotplug enp2s0

iface enp2s0 inet dhcp

# with GPU
allow-hotplug enp3s0

iface enp3s0 inet dhcp

Solução definitiva?

É seguro declarar conf para interfaces que podem ou não existir? Existe uma maneira mais limpa?

debian
  • 2 2 respostas
  • 62 Views

2 respostas

  • Voted
  1. Best Answer
    larsks
    2024-11-27T05:48:33+08:002024-11-27T05:48:33+08:00

    Uma opção para uma solução mais limpa é desabilitar nomes de interface previsíveis . Se você tiver apenas uma interface em seu sistema, ela sempre será eth0.

    Outra opção seria renomear a interface identificando-a primeiro pelo seu endereço MAC. Isso é descrito no mesmo documento ; por exemplo, dada uma interface com endereço MAC 52:54:00:bb:a4:80, eu poderia colocar o seguinte em /etc/systemd/network/10-lan0.link:

    [Match]
    MACAddress=52:54:00:bb:a4:80
    [Link]
    Name=lan0
    

    Agora, sempre que o sistema inicializar, a interface com esse endereço MAC será nomeada lan0.

    Eu escreveria então /etc/network/interfacesassim:

    allow-hotplug lan0
    iface lan0 inet dhcp
    

    Como a interface é identificada pelo seu endereço MAC, isso funcionará independentemente de quais outras placas você tenha instalado no seu sistema.

    • 3
  2. TonyH
    2024-11-28T00:31:52+08:002024-11-28T00:31:52+08:00

    Acho que a solução do pôster inicial , nomes de interface extras duplicados, já é a melhor. Começando pelos requisitos (servidor headless, NAS, mudanças limitadas de hardware), aqui está o porquê:


    Foco nas necessidades:

    1. Necessidades: habilitar DHCP em qualquer interface e não ficar bloqueado , o que também inclui sobreviver a atualizações de software ao longo dos anos .

    2. A maneira mais simples e fácil de garantir que o DHCP esteja habilitado para qualquer NIC, sem systemdou udevcom complexidade, é a NOMEAÇÃO DE INTERFACE CATCHALL

      • Isso nos permite evitar systemdregras para renomear interfaces, e udevregras, ambas dinâmicas, programáveis ​​e sofisticadas, mas que não agregam nenhum benefício para esse caso de uso e criam pontos de falha extras:

        • systemdrenomear com base no endereço mac ou mesmo correspondência de curinga funciona bem, mas se o seu initrdnão regenerar, essa regra pode ser ignorada. Você também precisa alterar /etc/network/interfaces para corresponder à regra.

        • udevtambém pode fazer o mesmo, identificando uma NIC por endereço MAC ou curinga, mas então requer um script para configurar a interface, por exemplointerface=$1;ip link set dev $interface up;dhclient $interface

    3. Mencionado na documentação do Debian como CATCHALL INTERFACE NAMING em Networking, especificamente config #Safety_nets . É mencionado como uma forma aceitável de adicionar robustez a um sistema, onde casos extremos ainda podem surpreendê-lo

    Um exemplo

    Começando com seu exemplo , crie registros de interface extras para um número razoável de nomes possíveis:

    # /etc/networking/interfaces
    allow-hotplug enp2s0
    iface enp2s0 inet dhcp
    # next duplicate set
    allow-hotplug enp3s0
    iface enp3s0 inet dhcp
    # next duplicate set
    allow-hotplug enp4s0
    iface enp4s0 inet dhcp
    # etc ...
    

    Alternativas a considerar, com opiniões para cada uma:

    Trabalho, mas muito profundamente ligado a atualizações de sistema e outras complexidades
    • systemdregras de link (mencionadas acima)
    • udevregras (mencionadas acima)
    Hacky e deve funcionar, mas não há benefício testado sobre a solução "top" (pegue todos os nomes de interface)
    • curingas em /etc/networking/interfacesegallow-hotplug enp* / iface enp* inet dhcp
    Funciona bem, mas provavelmente não vale a pena
    • netplan, do netplan.iopacote, pode controlar interfaces, corresponder nomes e delegar para outros sistemas, como o NetworkManager, mas o padrão ésystemd

    Esta configuração de exemplo corresponde aos nomes e, em seguida, informa systemd(por meio networkddo renderizador) para habilitar o dhcp. Executesudo netplan apply

    # /etc/netplan/01-network-manager-all.yaml
    network:
      version: 2
      renderer: networkd
      ethernets:
        matched:
          match:
            name: enp*s0  # Matches interfaces like enp0s0, enp1s0, etc.
          dhcp4: yes
    
    • network-managerpacote, controlado via nmcliou nmtuise você quiser um TUI. Geralmente uma ferramenta GUI para desktops, ele usa arquivos yaml internamente que são fáceis de usar.

    configuração de exemplo, anote o caminho e lembre-se de executarsudo systemctl restart NetworkManager

    # /etc/NetworkManager/system-connections/my-auto-ethernet-wpl.nmconnection
    [connection]
    id=my-auto-ethernet-wpl
    type=ethernet
    interface-name=wpl*  # Wildcard to match interfaces starting with "wpl"
    autoconnect=true
    
    [ipv4]
    method=auto
    
    • Qualquer sistema de gerenciamento de configuração, como salt , ansible , puppet , etckeeper , pode configurar seu sistema e lidar com erros.
      • Se você souber como usar qualquer um deles, a complexidade será reduzida e será fácil de manter, especialmente quando combinado com controle de versão.
    • 1

relate perguntas

  • Configuração do GRUB para reconhecer diferentes ambientes de desktop (instalações) da mesma distribuição Linux

  • astyle não altera a formatação do arquivo de origem

  • Recebendo e-mail em um novo Debian fresco

  • Debian Stretch: gnome-software segfault em libgs_plugin_systemd-updates.so

  • Como digitar ü no Pinyin IME?

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