systemd-networkd blockiert manuelle vlans

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

systemd-networkd blockiert manuelle vlans

Beitrag von frankw » 06.01.2023 13:37:45

Hallo,

ich habe auf meinem bullseye-system ein merkwürdiges Verhalten. ich habe systemd eingestellt, dass es mein Netzwerk konfiguriert.

Code: Alles auswählen

/etc/systemd/network/15-wan.network
[Match]
Name=wan

#[Link]
# Override MAC address (spoof MAC address)
#MACAddress=08:22:33:44:55:66

[Network]
BindCarrier=eth0
#ConfigureWithoutCarrier=true

#DHCP=ipv4 

#static setup
Address=192.168.0.19/24
Gateway=192.168.0.10
DNS=192.168.0.10

#VLAN=wan.110
#VLAN=wan.140

IPForward=yes
#needs iptables to be installed
#IPMasquerade=yes

#Tunnel=he-ipv6

#[Route]
#Gateway=192.168.0.10
#Destination=10.0.3.0/24
#GatewayOnLink=yes

/etc/systemd/network/20-lanbr.netdev
[NetDev]
Name=lanbr0
Kind=bridge

[Bridge]
DefaultPVID=1
VLANFiltering=1

/etc/systemd/network/22-lanbr.network
[Match]
Name=lanbr0

[Network]
BindCarrier=eth0
ConfigureWithoutCarrier=true

Address=192.168.1.1/24
Address=fd00:A::10/64
#Address=192.168.0.18/24
#Gateway=192.168.0.10
#DNS=192.168.0.10
#DHCPServer=yes
#IPv6SendRA=yes
#DHCPv6PrefixDelegation=yes

[DHCPServer]
PoolOffset=100
PoolSize=150

#[Route]
#Gateway=192.168.0.10
#Destination=10.0.3.0/24
#GatewayOnLink=yes

#[IPv6SendRA]
#Managed=true

#[IPv6Prefix]
#Prefix=fd00:A::/64
#Prefix=2001:470:5256:0::/64

/etc/systemd/network/05-eth0.network
[Match]
Name=eth0

[Network]
DHCP=no
LinkLocalAddressing=no
ConfigureWithoutCarrier=true

/etc/systemd/network/21-lanbr-bind.network
[Match]
Name=lan0 lan1 lan2 lan3

[Network]
Bridge=lanbr0
/etc/systemd/network/10-wan.link
[Match]
OriginalName=wan

[Link]
Name=wan
#MACAddressPolicy=none
#MACAddress=08:22:33:44:55:77
lege ich nun manuell vlans auf dem wan-interface (dsa-user-port) an, werden die zwar eingerichtet, aber sie funktionieren nicht...tcpdump zeigt zwar getaggte Pakete auf wan, aber die erreichen die Gegenstelle nicht. deaktiviere ich networkd und starte mit einem unkonfigurierten Netzwerk, und richte die vlans auf exakt die selbe Weise ein (script), funktionieren sie.

Code: Alles auswählen

#!/bin/bash
ip link set eth1 up
ip link add link eth1 name vlan500 type vlan id 500
ip link add link wan name vlan600 type vlan id 600
ip addr add 192.168.50.1/24 dev vlan500
ip addr add 192.168.60.1/24 dev vlan600
ip link set vlan500 up
ip link set wan up
ip link set vlan600 up
starte ich das auf dem unkonfigurierten Netzwerk kommt diese Ausgabe:

Code: Alles auswählen

root@bpi-r3:~# ./vlan_test.sh
[   66.090919] mtk_soc_eth 15100000.ethernet eth1: configuring for inband/1000base-x link mode
[   66.140636] mtk_soc_eth 15100000.ethernet eth0: configuring for fixed/2500base-x link mode
[   66.149096] mtk_soc_eth 15100000.ethernet eth0: Link is Up - 2.5Gbps/Full - flow control rx/tx
[   66.150864] mt7530 mdio-bus:1f wan: configuring for phy/gmii link mode
[   66.165138] mtk_soc_eth 15100000.ethernet eth1: Link is Up - 1Gbps/Full - flow control rx/tx
[   66.169148] mt7530 mdio-bus:1f wan: Link is Up - 1Gbps/Full - flow control rx/tx
[   66.181269] IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
root@bpi-r3:~# [   66.188208] IPv6: ADDRCONF(NETDEV_CHANGE): wan: link becomes ready
[   66.195788] IPv6: ADDRCONF(NETDEV_CHANGE): vlan500: link becomes ready
[   66.202445] IPv6: ADDRCONF(NETDEV_CHANGE): vlan600: link becomes ready
starte ich es nach systemd, fehlt genau der eintrag, dass das vlan600 ready wird...

Code: Alles auswählen

root@bpi-r3:~# dmesg | grep wan
[    2.386256] mt7530 mdio-bus:1f wan (uninitialized): PHY [mt7530-0:00] driver [MediaTek MT7531 PHY] (irq=POLL)
[   17.532109] cdc_mbim 1-1.1:1.12 wwan0: register 'cdc_mbim' at usb-11200000.usb-1.1, CDC MBIM, 3a:90:94:8b:f8:b
3
[   19.013319] mt7530 mdio-bus:1f wan: configuring for phy/gmii link mode
[   19.025092] mt7530 mdio-bus:1f wan: Link is Up - 1Gbps/Full - flow control rx/tx
[   19.032581] IPv6: ADDRCONF(NETDEV_CHANGE): wan: link becomes ready
root@bpi-r3:~# ./vlan_test.sh 
[  107.262498] mtk_soc_eth 15100000.ethernet eth1: configuring for inband/1000base-x link mode
[  107.321856] mtk_soc_eth 15100000.ethernet eth1: Link is Up - 1Gbps/Full - flow control rx/tx
[  107.330534] IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
root@bpi-r3:~# [  107.337732] IPv6: ADDRCONF(NETDEV_CHANGE): vlan500: link becomes ready
mit ip sieht es aber gut aus

Code: Alles auswählen

root@bpi-r3:~# ip a s vlan600
16: vlan600@wan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 86:45:51:4c:d5:89 brd ff:ff:ff:ff:ff:ff
    inet 192.168.60.1/24 scope global vlan600
       valid_lft forever preferred_lft forever
    inet6 fe80::8445:51ff:fe4c:d589/64 scope link 
       valid_lft forever preferred_lft forever
root@bpi-r3:~# ip a s wan
5: wan@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 86:45:51:4c:d5:89 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.19/24 brd 192.168.0.255 scope global wan
       valid_lft forever preferred_lft forever
    inet6 fe80::8445:51ff:fe4c:d589/64 scope link 
       valid_lft forever preferred_lft forever
so schaut tcpdump aus (arp geht raus, aber kein reply, weil es auf der anderen Seite nicht ankommt):

Code: Alles auswählen

tcpdump -i wan -nn -e vlan &
13:29:34.231193 86:45:51:4c:d5:89 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 600, p 0, ether
type ARP (0x0806), Request who-has 192.168.60.3 tell 192.168.60.1, length 28
hat jemand eine Idee, woran es liegen könnte? Ich vermute, wenn in systemd keine vlans definiert sind (siehe vorbereitete vlans in der Konfig), setzt networkd einen vlan-filter auf das interface bzw. der port bleibt im accessport-mode (kein wechsel zu trunk-mode)...kenne die Unterscheidung nur vom Switch, aber nicht von linux...würde aber das Verhalten erklären

edit: habe jetzt noch versucht, ein vlan (110) auf dem interface mit systemd zu definieren, auf der anderen Seite wie vorher manuell eingerichtet und natürlich im switch freigegeben. trotzdem geht kein vlan durch.

Code: Alles auswählen

/etc/systemd/network/wan.110.netdev
[NetDev]
Name=wan.110
Kind=vlan

[VLAN]
Id=110

zusätzlich in der 15-wan.network ([Network]-section):

VLAN=wan.110
das vlan wird auch korrekt angelegt, aber wieder geht kein traffic durch

es scheint als entfernt systemd das vlan-tag bevor es aus dem interface rausgeht...habe einen Bugreport/issue für systemd rausgeschickt

https://github.com/systemd/systemd/issues/25970

Gruß Frank

Antworten