Forum: PC-Programmierung Linux VLAN untagged und tagged


von Peter II (Gast)


Lesenswert?

Hallo,

ich hänge gerade an einen VLAN Problem unter Linux. Eventuell hat ja 
jemand eine Lösung.

Es gibt ein untagged Netzt und 4 VLAN (1-5). Es kommen also bei eth1 
packet mit TAG und welche ohne TAG an. (sie ist es zumindest aktuell)

Ich habe eth1.1, eth1.2, eth1.3 .. und eth1 eingerichtet - jeweils ein 
anderes netzt.

So jetzt das Problem, alle packet mit einen TAG kommen auch in eth1 an 
und dort wo sie eigentlich hingehören.

Das sieht dann in dhcpd so aus:

DHCPREQUEST for 192.168.2.178 from 00:01:38:34:c7:8a (WR-6640Sg) via 
eth1.2
DHCPREQUEST for 192.168.2.178 from 00:01:38:34:c7:8a (WR-6640Sg) via 
eth1

was dann natürlich ein Problem ist.

gib es eine Möglichkeit packet mit einen TAG in eth1 zu filtern?

von DHCPinator (Gast)


Lesenswert?

Kenn das Problem.

DHCP-Broadcasts gehen an alle tagged vlans, schließlich soll der 
DHCP-Server ja die richtige VLAN-ID bereitstellen können, oder so lautet 
die Theorie.

Ein "bischen" besser gehts z.B. mit dnsmask statt dhcpd, der kann 
wenigstens pro Interface, an das er bindet, unterschiedliche 
Addresspools konfiguriert haben.
Hilft dir aber nicht für "eth0" ohne tag.
Notbehelf (ungetestet): für jedes vlan eine Bridge anlegen, dhcp-Server 
an den bridges lauschen lassen.

Aber auch dnsmask hat seine Probleme: er hat nur einen leases-cache, den 
er für alle seine Interfaces nutzt.
d.H. Client connected an Interface 1 und kriegt Adresse aus Pool 1,
disconnect, connect an interface 2: dnsmask findet die hwaddress im 
cache, und gibt fröhlich nochmal die IP aus Pool 1 heraus, die auf 
diesem Interface garnicht geroutet wird...

Hab dann Kapituliert. Meine Lösung: zwei dhcp-server an zwei ungetaggten 
switch-ports.
Kosten: <20 € für billigst-Netzwerkkarte + Kabel.
Wesentlich billiger als die Arbeitszeit die nötig wäre, um den 
isc-dhcp-Server oder dnsmask umzupatchen...

von Peter II (Gast)


Lesenswert?

DHCPinator schrieb:
> DHCP-Broadcasts gehen an alle tagged vlans, schließlich soll der
> DHCP-Server ja die richtige VLAN-ID bereitstellen können, oder so lautet
> die Theorie.

nein, so das schein nicht wirklich das Problem zu sein.

Auch ICMMP (Ping) von VLAN 2 kommt an eth1 und eth1.2 an. Es wird also 
jedes Packet (mit oder ohne Tag) an eth1 ausgeliefert.

Ich sehe nur die Lösung den Switch umzustellen, das er jedes Packet mit 
Tag sendet und dann eth1 ohne IP lasse. Und dann eth0.1 verwende.

von Christian B. (casandro)


Lesenswert?

Du solltest nicht tagged und untagged auf einem Interface mischen, so 
ist das eigentlich nicht gedacht, auch wenn einige Switche und 
Betriebssysteme nicht gleich explodieren wenn man das macht.

Netfilter (wozu iptables gehört) kann anscheinend auch auf Ebene 2 
filtern. Vielleicht findest Du da was
http://de.wikipedia.org/wiki/Netfilter



> Ich sehe nur die Lösung den Switch umzustellen, das er jedes Packet mit
> Tag sendet und dann eth1 ohne IP lasse. Und dann eth0.1 verwende.

Ja, so muss das sein.

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Christian Berger schrieb:
> Du solltest nicht tagged und untagged auf einem Interface mischen, so
> ist das eigentlich nicht gedacht, auch wenn einige Switche und
> Betriebssysteme nicht gleich explodieren wenn man das macht.

einfacher gesagt als getan.

Der Cisco Switch SLM224G lässt leider nicht zu das ich VLAN1 (Default) 
getaggt über eine Port rausgehen lassen. Bei allen anderen VLANs geht 
es.

von Ding (Gast)


Lesenswert?

Peter II schrieb:

> Der Cisco Switch SLM224G lässt leider nicht zu das ich VLAN1 (Default)
> getaggt über eine Port rausgehen lassen. Bei allen anderen VLANs geht
> es.

Never use VLAN 1

von Ding (Gast)


Lesenswert?

DHCPinator schrieb:
> Ein "bischen" besser gehts z.B. mit dnsmask statt dhcpd, der kann
> wenigstens pro Interface, an das er bindet, unterschiedliche
> Addresspools konfiguriert haben.

Falsch.

von (prx) A. K. (prx)


Lesenswert?

Peter II schrieb:
> Es gibt ein untagged Netzt und 4 VLAN (1-5).

Keine gute Idee. Also tagged VLAN 1 und untagged VLAN zu verwenden.

Christian Berger schrieb:
> Du solltest nicht tagged und untagged auf einem Interface mischen,

Bei Cisco ist das nicht weiter ungewöhnlich. So ist das der 
Regelbetrieb, wenn am gleichen Interface sowohl ein IP-Telefon als auch 
ein PC hängt.

von Condi (Gast)


Lesenswert?

Stell doch einfach das Native VLAN auf ein unbenutztes VLAN um, dann 
tagt der Switch auch VLAN1.

Das ist jedoch nicht das Problem. VLANs benutzt man um Broadcast Domänen 
zu verkleinern.
Wenn ein Broadcast eines Clients in mehreren VLANs ankommt, dann stimmt 
am Client bzw. dessen Portkonfiguration nicht oder irgendwie ist da eine 
Schleife drin. Welche IP der Client bekommt, bestimmt der DHCP anhand 
der IP auf dessen Interface ankommt bzw. der IP Helper Adresse.

Poste doch mal den Aufbau und die Konfiguration...

von (prx) A. K. (prx)


Lesenswert?

Condi schrieb:
> Stell doch einfach das Native VLAN auf ein unbenutztes VLAN um

Yep.

> Stell doch einfach das Native VLAN auf ein unbenutztes VLAN um, dann
> tagt der Switch auch VLAN1.

Tagged VLAN 1 würde ich aber nicht verwenden. Gibt bloss Ärger.

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

A. K. schrieb:
> Tagged VLAN 1 würde ich aber nicht verwenden. Gibt bloss Ärger.

Das musste ich auch schon mal bei einem TP-Link-Switch feststellen.

Ist diese Sonderrolle von VLAN 1 eigentlich irgendwo festgeschrieben,
oder hat sich das einfach nur eingebürgert?

von Alain S. (alain_s)


Lesenswert?

DHCP-Snooping auf dem Switch abschalten und gut.

von Alain S. (alain_s)


Lesenswert?

Peter II schrieb:

>
> Auch ICMMP (Ping) von VLAN 2 kommt an eth1 und eth1.2 an. Es wird also
> jedes Packet (mit oder ohne Tag) an eth1 ausgeliefert.
>
> Ich sehe nur die Lösung den Switch umzustellen, das er jedes Packet mit
> Tag sendet und dann eth1 ohne IP lasse. Und dann eth0.1 verwende.

Das DARF nicht sein. Zeig mal deine Config vom Switch und von der 
Linuxbox

Bist du sicher das dein TCP-Dump nicht einfach das Paket zweimal 
anzeigt? Schreibe den Dump in ein File und analysiere es mit Wireshark. 
Dann siehst du auch den VLAN-Tag u.s.w.

von Peter II (Gast)


Lesenswert?

Alain S. schrieb:
> Das DARF nicht sein. Zeig mal deine Config vom Switch und von der
> Linuxbox
>
> Bist du sicher das dein TCP-Dump nicht einfach das Paket zweimal
> anzeigt? Schreibe den Dump in ein File und analysiere es mit Wireshark.
> Dann siehst du auch den VLAN-Tag u.s.w.

ja ich bin sicher.

ping 192.168.2.178

tcpdump -e -i eth1 -p -n
08:28:17.836150 74:d4:35:14:b3:b2 > 00:01:38:34:c7:8a, ethertype 802.1Q 
(0x8100), length 102: vlan 2, p 0, ethertype IPv4, 192.168.2.1 > 
192.168.2.178: ICMP echo request, id 7129, seq 1, length 64
08:28:17.837265 00:01:38:34:c7:8a > 74:d4:35:14:b3:b2, ethertype 802.1Q 
(0x8100), length 102: vlan 2, p 0, ethertype IPv4, 192.168.2.178 > 
192.168.2.1: ICMP echo reply, id 7129, seq 1, length 64
08:28:18.837636 74:d4:35:14:b3:b2 > 00:01:38:34:c7:8a, ethertype 802.1Q 
(0x8100), length 102: vlan 2, p 0, ethertype IPv4, 192.168.2.1 > 
192.168.2.178: ICMP echo request, id 7129, seq 2, length 64

tcpdump -e -i eth1.2 -p -n
08:29:33.431189 74:d4:35:14:b3:b2 > 00:01:38:34:c7:8a, ethertype IPv4 
(0x0800), length 98: 192.168.2.1 > 192.168.2.178: ICMP echo request, id 
7289, seq 1, length 64
08:29:33.432323 00:01:38:34:c7:8a > 74:d4:35:14:b3:b2, ethertype IPv4 
(0x0800), length 98: 192.168.2.178 > 192.168.2.1: ICMP echo reply, id 
7289, seq 1, length 64
08:29:34.432646 74:d4:35:14:b3:b2 > 00:01:38:34:c7:8a, ethertype IPv4 
(0x0800), length 98: 192.168.2.1 > 192.168.2.178: ICMP echo request, id 
7289, seq 2, length 64



Packet mit einem Tag werden auch von eth1 verarbeitet. Ich habe bis 
jetzt keine Möglichkeit gefunden um getagged packet zu filtern.

Hier noch die Konfig:
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
state UP mode DEFAULT group default qlen 1000
    link/ether 74:d4:35:14:b3:b2 brd ff:ff:ff:ff:ff:ff
4: eth1.2@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
state UP mode DEFAULT group default
    link/ether 74:d4:35:14:b3:b2 brd ff:ff:ff:ff:ff:ff
5: eth1.3@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
state UP mode DEFAULT group default
    link/ether 74:d4:35:14:b3:b2 brd ff:ff:ff:ff:ff:ff


 cat /proc/net/vlan/config
VLAN Dev name    | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth1.2         | 2  | eth1
eth1.3         | 3  | eth1

von (prx) A. K. (prx)


Lesenswert?

Jörg Wunsch schrieb:
> Ist diese Sonderrolle von VLAN 1 eigentlich irgendwo festgeschrieben,
> oder hat sich das einfach nur eingebürgert?

IEEE 802.1Q definiert 1 als jene VLAN ID, auf die eingehende Frames ohne 
VLAN ID gemappt werden, wenn keine anderslautende Port-Konfiguration 
vorliegt. Weshalb das VLAN 1 in Switches das Default VLAN ist.

Da innerhalb vom Switch keine untagged Frames vorliegen kann man 
ausgehende Frames einer bestimmten ID je nach Konfiguration nur entweder 
tagged oder untagged versenden, aber nicht beides.

Prinzipiell sollte es zwar möglich sein, VLAN 1 tagged zu verwenden, 
indem man das Default VLAN sämtlicher Ports auf eine nicht explizit 
verwendete ID legt, aber ich würde das lieber lassen - damit fischt man 
nur nach Problemen.

Für epische Details zu Bridging mit VLANs siehe 
http://standards.ieee.org/getieee802/download/802.1Q-2005.pdf

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

A. K. schrieb:
> IEEE 802.1Q definiert 1 als jene VLAN ID, auf die eingehende Frames ohne
> VLAN ID gemappt werden, wenn keine anderslautende Port-Konfiguration
> vorliegt.

Danke, das erklärt es natürlich.

von Thorsten (Gast)


Lesenswert?

Im tcpdump des physikalischen Interface (eth1) werden die VLAN Pakete 
natürlich immer angezeigt, schliesslich kommen sie ja auf dem 
physikalischen Interface an bzw. werden über dieses versendet, wie man 
jedoch im tcpdump oben schön sieht mit dem VLAN Tag versehen und werden 
somit nicht an die höheren Netzwerk-Schichten (von eth1) weitergeleitet.
Beim tcpdump des VLAN Interfaces fehlt dann der entsprechende VLAN Tag 
und auch nur dort wird die ICMP-Reply ohne VLAN Tag vom Kernel 
generiert, der dann logischerweise mit VLAN Tag versehen auf eth1 
auftaucht.
Also alles so wie es sein soll.

Thorsten

von Peter II (Gast)


Lesenswert?

Thorsten schrieb:
> Also alles so wie es sein soll.

leider nicht, denn sonst würde ja dhcpd sie nicht sehen:

DHCPREQUEST for 192.168.2.178 from 00:01:38:34:c7:8a (WR-6640Sg) via
eth1.2
DHCPREQUEST for 192.168.2.178 from 00:01:38:34:c7:8a (WR-6640Sg) via
eth1

von Thorsten (Gast)


Lesenswert?

@Peter II:

Jein. Der dhcpd benutzt - wie auch tcpdump - sogenannte RAW Sockets und 
diese hängen sich auf tiefster Ebene im Netzwerkstack quasi direkt an 
die Netzwerkkarte. Selbst wenn Du alle Pakete mit der lokalen 
Linux-Firewall/iptables blockiern würdest, würde sie der dhcpd immer 
noch sehen.

Thorsten

von Peter II (Gast)


Lesenswert?

Thorsten schrieb:
> Jein. Der dhcpd benutzt - wie auch tcpdump - sogenannte RAW Sockets und
> diese hängen sich auf tiefster Ebene im Netzwerkstack quasi direkt an
> die Netzwerkkarte. Selbst wenn Du alle Pakete mit der lokalen
> Linux-Firewall/iptables blockiern würdest, würde sie der dhcpd immer
> noch sehen.

dann würde mir ja im dhcpd eine Option reichen, wo alles ignoriert wird 
was ein VLAN-Tag hat - das habe ich jetzt auch nicht gefunden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.