Netzwerksegmentierung ist auch im Heimnetzwerk ein großes Thema. Gerade in Zeiten der zunehmenden Vernetzung von Geräten, die bekannterweise Sicherheitsprobleme haben (wie z.B. IP-Kameras). Diese Geräte möchte man von der wichtigen Infrastruktur abschotten.
VLANs sind hier eine wichtige Komponente.
In unserer Mailingliste habe ich einige Fragen zum Setup vom IEEE 802.1q-VLANs und zu Erfahrungen mit einem speziellen, sehr günstigen Router von Ubiquiti gestellt.
Die Konfiguration ist mir im stillen Kämmerlein nicht auf Anhieb geglückt.
Die offenen Fragen konnte ich jedoch direkt auf dem Aprilstammtisch klären. Ich habe einfach die Hardware mit in die Kneipe genommen und wir haben diese gemeinsam erfolgreich konfiguriert. Super.
Hier ein Techblog zu den Details der Konfiguration und ein paar weiteren Ergebnisse.
Ziel war die Erstellung einer lauffähigen IEEE 802.1q-VLAN-Konfiguration mit einem Zyxel GS1200-8 managed Switch und einem Ubiquity Edge-Router X. Im VLAN20 sollten die weniger vertrauenswürdigen Geräte, wie IP-Kameras, stehen. Im VLAN10 stehen eher vertrauenswürdige Geräte. Die VLANs sollen über Firewall Regeln miteinander sprechen können. Das VLAN20 sollte keinen direkten Zugriff ins Internet haben.
Hier das Komponentendiagramm (plantuml-Quellcode).
Der Zyxel GS1200-8 Switch kann per Webinterface konfiguriert werden. Im Auslieferungszustand besitzt er die IP Adresse 192.168.1.3. Im Switch sind die VLANs wie folgt einzustellen.
Leider kann man die Konfiguration bei diesem Switch nur als Binary abspeichern. Auch müssen dieselben VLAN-IDs an mehreren Stellen eingegeben werden, was für den Anfänger etwas verwirrend ist. Ist er aber einmal konfiguriert, tut er was er soll.
Der EdgeRouter X ist für wenig Geld zu haben und liefert eine klicky-bunty Web-Schnittstelle. Er kann jedoch auch über die Kommandozeile, in einer eigenen Sprache, konfiguriert werden. Unter der Haube steckt ein Linux.
Es können Netze, DHCP-Server, Firewalls etc. konfiguriert werden. Trotz der Weboberfläche kann die Konfiguration schnell knifflig werden. Das liegt jedoch am Thema bzw. an der Vorbildung :-).
Sehr schön ist, dass man die Konfiguration als Tarball exportieren kann. Packt man diese aus, so erhält man sehr, sehr wenige ASCII-Dateien, die man schön versionieren kann. Nur so konnte ich beispielsweise erkennen, welche Änderungen ein Konfigurationswizard im Detail gemacht hat.
Anbei die Konfiguration des oben beschriebenen Anwendungsfalls.
firewall {
all-ping enable
broadcast-ping disable
ipv6-receive-redirects disable
ipv6-src-route disable
ip-src-route disable
log-martians enable
name VLAN20_IN {
default-action drop
description "Filter VLAN20"
rule 1 {
action accept
description ALLOW_ICMP
log disable
protocol icmp
}
rule 2 {
action accept
description ALLOW_SSH_TO_VLAN10
destination {
address 192.168.10.0/24
port 22
}
log disable
protocol tcp
source {
address 192.168.20.0/24
}
}
}
name VLAN20_LOCAL {
default-action drop
description ""
rule 1 {
action accept
description ALLOW_ICMP
log disable
protocol icmp
}
rule 2 {
action accept
description ALLOW_DNS
destination {
port 53
}
log disable
protocol tcp_udp
}
}
name WAN_IN {
default-action drop
description "WAN to internal"
rule 10 {
action accept
description "Allow established/related"
state {
established enable
related enable
}
}
rule 20 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
}
name WAN_LOCAL {
default-action drop
description "WAN to router"
rule 10 {
action accept
description "Allow established/related"
state {
established enable
related enable
}
}
rule 20 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
}
receive-redirects disable
send-redirects enable
source-validation disable
syn-cookies enable
}
interfaces {
ethernet eth0 {
address 192.168.11.1/24
description "Local 2"
duplex auto
speed auto
}
ethernet eth1 {
address dhcp
description Internet
duplex auto
firewall {
in {
name WAN_IN
}
local {
name WAN_LOCAL
}
}
speed auto
}
ethernet eth2 {
description Local
duplex auto
speed auto
vif 10 {
address 192.168.10.1/24
description VLAN10
mtu 1500
}
vif 20 {
address 192.168.20.1/24
description VLAN20
firewall {
in {
name VLAN20_IN
}
local {
name VLAN20_LOCAL
}
}
mtu 1500
}
}
ethernet eth3 {
description Local
duplex auto
speed auto
}
ethernet eth4 {
description Local
duplex auto
poe {
output off
}
speed auto
}
loopback lo {
}
switch switch0 {
address 192.168.2.1/24
description Local
mtu 1500
switch-port {
interface eth3 {
}
interface eth4 {
}
vlan-aware disable
}
}
}
service {
dhcp-server {
disabled false
hostfile-update disable
shared-network-name LAN2 {
authoritative disable
subnet 192.168.2.0/24 {
default-router 192.168.2.1
dns-server 192.168.2.1
lease 86400
start 192.168.2.21 {
stop 192.168.2.240
}
}
}
shared-network-name VLAN10 {
authoritative disable
subnet 192.168.10.0/24 {
default-router 192.168.10.1
dns-server 192.168.10.1
lease 86400
start 192.168.10.20 {
stop 192.168.10.50
}
}
}
shared-network-name VLAN20 {
authoritative disable
subnet 192.168.20.0/24 {
default-router 192.168.20.1
dns-server 192.168.20.1
lease 86400
start 192.168.20.20 {
stop 192.168.20.140
}
}
}
static-arp disable
use-dnsmasq disable
}
dns {
forwarding {
cache-size 150
listen-on eth0
listen-on switch0
listen-on eth2.10
listen-on eth2.20
}
}
gui {
http-port 80
https-port 443
older-ciphers enable
}
nat {
rule 5010 {
outbound-interface eth1
type masquerade
}
}
ssh {
port 22
protocol-version v2
}
}
system {
host-name ubnt
login {
user ubnt {
authentication {
encrypted-password $1$geheim$geheim.
}
level admin
}
}
ntp {
server 1.ubnt.pool.ntp.org {
}
server 2.ubnt.pool.ntp.org {
}
}
syslog {
global {
facility all {
level notice
}
facility protocols {
level debug
}
}
}
time-zone UTC
}
/* Warning: Do not remove the following line. */
/* === vyatta-config-version: "config-management@1:conntrack@1:cron@1:dhcp-relay@1:dhcp-server@4:
firewall@5:ipsec@5:nat@3:qos@1:quagga@2:suspend@1:system@4:ubnt-pptp@1:ubnt-udapi-server@1:
ubnt-unms@1:ubnt-util@1:vrrp@1:webgui@1:webproxy@1:zone-policy@1" === */
/* Release version: v1.10.9.5166958.190213.1952 */
Ich habe Benchmarktests des Setups mit dem Programm iperf3 durchgeführt. Rechner im selben VLAN am Zyxel Switch lieferten erwartungsgemäß eine Bandbreite vom 940 Mbits/sec. Befinden sich zwei Rechner im selben LAN (switch0, eth3 und eth4) direkt am EdgeRouter X, so erhält man ebenfalls eine Bandbreite von 941 Mbits/sec.
Muss der EdgerRoute-X zwischen IEEE 802.1q VLANs routen (hier VLAN10 und VLAN20), so bricht die Übertragungsgeschwindigkeit auf 168 Mbits/sec ein.
Mit beiden Geräten (EdgeRouter X und GS-1200-8) kann man für wenig Geld VLANs und mehr aufsetzen. Natürlich ist die Bandbreite im EdgeRouter X beschränkt. Es handelt sich ja um ein Einsteigermodell. Man muss für sich selbst entscheiden, ob diese Bandbreite für den Anwendungsfall hinreichend ist. Man hat jedenfalls relativ schnell eine Konfiguration stehen.
Eine echte Alternative wäre es aber auch mit diesen Erkenntnissen ein Standard Linux oder OpenBSD aufzusetzen. Hier hätte man noch mehr Freiheitsgrade und befände sich in heimischen Gefilden.