systemd: como desabilitar seletivamente o wpa_supplicant para uma interface WLAN específica?

4

Em um sistema Linux com systemd e networkd , preciso operar um ponto de acesso WLAN em uma interface WLAN, enquanto opero interfaces WLAN adicionais (hotplug) no modo de estação normal ("cliente").

Por acaso, wpa_supplicant.service entra em funcionamento em todas as minhas interfaces WLAN, o que seria ótimo, se todas essas interfaces WLAN operassem no modo estação / cliente. No entanto, enquanto wpa_supplicant.service serve uma interface WLAN, não é possível (mais?) Que hostapd.service opera essa interface WLAN no modo ponto de acesso AP.

Por isso, quero desabilitar wpa_supplicant.service apenas para uma interface específica, digamos wls35u2 . Minha ideia era ter uma unidade [email protected] que eu pudesse desativar seletivamente, mas deixar wpa_supplicant.service habilitado. No entanto, isso não parece funcionar ou estou fazendo algo errado no [email protected] .

Então, como posso desabilitar o serviço de solicitante de WPA em uma interface específica sem desativá-lo globalmente?

    
por TheDiveO 22.08.2017 / 12:21

3 respostas

4

Eu tive o mesmo problema. @Nproject encontrou uma boa solução. Mas você não precisa modificar cada um desses procedimentos. Simplesmente vá até o final do arquivo Nproject mencionado ( /lib/dhcpcd/dhcpcd-hooks/10-wpa_supplicant ) e modifique o seguinte se cláusula:

ORIGINAL

if [ "$ifwireless" = "1" ] && \
    type wpa_supplicant >/dev/null 2>&1 && \
    type wpa_cli >/dev/null 2>&1
then
        case "$reason" in
        PREINIT)        wpa_supplicant_start;;
        RECONFIGURE)    wpa_supplicant_reconfigure;;
        DEPARTED)       wpa_supplicant_stop;;
        esac
fi

Adicione [ "$interface" != "TheInterfaceWPASupplicantShouldBeDisabledOn" ] desta forma:

MODIFICADO

if [ "$ifwireless" = "1" ] && [ "$interface" != "TheInterfaceWPASupplicantShouldBeDisabledOn" ]  && \
    type wpa_supplicant >/dev/null 2>&1 && \
    type wpa_cli >/dev/null 2>&1
then
        case "$reason" in
        PREINIT)        wpa_supplicant_start;;
        RECONFIGURE)    wpa_supplicant_reconfigure;;
        DEPARTED)       wpa_supplicant_stop;;
        esac
fi

Além disso, isso impedirá que o Gerenciador de Rede (GUI) na barra de tarefas mostre essa interface.

    
por 27.10.2017 / 11:42
4

Use a opção "nohook wpa_supplicant" em /etc/dhcpcd.conf. Se você não quiser wpa_supplicant para wlan0, isso seria:

interface wlan0
        nohook wpa_supplicant
    
por 01.04.2018 / 19:44
2

[EDIT: Veja a resposta do @rweisse para obter uma maneira melhor de fazê-lo]

Eu tive exatamente o mesmo problema no meu pi de framboesa.

O que eu descobri é que ambos wpa_supplicant @ wlan0 e wpa_supplicant @ wlan1 (tenho duas interfaces wlan) e wpa_supplicant.service foram desativados .

Eu consegui encontrar (no raspbian, pelo menos, eu não sei como é em outras versões debian) que o dhcpcd é responsável pelo início do wpa_supplicant.

Em / lib / dhcpcd / dhcpcd-hooks , existe um arquivo chamado "10-wpa-supplicant" , no qual você pode encontrar start / reconfigure / stop procedimentos para o wpa_supplicant.

Neste arquivo eu simplesmente adicionei condição na $ interface sendo processada. Para cada PROCEDURE_NAME (iniciar / parar / reconfigurar):

PROCEDURE_NAME( )
    if [ "$interface" != "TheInterfaceWPASupplicantShouldBeDisabledOn" ] then
        Code of the prodecure
    else
        return 0
    fi

Depois disso, reiniciei o serviço dhcpcd com

systemctl restart dhcpcd

Agora, a InterfaceWPASupplicantShouldBeDisabledOn não é mais um problema usando o hostapd. Esta solução é meio brutal, já que eu não acho que isso deveria ser feito assim, mas eu não consegui encontrar nenhum manual sobre como fazer isso de outra maneira.

Espero que isso ajude.

    
por 01.10.2017 / 20:57