Ich benutze ja schon länger für verschiedene Einsatzzwecke USB3-to-LAN-Schnittstellen. Einen dieser Adapter, habe ich schon jahrelang an meiner IPFire (IntelNUC).
Nun wollte ich mal versuchen, wie das so aussieht am ROCKPro64. Wird sie erkannt, läuft sie, was für Probleme tauchen auf usw. Ich habe mich so ziemlich an folgenden Beitrag gehalten https://forum.frank-mankel.org/topic/120/ubuntu-bionic-ip-adresse-ändern
Also, was haben wir vor? Zwei Schnittstellen, eth0 holt sich per DHCP die Informationen aus meinem LAN. Die Schnittstelle enx000acd26e2c8 bildet ein LAN, das ganze soll durch iptables geschützt sein. Kein Zugriff von außen!
Hardware
- ROCKPro64 v2.1 2GB RAM
- USB-to-LAN DeLock 62121
Software
rock64@rockpro64v2_1:/etc$ uname -a
Linux rockpro64v2_1 4.4.132-1077-rockchip-ayufan-gbaf35a9343cb #1 SMP Mon Jul 30 14:06:57 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux
Schnittstellen
eth0
enx000acd26e2c8
Ähm, kleine Anmerkung: Geht das nicht einheitlich, also eth0,eth1 usw. Ich glaube das ist veraltet, das neue ist dann dieses enx000acd26e2c8. Also, einheitlich wäre mir lieber!?!
Hier die Lösung.
Konfiguration netplan
/etc/netplan/eth0.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
enx000acd26e2c8:
dhcp4: no
addresses: [192.168.0.1/24]
Netzwerk neustarten
Direkt mit
netplan apply
oder mit
netplan try
netplan try ermöglicht, das man eine falsche Konfiguration automatisch wieder zurücksetzen lassen kann.
Nach dem Neustart sieht das dann so aus.
rock64@rockpro64v2_1:~$ 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 1e:0e:99:52:8e:40 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.17/24 brd 192.168.3.255 scope global dynamic eth0
valid_lft 2224sec preferred_lft 2224sec
inet6 fe80::1c0e:99ff:fe52:8e40/64 scope link
valid_lft forever preferred_lft forever
3: enx000acd26e2c8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0a:cd:26:e2:c8 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.1/24 brd 192.168.0.255 scope global enx000acd26e2c8
valid_lft forever preferred_lft forever
inet6 fe80::20a:cdff:fe26:e2c8/64 scope link
valid_lft forever preferred_lft forever
Konfiguration iptables
Dazu 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'
## 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 enx000acd26e2c8 -s 192.168.0.0/24 \
-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 192.168.0.0/24 -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 eth0 -d 192.16.3.0/0 -j ACCEPT
# Enable access traffic, from the firewall to the LAN network
iptables -A OUTPUT -o enx000acd26e2c8 -d 192.168.0.0/24 -j ACCEPT
## FORWARD
# We have dynamic IP (DHCP), so we've to masquerade
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -o eth0 -i enx000acd26e2c8 -s 192.168.0.0/24 \
-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 starten wir nun mal zum Testen.
sudo chmod +x firewall.sh
sudo ./firewall.sh
Achtung! Die offene Konsole bleibt bestehen, aber einmal den ROCKPro64 neustarten und die Konsole ist weg. Dann hilft nur noch die serielle Schnittstelle, oder ein angeschlossenes Notebook am LAN. Wenn denn alles funktioniert Also Konsole nicht zumachen!!
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.
Sollen die Rechner im LAN (enx000acd26e2c8) automatisch eine IP-Adresse bekommen, so brauchen wir einen DHCP-Server, der diese an die entsprechenden Teilnehmer verteilt.
DHCP-Server
Nach einer kurzen Testphase, habe ich begriffen, das man DNSMASQ nur mit tiefgreifenden Änderungen am Grundsystem von Ubuntu 18.04.1 benutzen kann. Da scheint es doch viele Änderungen gegeben zu haben. Da ich zu viele Änderungen am Grundsystem nicht mag, muss ich mich wohl oder übel mit den neuen Sachen vertraut machen.
Nach Recherche im Netz habe ich den hoffentlich richtigen DHCP-Server gefunden.
Installation
sudo apt-get install isc-dhcp-server
Konfiguration /etc/dhcp/dhcpd.conf
Der DHCP-Server stellt auf der enx000acd26e2c8-Schnittstelle IP-Adressen zur Verfügung. Die 3.1 ist mein DNS-Server im lokalen Netz.(eth0)
# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server)
# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf
# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPDv4_PID=/var/run/dhcpd.pid
#DHCPDv6_PID=/var/run/dhcpd6.pid
# Additional options to start dhcpd with.
# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="enx000acd26e2c8";
INTERFACESv6="";
#authoritative;
# Sample /etc/dhcpd.conf
# (add your comments here)
default-lease-time 600;
max-lease-time 7200;
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;
option domain-name "mydomain.example";
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
Konsole
rock64@rockpro64v2_1:~$ iperf3 -c 192.168.3.213
Connecting to host 192.168.3.213, port 5201
[ 4] local 192.168.3.17 port 45344 connected to 192.168.3.213 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.01 sec 108 MBytes 890 Mbits/sec 0 5.65 MBytes
[ 4] 1.01-2.00 sec 114 MBytes 964 Mbits/sec 0 5.65 MBytes
[ 4] 2.00-3.00 sec 112 MBytes 942 Mbits/sec 0 5.65 MBytes
[ 4] 3.00-4.00 sec 112 MBytes 940 Mbits/sec 11 2.82 MBytes
[ 4] 4.00-5.01 sec 112 MBytes 943 Mbits/sec 0 2.82 MBytes
[ 4] 5.01-6.00 sec 111 MBytes 937 Mbits/sec 11 1.41 MBytes
[ 4] 6.00-7.00 sec 112 MBytes 941 Mbits/sec 11 723 KBytes
[ 4] 7.00-8.00 sec 112 MBytes 943 Mbits/sec 11 363 KBytes
[ 4] 8.00-9.01 sec 112 MBytes 943 Mbits/sec 0 416 KBytes
[ 4] 9.01-10.00 sec 111 MBytes 936 Mbits/sec 11 300 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 1.09 GBytes 938 Mbits/sec 55 sender
[ 4] 0.00-10.00 sec 1.09 GBytes 935 Mbits/sec receiver
iperf Done.
rock64@rockpro64v2_1:~$ iperf3 -c 192.168.3.213 -R
Connecting to host 192.168.3.213, port 5201
Reverse mode, remote host 192.168.3.213 is sending
[ 4] local 192.168.3.17 port 45348 connected to 192.168.3.213 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 110 MBytes 922 Mbits/sec
[ 4] 1.00-2.00 sec 112 MBytes 941 Mbits/sec
[ 4] 2.00-3.00 sec 112 MBytes 939 Mbits/sec
[ 4] 3.00-4.00 sec 111 MBytes 932 Mbits/sec
[ 4] 4.00-5.00 sec 112 MBytes 941 Mbits/sec
[ 4] 5.00-6.00 sec 112 MBytes 941 Mbits/sec
[ 4] 6.00-7.00 sec 112 MBytes 941 Mbits/sec
[ 4] 7.00-8.00 sec 112 MBytes 941 Mbits/sec
[ 4] 8.00-9.00 sec 112 MBytes 942 Mbits/sec
[ 4] 9.00-10.00 sec 112 MBytes 941 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 1.09 GBytes 939 Mbits/sec 0 sender
[ 4] 0.00-10.00 sec 1.09 GBytes 938 Mbits/sec receiver
iperf Done.
LAN Notebook
frank@thinkpad:~$ iperf3 -c 192.168.3.213
Connecting to host 192.168.3.213, port 5201
[ 4] local 192.168.0.10 port 38566 connected to 192.168.3.213 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 58.5 MBytes 491 Mbits/sec 91 1.19 MBytes
[ 4] 1.00-2.00 sec 57.9 MBytes 485 Mbits/sec 0 1.32 MBytes
[ 4] 2.00-3.00 sec 57.7 MBytes 484 Mbits/sec 0 1.42 MBytes
[ 4] 3.00-4.00 sec 57.8 MBytes 485 Mbits/sec 1 1.05 MBytes
[ 4] 4.00-5.00 sec 58.0 MBytes 487 Mbits/sec 0 1.13 MBytes
[ 4] 5.00-6.00 sec 57.9 MBytes 485 Mbits/sec 0 1.18 MBytes
[ 4] 6.00-7.00 sec 58.0 MBytes 486 Mbits/sec 0 1.22 MBytes
[ 4] 7.00-8.00 sec 58.0 MBytes 486 Mbits/sec 0 1.24 MBytes
[ 4] 8.00-9.00 sec 57.9 MBytes 485 Mbits/sec 0 1.25 MBytes
[ 4] 9.00-10.00 sec 57.8 MBytes 485 Mbits/sec 0 1.26 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 579 MBytes 486 Mbits/sec 92 sender
[ 4] 0.00-10.00 sec 577 MBytes 484 Mbits/sec receiver
iperf Done.
frank@thinkpad:~$ iperf3 -c 192.168.3.213 -R
Connecting to host 192.168.3.213, port 5201
Reverse mode, remote host 192.168.3.213 is sending
[ 4] local 192.168.0.10 port 38570 connected to 192.168.3.213 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 73.4 MBytes 615 Mbits/sec
[ 4] 1.00-2.00 sec 91.9 MBytes 771 Mbits/sec
[ 4] 2.00-3.00 sec 90.6 MBytes 760 Mbits/sec
[ 4] 3.00-4.00 sec 91.5 MBytes 767 Mbits/sec
[ 4] 4.00-5.00 sec 90.6 MBytes 760 Mbits/sec
[ 4] 5.00-6.00 sec 91.5 MBytes 767 Mbits/sec
[ 4] 6.00-7.00 sec 90.5 MBytes 759 Mbits/sec
[ 4] 7.00-8.00 sec 91.7 MBytes 769 Mbits/sec
[ 4] 8.00-9.00 sec 91.7 MBytes 769 Mbits/sec
[ 4] 9.00-10.00 sec 91.2 MBytes 765 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 896 MBytes 752 Mbits/sec 0 sender
[ 4] 0.00-10.00 sec 895 MBytes 751 Mbits/sec receiver
iperf Done.
Fazit
War mal wieder ein hartes Stück Arbeit. Und an alle Experten, die das hier lesen, wenn was falsch ist freue ich mich über konstruktive Kritik.
Und für Einsteiger, bitte nutzt das so nicht an einer Internetleitung. Damit der Server sicher ist benötigt es noch viel mehr Arbeit. Dazu gibt es viele Hilfeseiten im Netz.
Links
https://linoxide.com/linux-how-to/install-configure-dhcp-ubuntu/