Se você estiver usando o NetworkManager, para que network-online.target funcione como esperado, é necessário ativar o serviço NetworkManager-wait-online.service , que é o que na verdade espera que a rede seja online para satisy esse alvo.
O network-online.target precisa ser "conectado" ao seu gerenciador de rede (como o NetworkManager não é a única alternativa, há também o systemd-networkd que pode ser usado para gerenciar a rede.)
Para que network-online.target trabalhe com o NetworkManager, você precisa ter um link simbólico em /etc/systemd/system/network-online.target.wants/ apontando para /usr/lib/systemd/system/NetworkManager-wait-online.service .
O que você pode realmente criar ativando esse serviço:
$ sudo systemctl enable NetworkManager-wait-online.service
Created symlink from /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service to /usr/lib/systemd/system/NetworkManager-wait-online.service.
Uma vez que isso esteja em vigor, as dependências de network-online.target devem começar a funcionar, esperando até que o NetworkManager termine a criação de todas as interfaces que devem ser exibidas na inicialização.
Para ajudar a diagnosticar problemas com essa configuração, convém ver também a saída de systemctl status network-online.target e systemctl status NetworkManager-wait-online.service , pois eles podem ter mais pistas sobre o que está acontecendo. (Em particular, os timestamps podem ser úteis, se os daemons que dependem de network-online.target estiverem iniciando antes de NetworkManager-wait-online.service ter terminado, então você pode ter um problema com sua configuração.)
Das soluções listadas, eu recomendaria essa:
# mkdir /etc/systemd/system/sshd.service.d
# tee /etc/systemd/system/sshd.service.d/wait.conf << 'EOF'
[Unit]
Wants=network-online.target
After=network-online.target
EOF
Como network-online.target é o que você realmente quer (para garantir que todos os IPs estejam ativos, etc.) e incluir Wants= garante que sua inicialização seja solicitada.
Dos outros métodos, este não funcionará: systemctl add-wants multi-user.target network.target , já que não está criando nenhuma dependência entre os serviços em si (daemon SSH, etc.) e a rede está totalmente ativa. É só dizer que você quer que a rede esteja ativa ...
E o que envolve o diretório /etc/systemd/system/sshd.service.requires/ está sem a dependência After= (que eu acredito ser essencial, e não implícito por ter apenas um .requires/ .) Se você acha que Requires= é melhor que Wants= (é mais strong, faz com que a unidade falhe se a dependência falhar), então eu recomendo usar isso apenas em /etc/systemd/system/sshd.service.d/wait.conf , o arquivo de substituição é definitivamente uma maneira mais flexível de gerenciar essa configuração.
A adição de uma dependência em sys-subsystem-net-devices-eth1.device também não ajuda, já que isso indica apenas que o dispositivo existe (do ponto de vista do udev), o que não diz nada sobre ele estar configurado e configurado ainda. Então isso não é uma opção.