Por que o ifconfig mostra apenas o primeiro IP de uma interface de rede configurada com systemd-networkd?

2

Então, não tenho certeza do que está acontecendo aqui, mas eu dupliquei esse problema em vários servidores diferentes no Ubuntu 17.04 (atualizado), mas não consigo encontrar nenhum outro relatório sobre isso, então eu tenho que imaginar Eu estou fazendo algo errado. Eu só não tenho ideia do que.

Em suma, posso configurar uma interface muito bem com systemd.networkd para ter vários IPs. Eles aparecerão assim:

root@nuprobe:/etc/systemd/network# ip addr show dev mike-home
11: mike-home: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 4088 qdisc pfifo_fast state UP group default qlen 1000
    link/ether d8:eb:97:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 10.12.1.2/24 brd 10.12.1.255 scope global mike-home
       valid_lft forever preferred_lft forever
    inet 10.12.1.3/24 brd 10.12.1.255 scope global secondary mike-home
       valid_lft forever preferred_lft forever

No entanto, se eu consultar a mesma coisa usando ifconfig , enquanto os IPs subseqüentes normalmente obterão dispositivos de pesudo-rede denominados mike-home:N (N sendo um número), essa é a totalidade da saída:

root@nuprobe:/etc/systemd/network# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 4559  bytes 659801 (659.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4559  bytes 659801 (659.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

mike-home: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 4088
        inet 10.12.1.2  netmask 255.255.255.0  broadcast 10.12.1.255
        ether d8:eb:97:b6:0b:64  txqueuelen 1000  (Ethernet)
        RX packets 54202  bytes 67720330 (67.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 36690  bytes 4503051 (4.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Alguma idéia do que está acontecendo?

Aqui está o meu arquivo systemd.network :

[Match]
Name=mike-home

[Link]
MACAddress=d8:eb:97:b6:0b:64
MTUBytes=4088
ARP=true

[Network]
BindCarrier=mike-home
Description=Mike Home Network
DHCP=no
IPv4LLRoute=no
MulticastDNS=no
LinkLocalAddressing=no
Domains=vasto.la

[Address]
Address=10.12.1.2/24
Broadcast=10.12.1.255
PreferredLifetime=forever

[Address]
Address=10.12.1.3/24
Broadcast=10.12.1.255
PreferredLifetime=forever

[Route]
Gateway=10.12.1.1
Source=10.12.1.0/24
PreferredSource=10.12.1.2
Destination=10.12.5.0/24
Scope=link

[Route]
Gateway=10.12.1.1
Source=10.12.1.0/24
PreferredSource=10.12.1.2
Destination=10.12.10.0/24
Scope=link

[Route]
Gateway=10.12.1.1
Source=10.12.1.0/24
PreferredSource=10.12.1.2
Destination=10.12.20.0/24
Scope=link

# vim: set filetype=systemd:

Quaisquer palpites (mais de) bem-vindos.

    
por mikev 28.06.2017 / 21:50

1 resposta

0

No Linux, as interfaces "alias" como eth0:0 são inteiramente opcionais. Elas são emuladas apenas para compatibilidade com a antiga API "SIOCGIFADDR" baseada em ioctl para IPv4, que de outra forma não suporta vários endereços por nome de interface - é o que o ifconfig usa até hoje.

Enquanto isso, ferramentas que usam a interface moderna do Netlink - como ip ou systemd-networkd - simplesmente trabalham com uma lista de endereços, todos eles na mesma interface principal. Isso também é consistente com a forma como o IPv6 se comportou desde o primeiro dia.

Quando você adiciona endereços IPv4 via Netlink, você pode definir um rótulo de endereço que ativa a emulação e permite que ifconfig veja esse endereço como uma interface "alias". Em systemd-networkd, isso seria Label=eth0:0 em [Address] .

Minha recomendação é evitar as ferramentas ifconfig e route no Linux, já que elas são essencialmente apenas sobras do BSD que não foram atualizadas para novos recursos do Linux por muitos e muitos anos.

    
por 28.06.2017 / 22:21