Como abrir uma interface de rede apenas se estiver fisicamente presente

8

Executando o Ubuntu Server 12.04 (sem GUI). Qual seria a melhor maneira de fazer o kernel abrir uma interface de rede somente se ela estiver fisicamente conectada? Portanto, se não existir, basta iniciar a inicialização de outras interfaces (se houver) e continuar na tela de login, sem demora "aguardando a configuração da rede".

Por exemplo, eu tenho uma chave USB sem fio wlan9 (em / etc / network / interfaces):

auto wlan9
iface wlan9 inet dhcp
        wpa-ssid myssd
        wpa-psk mykey
        wpa-proto RSN
        wpa-pairwise CCMP
        wpa-group CCMP

Tentei allow-hotplug em vez de auto ; nesse caso, a interface não é inicializada automaticamente durante a inicialização, e eu tenho que fazer isso manualmente com ifup wlan9 . Não é exatamente isso que estou procurando.

Obrigado.

noseratio
fonte

Respostas:

4

Também para servidor: use o NetworkManager

  1. Instale-o:

    sudo apt-get install network-manager
    

    Infelizmente, isso gera muitas dependências.

  2. Desative a interface atualmente configurada da maneira tradicional.

    ifdown wlan9
    
  3. Desative todas as configurações manuais /etc/network/interfacesremovendo todas as linhas relacionadas a essa interface.

  4. Adicione uma configuração de conexão à sua conexão sem fio em /etc/NetworkManager/system-connections/(crie um nome):

    [connection]
    id=Some name of my connection
    uuid=0d791425-87c5-45e6-948e-01b1863901f7
    type=802-11-wireless
    
    [802-11-wireless]
    ssid=mySSID
    mode=infrastructure
    mac-address=24:77:00:01:02:03
    security=802-11-wireless-security
    
    [802-11-wireless-security]
    key-mgmt=wpa-psk
    psk=mypassword
    
    [ipv4]
    method=auto
    
    [ipv6]
    method=ignore
    
    • Para uuidusar o comando uuidgenpara gerar um aleatório.
    • Para mac-addressusar o endereço MAC do seu adaptador sem fio (use ifconfig -a wlan9para descobrir). Isso vincula esse arquivo de configuração apenas a este adaptador - se não estiver presente, ele não será usado para outro adaptador, nem esperará que o adaptador esteja presente.
    • Outros campos falam por si, espero. :)
  5. Reinicie o NetworkManager ou reinicie.

    restart network-manager
    
gertvdijk
fonte
Obrigado, a opção Gerenciador de Rede parece um pouco pesada, mas vou falar sobre ela se não encontrar algo mais leve. ifplugd quase funcionou, o wlan9 sobe, mas não obtém uma concessão de DHCP.
13133 noseratio
@Noseratio Sim, eu concordo que não é realmente uma solução leve. Se eu conhecesse um gerente de rede mais leve, sem as dependências da GUI, teria usado isso na minha resposta. :)
gertvdijk
@gertvdijk Você pode me dizer o que acontece se eu remover a mac-addresslinha? Funcionará para todos os adaptadores ou falhará?
DangeMask
@DangeMask Deve funcionar apenas para todos os adaptadores que assumo. Apenas tente descobrir?
gertvdijk
@gertvdijk Eu tentei agora. Se eu excluir o "endereço MAC do dispositivo" (excluído na GUI, também desaparece no arquivo), o gerenciador de rede não se conectará automaticamente mesmo após uma conexão e reinicialização manual. Eu tentei até definir ifupdown> conseguiu verdadeiro e falso sem sucesso.
DangeMask
3

e continue na tela de login

Sugere que você esteja em uma instalação habilitada para GUI (não servidor) - por isso, estou fornecendo esta resposta com base nisso.


Basta usar o NetworkManager

  1. Derrube a interface.

    ifdown wlan9
    
  2. Desative todas as configurações manuais /etc/network/interfacesremovendo todas as linhas relacionadas a essa interface.

  3. Vá para configurações de rede e adicione / edite a conexão de rede sem fio.

  4. Configure-o da seguinte forma (veja a captura de tela abaixo):

    1. Faça com que ele se conecte automaticamente.

    2. Aplique-o ao adaptador sem fio correto, selecionando o endereço MAC correto. Se o adaptador não estiver presente, essas configurações de conexão nesta caixa de diálogo não serão aplicadas, portanto, isso as "vincula" a esse adaptador específico (porque cada adaptador possui outro endereço MAC). E não, este não é o endereço MAC do WiFi AP - é o BSSID.

    3. Disponibilize para todos os usuários (isso já faz a conexão automática na tela de login). Observe que essas configurações ficam acinzentadas até você fornecer os detalhes necessários.

    E, claro, também insira os outros detalhes sobre segurança, SSID, etc.

    insira a descrição da imagem aqui

gertvdijk
fonte
Desculpe, esqueci de especificar que este é o Ubuntu Server. Obrigado de qualquer maneira, salvei essa dica para minhas necessidades de desktop.
13133 noseratio
1
@Noseratio Ah ... muito ruim. Agora, escreva uma resposta para a instalação do servidor. Seja mais específico e completo em sua pergunta da próxima vez.
22813 Gertvdijk
Eu vou. Por favor, perdoe um noob :)
noseratio
3

Eu vim com a seguinte solução que não depende de nenhum pacote extra:

auto wlan9
iface wlan9 inet manual
        wpa-ssid MYSSD
        wpa-psk MYKEY
        wpa-proto RSN
        wpa-pairwise CCMP
        wpa-group CCMP
        wireless-power off
        pre-up if [ -f /sys/class/net/wlan9/operstate ]; then ifconfig wlan9 up; fi
        up if [ -f /sys/class/net/wlan9/operstate ]; then dhclient wlan9; fi

Embora possa não ser elegante, ele faz o que eu quero: pula a inicialização do wlan9 sem atraso de inicialização, se o dongle sem fio não estiver conectado, caso contrário, será exibido.

noseratio
fonte
Agradável. Mas como isso pula a inicialização? Você não cancela nada na pre-updiretiva.
gertvdijk
1
Ele acha que este é um produto de dois fatores: 1) inet manual de - por isso realmente depende de pré-up ação para fazer qualquer coisa: se não houver pré-up ou se , kernel recém-pula esta estrofe
noseratio
Sim, pode ser, mas de acordo com a página de manual, todas as outras configurações, incluindo wpa-*diretivas, não se aplicam ao manualmétodo. Parece um tipo de comportamento não documentado.
gertvdijk
1
Eu errei com o comentário, eis o que eu queria dizer: Acho que este é um produto de dois fatores: 1) manual inet - portanto, ele realmente depende de uma ação pré-up para fazer qualquer coisa: se não houver pré-up ou up , o kernel simplesmente ignoraria essa estrofe 2) Se as interfaces não existirem, se [-f / sys / class / net / wlan9 / operstate] retornasse 1 e a preparação falhar, não haverá mais inicialização ou atraso.
Noseratio
O comportamento de pré-configuração está realmente documentado, mas pode mudar no futuro, manpages.ubuntu.com/manpages/precise/man5/interfaces.5 . Execute o comando antes de ativar a interface. Se esse comando falhar, o ifup será abortado, evitando marcar a interface como configurada, imprime uma mensagem de erro e sai com o status 0. Esse comportamento pode mudar no futuro.
31513 noseratio