Noch als Ergänzung, der Server läuft mit Debian 12
# uname -a Linux webserver1-4gb-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64 GNU/LinuxROCKPro64 - Zwei LAN Schnittstellen / VLAN einrichten
-
Im Sommer 2018 hatte ich schon mal mit einer zweiten LAN Schnittstelle rumgespielt.
https://forum.frank-mankel.org/topic/201/rockpro64-firewall-mit-zwei-lan-schnittstellenDa ich aktuell mal wieder ein Projekt im Kopf habe, habe ich das mal mit Kamils aktuellem Debian Minimal Image nachgebaut. Aber, auch Stunden später bekam ich das Forwarding nicht zum Funktionieren. Warum? Das weiß ich nicht, ich hatte keine vernünftigen Fehlermeldungen gefunden. Für mich sieht es so aus, als wenn das Kernelmodul nicht korrekt, bzw. gar nicht, arbeitet.
Dann heute Morgen beim Kaffee der Lichtblitz! Damals hatte ich ein Ubuntu Image benutzt, also mache ich das jetzt auch mal. Und ich fange mal hinten an, es funktioniert einwandfrei, wie erwartet
Dann mal von vorne.
Hardware
- ROCKPro64
- USB-c -> LAN Adapter
Software
-
Bionic Minimal Link
rock64@rock64:~$ uname -a Linux rock64 4.4.197-1236-rockchip-ayufan-g30faab37e339 #1 SMP Tue Oct 22 11:35:10 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux
Schnittstellen
-
WAN (eingebaute LAN-Schnittstelle) eth0
-
LAN (USB-c to LAN Adapter) enx00e04c68026f
-
WLAN nicht benutzt!
rock64@rock64:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff inet 192.168.3.10/24 brd 192.168.3.255 scope global dynamic eth0 valid_lft 7054sec preferred_lft 7054sec inet6 2a02:908:1266:9690:6003:b0ff:fed6:dcb3/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 7173sec preferred_lft 573sec inet6 fe80::6003:b0ff:fed6:dcb3/64 scope link valid_lft forever preferred_lft forever 3: enx00e04c68026f: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 00:e0:4c:68:02:6f brd ff:ff:ff:ff:ff:ff 4: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state DORMANT group default qlen 1000 link/ether ac:83:f3:e6:1f:b2 brd ff:ff:ff:ff:ff:ff
Wie man die Namen der Schnittstellen vernünftig hinbekommt, hatte ich hier schon mal erklärt. Für diesen Test hier, lasse ich sie wie sie sind.
Als erstes müssen wir jetzt mal die zweite Schnittstelle konfigurieren.
Schnittstellen konfigurieren
eth0
DHCP 192.168.3.x
enx00e04c68026f
192.168.0.0/24
Gut, eth0 soll sich per DHCP einen Netzwerkadresse besorgen. Die enx.. bekommt eine private IP-Adresse verpasst. Da Ubuntu das mit Netplan macht, müssen wir jetzt das folgende File bearbeiten.
/etc/netplan/eth0.yaml
Das Ergebnis
network: version: 2 renderer: networkd ethernets: eth0: dhcp4: true enx00e04c68026f: dhcp4: no addresses: [192.168.0.1/24]
Netzwerk neustarten
Direkt mit
netplan apply
oder mit
netplan try
Danach sollte das Netzwerk so aussehen.
rock64@rock64:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff inet 192.168.3.10/24 brd 192.168.3.255 scope global dynamic eth0 valid_lft 6501sec preferred_lft 6501sec inet6 2a02:908:1266:9690:6003:b0ff:fed6:dcb3/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 7161sec preferred_lft 561sec inet6 fe80::6003:b0ff:fed6:dcb3/64 scope link valid_lft forever preferred_lft forever 3: enx00e04c68026f: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:e0:4c:68:02:6f brd ff:ff:ff:ff:ff:ff inet 192.168.0.1/24 brd 192.168.0.255 scope global enx00e04c68026f valid_lft forever preferred_lft forever inet6 fe80::2e0:4cff:fe68:26f/64 scope link valid_lft forever preferred_lft forever 4: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state DORMANT group default qlen 1000 link/ether ac:83:f3:e6:1f:b2 brd ff:ff:ff:ff:ff:ff
Konfiguration iptables
Damit ein Paket jetzt von der Schnittstelle enx.. nach eth0 kommt, brauchen wir ein paar Regeln, die das erledigen. Dazu benutzen wir iptables. Das ist im Ubuntu Image nicht enthalten, also installieren wir das eben.
apt install iptables
Danach erstellen wir ein Script /etc/firewall.sh
#!/bin/sh # This is a more complex setup, for a home firewall: # * One interface plug to the ISP conection (eth0). Using DHCP. # * One interface plug to the local LAN switch (eth1). Using 192.168.0.0/24. # * Traffic open from the LAN to the SSH in the firewall. # * Traffic open and translated, from the local LAN to internet. # * Traffic open from internet, to a local web server. # * Logging of dropped traffic, using a specific ''log level'' to configure a separate file in syslog/rsyslog. PATH='/sbin' ## Network INNET="192.168.0.0/24" OUTNET="192.168.3.0/24" INIF="enx00e04c68026f" OUTIF="eth0" ## INIT # Flush previous rules, delete chains and reset counters iptables -F iptables -X iptables -Z iptables -t nat -F # Default policies iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP echo -n '1' > /proc/sys/net/ipv4/ip_forward echo -n '0' > /proc/sys/net/ipv4/conf/all/accept_source_route echo -n '0' > /proc/sys/net/ipv4/conf/all/accept_redirects echo -n '1' > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo -n '1' > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses # Enable loopback traffic iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Enable statefull rules (after that, only need to allow NEW conections) iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Drop invalid state packets iptables -A INPUT -m conntrack --ctstate INVALID -j DROP iptables -A OUTPUT -m conntrack --ctstate INVALID -j DROP iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP ## INPUT # Incoming ssh from the LAN iptables -A INPUT -i $INIF -s ${INNET} -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT # TEST Please remove!! iptables -A INPUT -i $OUTIF -s ${OUTNET} -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT # Allow any connection from this host. iptables -A INPUT -i lo -j ACCEPT # Allow any connection from the local network. iptables -A INPUT -s ${INNET} -j ACCEPT # Allow all broadcast traffic. iptables -A INPUT -m pkttype --pkt-type broadcast -j ACCEPT ## OUTPUT # Enable al outgoing traffic to internet iptables -A OUTPUT -o $OUTIF -d ${OUTNET} -j ACCEPT # Enable access traffic, from the firewall to the LAN network iptables -A OUTPUT -o $INIF -d ${INNET} -j ACCEPT
Das starten wir nun mal zum Testen.
sudo chmod +x firewall.sh sudo ./firewall.sh
Es geht. Der Traffic an der Schnittstelle enx.. wird nach eth0 geroutet und maskiert.
IPTables Rules permanent machen
Nun kann man testen ob alles so funktioniert, wie es soll. Sollte dies nun alles problemlos funktionieren schreiben wir ein Script, so das das Firewall-Script automatisch beim Starten des ROCKPro64 ausgeführt wird.
Unter /etc/rc.local folgendes Script erstellen.
#!/bin/sh # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. set -e # Launch my netfilter rules if [ -e '/etc/firewall.sh' ] then /bin/sh '/etc/firewall.sh' fi exit 0
Rechte entsprechend anpassen.
sudo chmod +x rc.local
Danach den Rechner neu starten. Macht dies bitte ganz zum Schluss, wenn alles klappt.
DHCP-Server
Damit wir den PCs an der enx.. Schnittstellen, die Adressen nicht von Hand vergeben müssen, benötigen wir einen DHCP-Server.
sudo apt install isc-dhcp-server
Danach müssen wir den DHCP-Server konfigurieren.
/etc/dhcp/dhcpd.conf
Das hier der Datei hinzufügen.
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACESv4="enx00e04c68026f"; INTERFACESv6=""; #authoritative; # Sample /etc/dhcpd.conf # (add your comments here) option subnet-mask 255.255.255.0; option broadcast-address 192.168.0.255; option routers 192.168.0.1; option domain-name-servers 192.168.3.1, 1.1.1.1; subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.10 192.168.0.100; #range 192.168.1.10 192.168.1.20; }
Ich hatte ein paar Probleme mit der Konfig, weil da ; fehlten. Mit folgendem Befehl kann man die Konfig testen.
dhcpd -t -cf /etc/dhcp/dhcpd.conf
Starten
sudo service isc-dhcp-server start
Status
sudo service isc-dhcp-server status
Am Ende klappt alles so, wie ich es mir vorgestellt habe.
Speedtest
frank@debian:~$ iperf3 -s ----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Accepted connection from 192.168.3.10, port 41128 [ 5] local 192.168.3.213 port 5201 connected to 192.168.3.10 port 41130 [ ID] Interval Transfer Bitrate [ 5] 0.00-1.00 sec 61.9 MBytes 519 Mbits/sec [ 5] 1.00-2.00 sec 73.2 MBytes 614 Mbits/sec [ 5] 2.00-3.00 sec 73.1 MBytes 613 Mbits/sec [ 5] 3.00-4.00 sec 73.4 MBytes 615 Mbits/sec [ 5] 4.00-5.00 sec 73.2 MBytes 614 Mbits/sec [ 5] 5.00-6.00 sec 73.0 MBytes 613 Mbits/sec [ 5] 6.00-7.00 sec 73.3 MBytes 615 Mbits/sec [ 5] 7.00-8.00 sec 73.3 MBytes 615 Mbits/sec [ 5] 8.00-9.00 sec 73.7 MBytes 619 Mbits/sec [ 5] 9.00-10.00 sec 73.7 MBytes 618 Mbits/sec [ 5] 10.00-10.07 sec 5.82 MBytes 679 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate [ 5] 0.00-10.07 sec 728 MBytes 606 Mbits/sec receiver ----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Accepted connection from 192.168.3.10, port 41132 [ 5] local 192.168.3.213 port 5201 connected to 192.168.3.10 port 41134 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 94.7 MBytes 794 Mbits/sec 0 3.05 MBytes [ 5] 1.00-2.00 sec 97.5 MBytes 818 Mbits/sec 0 3.05 MBytes [ 5] 2.00-3.00 sec 97.5 MBytes 818 Mbits/sec 0 3.05 MBytes [ 5] 3.00-4.00 sec 96.2 MBytes 808 Mbits/sec 0 3.05 MBytes [ 5] 4.00-5.00 sec 96.2 MBytes 807 Mbits/sec 0 3.05 MBytes [ 5] 5.00-6.00 sec 97.5 MBytes 818 Mbits/sec 0 3.05 MBytes [ 5] 6.00-7.00 sec 96.2 MBytes 807 Mbits/sec 0 3.05 MBytes [ 5] 7.00-8.00 sec 96.2 MBytes 807 Mbits/sec 0 3.05 MBytes [ 5] 8.00-9.00 sec 97.5 MBytes 818 Mbits/sec 0 3.05 MBytes [ 5] 9.00-10.00 sec 97.5 MBytes 818 Mbits/sec 0 3.05 MBytes [ 5] 10.00-10.04 sec 3.75 MBytes 803 Mbits/sec 0 3.05 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.04 sec 971 MBytes 811 Mbits/sec 0 sender ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
Es ist nicht voll die Bandbreite der Gigabit Schnittstelle. Ob das jetzt normal ist, kann ich nicht sagen, ich mache dazu aber noch ein paar Tests.
Die Quelle des Scriptes habe ich nicht mehr vorliegen. Möchte mich aber hier dafür bedanken! Ich habe es etwas angepasst, damit es einfacher ist es zu administrieren. Bitte auf diese zwei Zeilen achten!
# TEST Please remove!! iptables -A INPUT -i $OUTIF -s ${OUTNET} -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
Das habe ich mir eingebaut, um über das WAN auf den ROCKPro64 zu kommen. Das ist, je nach Anwendung, nicht unbedingt sinnvoll. Also aufpassen und ggf. auskommentieren!
-
So ganz langsam, komme ich bei meinem ROCKPro64 weiter Was habe ich im Hinterkopf? Ich würde gerne einen Router / Firewall damit bauen, den ich an Stelle meiner pfSense hängen kann. Da ich diese im Prinzip nur zur Trennung meiner Netze benutze und den Zugriff von außen entsprechend blocke, sollte das auch mit meinem Wissen machbar sein
Oben, im ersten Beitrag seht ihr, was ich mit den beiden Schnittstellen anstelle. Hier noch mal was ich vorhabe.
Schnittstellen
- WAN (eingebaute LAN-Schnittstelle) eth0
- LAN (USB-c to LAN Adapter) enx00e04c68026f
- WLAN nicht benutzt!
Die WAN Schnittstelle stellt die Internetverbindung her. In meinem Fall, hänge ich damit an meiner Fritzbox und beziehe mittels DHCP die Daten.
Die LAN Schnittstelle, soll mehrere Netzwerke zur Verfügung stellen. Zum Üben, fangen wir mit zwei Netzwerken an. Da wir am ROCKPro64 ja nicht viele Netzwerkschnittstellen haben, möchte ich das gerne mittels VLAN realisieren. Dazu benutzt man dann später einen VLAN fähigen Switch. Dieser trennt dann die Netze wieder, die vorher zusammen auf der LAN Schnittstelle übertragen wurden.
Als Switch liegt hier ein Netgear GS108E rum. Ok, genug der Erklärung, dann mal ran an die VLAN Lösung
Software
rock64@rock64:~$ uname -a Linux rock64 4.4.202-1237-rockchip-ayufan-gfd4492386213 #1 SMP Sat Nov 23 13:55:47 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux
Und das brauchen wir
apt install vlanDas Paket vlan wird nicht benötigt. Danke Nico für den Tipp! Das Paket
vlan/bionic-updates,now 1.9-3.2ubuntu6 arm64 [installed] user mode programs to enable VLANs on your ethernet devices
Wenn man folgende Dateien braucht, ist das sinnvoll.
https://packages.debian.org/de/stretch/amd64/vlan/filelistIch benötige das so aber nicht. Also, habe ich das Paket wieder deinstalliert. Somit ist die ganze VLan Geschichte im Kernel drin, dafür braucht es kein Kernelmodul oder was Anderes.
Netzwerk Konfiguration
/etc/netplan/eth0.yaml
network: version: 2 renderer: networkd ethernets: eth0: dhcp4: true enx00e04c68026f: {} vlans: eth1.100: id: 100 link: enx00e04c68026f addresses: [192.168.1.1/24] eth1.200: id: 200 link: enx00e04c68026f addresses: [192.168.2.1/24]
Hier sieht man, das ich auf eth0 DHCP setze und auf die Schnittstelle enx00e04c68026f zwei VLANs mit ID 100 und ID 200. Wenn man weiß wie es geht, kein Hexenwerk. Das Resultat sieht so aus.
rock64@rock64:/etc$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff inet 192.168.3.10/24 brd 192.168.3.255 scope global dynamic eth0 valid_lft 3909sec preferred_lft 3909sec inet6 2a02:908:1266:9690:6003:b0ff:fed6:dcb3/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 7158sec preferred_lft 558sec inet6 fe80::6003:b0ff:fed6:dcb3/64 scope link valid_lft forever preferred_lft forever 3: enx00e04c68026f: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:e0:4c:68:02:6f brd ff:ff:ff:ff:ff:ff inet6 fe80::2e0:4cff:fe68:26f/64 scope link valid_lft forever preferred_lft forever 4: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state DORMANT group default qlen 1000 link/ether ac:83:f3:e6:1f:b2 brd ff:ff:ff:ff:ff:ff 5: eth1.200@enx00e04c68026f: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:e0:4c:68:02:6f brd ff:ff:ff:ff:ff:ff inet 192.168.2.1/24 brd 192.168.2.255 scope global eth1.200 valid_lft forever preferred_lft forever inet6 fe80::2e0:4cff:fe68:26f/64 scope link valid_lft forever preferred_lft forever 6: eth1.100@enx00e04c68026f: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:e0:4c:68:02:6f brd ff:ff:ff:ff:ff:ff inet 192.168.1.1/24 brd 192.168.1.255 scope global eth1.100 valid_lft forever preferred_lft forever inet6 fe80::2e0:4cff:fe68:26f/64 scope link valid_lft forever preferred_lft forever
Sollte so weit klar sein!? Ich habe dafür etwas Zeit gebraucht um das zu verstehen. Aber dafür macht man das ja
IPTables
Der nächste Schritt wäre dann, das Firewall Script anzupassen. Hier mal direkt das Ergebnis.
#!/bin/sh # This is a more complex setup, for a home firewall: # * One interface plug to the ISP conection (eth0). Using DHCP. # * One interface plug to the local LAN switch (eth1). Using 192.168.0.0/24. # * Traffic open from the LAN to the SSH in the firewall. # * Traffic open and translated, from the local LAN to internet. # * Traffic open from internet, to a local web server. # * Logging of dropped traffic, using a specific ''log level'' to configure a separate file in syslog/rsyslog. PATH='/sbin' ## Network INNET="192.168.1.0/24" IN_NET2="192.168.2.0/24" OUTNET="192.168.3.0/24" INIF="eth1.100" IN_IF2="eth1.200" OUTIF="eth0" ## INIT # Flush previous rules, delete chains and reset counters iptables -F iptables -X iptables -Z iptables -t nat -F # Default policies iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP echo -n '1' > /proc/sys/net/ipv4/ip_forward echo -n '0' > /proc/sys/net/ipv4/conf/all/accept_source_route echo -n '0' > /proc/sys/net/ipv4/conf/all/accept_redirects echo -n '1' > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo -n '1' > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses # Enable loopback traffic iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Enable statefull rules (after that, only need to allow NEW conections) iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Drop invalid state packets iptables -A INPUT -m conntrack --ctstate INVALID -j DROP iptables -A OUTPUT -m conntrack --ctstate INVALID -j DROP iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP ## INPUT # Incoming ssh from the LAN iptables -A INPUT -i $INIF -s ${INNET} -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT # TEST Please remove!! iptables -A INPUT -i $OUTIF -s ${OUTNET} -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT # Allow any connection from this host. iptables -A INPUT -i lo -j ACCEPT # Allow any connection from the local network. iptables -A INPUT -s ${INNET} -j ACCEPT iptables -A INPUT -s ${IN_NET2} -j ACCEPT # Allow all broadcast traffic. iptables -A INPUT -m pkttype --pkt-type broadcast -j ACCEPT ## OUTPUT # Enable al outgoing traffic to internet iptables -A OUTPUT -o $OUTIF -d ${OUTNET} -j ACCEPT # Enable access traffic, from the firewall to the LAN network iptables -A OUTPUT -o $INIF -d ${INNET} -j ACCEPT iptables -A OUTPUT -o $IN_IF2 -d ${IN_NET2} -j ACCEPT ## FORWARD # We have dynamic IP (DHCP), so we've to masquerade iptables -t nat -A POSTROUTING -o $OUTIF -j MASQUERADE iptables -A FORWARD -o $OUTIF -i $INIF -s ${INNET} -m conntrack --ctstate NEW -j ACCEPT iptables -A FORWARD -o $OUTIF -i $IN_IF2 -s ${IN_NET2} -m conntrack --ctstate NEW -j ACCEPT # Redirect HTTP (tcp/80) to the web server (192.168.0.2) #iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \ # -j DNAT --to-destination 192.168.0.2:80 # #iptables -A FORWARD -i eth0 -p tcp --dport 80 \ # -o eth1 -d 192.168.0.2 \ # -m conntrack --ctstate NEW -j ACCEPT ## LOGGING iptables -A INPUT -j LOG --log-level 4 --log-prefix '[FW INPUT]: ' iptables -A OUTPUT -j LOG --log-level 4 --log-prefix '[FW OUTPUT]: ' iptables -A FORWARD -j LOG --log-level 4 --log-prefix '[FW FORWARD ]: '
Das Script vom ersten Beitrag habe ich jetzt nur um das zweite Netzwerk erweitert. Jetzt noch den DHCP-Server.
DHCP-Server
/etc/dhcp/dhcpd.conf
Die Ergänzung am Ende der Datei, die ich vorgenommen habe.
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACESv4="enx00e04c68026f"; INTERFACESv6=""; #authoritative; # Sample /etc/dhcpd.conf # (add your comments here) #option subnet-mask 255.255.255.0; #option broadcast-address 192.168.1.255; #option routers 192.168.1.1; #option domain-name-servers 192.168.3.1, 1.1.1.1; subnet 192.168.1.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.1; option domain-name-servers 192.168.3.1, 1.1.1.1; range 192.168.1.10 192.168.1.100; #range 192.168.1.10 192.168.1.20; } # Sample /etc/dhcpd.conf # (add your comments here) #option subnet-mask 255.255.255.0; #option broadcast-address 192.168.2.255; #option routers 192.168.1.1; #option domain-name-servers 192.168.3.1, 1.1.1.1; subnet 192.168.2.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option broadcast-address 192.168.2.255; option routers 192.168.2.1; option domain-name-servers 192.168.3.1, 1.1.1.1; range 192.168.2.10 192.168.2.100; #range 192.168.1.10 192.168.1.20; }
Das wäre alles auf dem ROCKPro64, einmal durchstarten und es sollte alles passen.
NETGEAR
VLAN / 802.1Q
- Port 1 Uplink
- Port 2 VLAN ID 100
- Port 3 VLAN ID 200
Am Uplink kommt der ROCKPro64 dran, an den beiden VLANs habe ich jeweils ein Notebook dran gehangen. Wenn ich das Notebook an ID 100 hänge und mir mittels DHCP eine Adresse hole, bekomme ich eine Adresse aus dem IP-Bereich
range 192.168.1.10 192.168.1.100;
Wenn ich das Notebook an ID 200 hänge, bekomme ich
range 192.168.2.10 192.168.2.100;
An beiden Notebooks komme ich ins Internet. Die Netze sind am Switch getrennt. Heißt, ich komme nicht auf das andere Notebook drauf. Das sollte so weit ich das überblicke ausreichend sein. Wenn nicht, dann bitte um ich um einen entsprechenden Kommentar.
ToDo
- Anpassung an ipv6
Anmerkung
Am Anfang wollte ich mich an folgende Anleitung halten
https://wiki.debian.org/NetworkConfiguration#Howto_use_vlan_.28dot1q.2C_802.1q.2C_trunk.29_.28Etch.2C_Lenny.29Das scheint etwas veraltet zu sein, das Modul 8021q ist nicht vorhanden. Was nun? Lange gesucht....und nichts gefunden. Das scheint so nicht gebraucht zu werden. Hmm? Direkt im Kernel vorhanden? Über Aufklärung würde ich mich freuen.
-
Das geht auch ganz gut mit Kamils Image. Wenn man ein paar Dinge beachtet.
Interface Namen
Wie man die Namen der Schnittstellen vernünftig hinbekommt, hatte ich hier schon mal erklärt. Ohne diese Änderung bekomme ich keine VLan Interfaces
Vorher
root@rockpro64:/etc/network/interfaces.d# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff inet 192.168.3.5/24 brd 192.168.3.255 scope global dynamic eth0 valid_lft 6235sec preferred_lft 6235sec inet6 fe80::6003:b0ff:fed6:dcb3/64 scope link valid_lft forever preferred_lft forever 3: enx00e04c68026f: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:e0:4c:68:02:6f brd ff:ff:ff:ff:ff:ff inet6 fe80::d14d:4937:6f2a:2c4c/64 scope link noprefixroute valid_lft forever preferred_lft forever 4: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DORMANT group default qlen 1000 link/ether 52:9c:c8:8f:c2:3b brd ff:ff:ff:ff:ff:ff
Nach der Änderung und dem Reboot sieht das dann so aus.
root@rockpro64:/etc/network/interfaces.d# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff inet 192.168.3.5/24 brd 192.168.3.255 scope global dynamic eth0 valid_lft 6012sec preferred_lft 6012sec inet6 fe80::6003:b0ff:fed6:dcb3/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:e0:4c:68:02:6f brd ff:ff:ff:ff:ff:ff inet6 fe80::bdcd:2144:4621:39b9/64 scope link noprefixroute valid_lft forever preferred_lft forever 4: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DORMANT group default qlen 1000 link/ether d6:93:e6:6d:59:fb brd ff:ff:ff:ff:ff:ff
Netzwerk
/etc/network/interfaces.d/eth1
auto eth1.100 iface eth1.100 inet static address 192.168.1.1/24 vlan-raw-device eth1 auto eth1.200 iface eth1.200 inet static address 192.168.2.1/24 vlan-raw-device eth1
Hier lege ich zwei VLans an, einmal eth1.100 und einmal eth1.200
Ergebnis
root@rockpro64:/etc/network/interfaces.d# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff inet 192.168.3.5/24 brd 192.168.3.255 scope global dynamic eth0 valid_lft 6012sec preferred_lft 6012sec inet6 fe80::6003:b0ff:fed6:dcb3/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:e0:4c:68:02:6f brd ff:ff:ff:ff:ff:ff inet6 fe80::bdcd:2144:4621:39b9/64 scope link noprefixroute valid_lft forever preferred_lft forever 4: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DORMANT group default qlen 1000 link/ether d6:93:e6:6d:59:fb brd ff:ff:ff:ff:ff:ff 5: eth1.100@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:e0:4c:68:02:6f brd ff:ff:ff:ff:ff:ff inet 192.168.1.1/24 brd 192.168.1.255 scope global eth1.100 valid_lft forever preferred_lft forever inet6 fe80::2e0:4cff:fe68:26f/64 scope link valid_lft forever preferred_lft forever 6: eth1.200@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:e0:4c:68:02:6f brd ff:ff:ff:ff:ff:ff inet 192.168.2.1/24 brd 192.168.2.255 scope global eth1.200 valid_lft forever preferred_lft forever inet6 fe80::2e0:4cff:fe68:26f/64 scope link valid_lft forever preferred_lft forever
Den Rest könnt ihr den oberen beiden Beiträgen entnehmen.