[[Vorlage(Getestet, )]] {{{#!vorlage Wissen [:Editor: Einen Editor öffnen] [:Terminal:Ein Terminal öffnen] [:sudo: root-Rechte] [:Pakete_installieren:Installation von Programmen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/networksettings.png, 80, left)]] Dieser Artikel beschreibt die Einrichtung einer [:Internetverbindungsfreigabe:] über die Datei '''/etc/network/interfaces'''. Das Basissystem bringt bereits alle erforderlichen Programme mit, um eine Verbindung herzustellen und die Internetverbindung zu teilen. Zugriff auf freigegebene Verzeichnisse aller Rechner im Verbund erlangt man einfach mittels [:Heimnetzwerk#net-usershare-Samba-fuer-jedermann:Samba User-Shares]. Ebenso ist es möglich, eine bestehende UMTS/GPRS- oder Bluetooth-Verbindung auf die LAN-Schnittstelle oder ein WLAN-Ad-Hoc-Netz weiterzuleiten und anderen zur Verfügung zu stellen. {{{#!vorlage Hinweis Wenn der [:Network-Manager:] installiert ist, sollte die Konfiguration über diesen erfolgen, um Konflikte zu vermeiden. }}} = Grundkonfiguration = Für eine Beispiele stehen Skripte zur Steuerung der jeweiligen Konfiguration zur Verfügung, welche den Manager automatisch deaktivieren und auch wieder aktivieren, so dass dieser nicht manuell abgeschaltet oder deinstalliert werden muss. Alle Konfigurationsdateien können mit einem [:Editor:] [1] und Root-Rechten [3] bearbeitet werden. == Netzwerk neu starten == Nachdem eine der nachfolgend beschriebenen Konfigurationen erstellt wurde, muss das Netzwerk neu gestartet werden. Dabei die Terminalausgabe [2] beobachten, auch auf Fehlermeldungen achten anschließend die Konfiguration überprüfen: {{{#!vorlage Befehl sudo service networking restart ifconfig -a iwconfig }}} == Dnsmasq == Zur Namensauflösung wird [:Dnsmasq:dnsmasq-base] verwendet. Dnsmasq wird über eine einzige Befehlszeile konfiguriert. {{{#!vorlage Paketinstallation dnsmasq-base , universe [5] - ein DHCP-Server und DNS-Cache (Basispaket) }}} Soll [:Dnsmasq:] als Vollinstallation verwendet werden, um die Konfigurationsdatei mit erweiterten Optionen nutzen zu können, muss folgendes Programmpaket nachinstalliert werden: {{{#!vorlage Paketinstallation dnsmasq , universe [5] - ein DHCP- und DNS-Cache, siehe auch [:Dnsmasq:] und [:Router:] }}} Danach sollte die Konfigurationsdatei gesichert werden, da diese diverse Beispiele enthält. {{{#!vorlage Befehl sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak # Originaldatei vorab sichern }}} = Automatische Konfiguration DHCP = == LAN auf WLAN == Eine manuelle Konfiguration bietet erweiterte Einstellmöglichkeiten, wie z.B. Auswahl der [wikipedia:Private_IP-Adresse:IP-Adressen] oder freie Kanalwahl der WLAN-Verbindung (zulässige [wikipedia:Wireless_Local_Area_Network#Frequenzen_und_Kan.C3.A4le:Frequenzeinstellungen]). Nachfolgend eine vollständige Beispielkonfiguration für eine Verbindungsfreigabe mittels WLAN Ad-Hoc mit 128-bit WEP-Verschlüsselung auf Funkkanal 1. Die Konfiguration für `eth0` muss entsprechend der Gegebenheiten angepasst werden. Start des DHCP-Servers, IP-Forwarding und Maskieren der LAN-Schnittstelle sind temporär und werden bei Systemstart automatisch erneut aktiviert. Die IP-Adresse der lokalen Schnittstelle muss sich zudem in einem separaten Adressraum/Subnetz befinden. {{{#!vorlage Warnung WEP-Verschlüsselung ist nicht mehr Stand der Technik. Stattdessen sollte WPA2 oder WPA3 eingesetzt werden. }}} Konfiguration der '''/etc/network/interfaces''': {{{ auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto wlan0 iface wlan0 inet static address 192.168.3.1 netmask 255.255.255.0 broadcast 192.168.3.255 # Ad-Hoc Netz erstellen. ESSID, Schlüssel und Funkkanal anpassen up iwconfig wlan0 mode Ad-Hoc essid Deine_ESSID key 12345678901234567890123456 freq 2412000000 ## Alternative Syntax Kanaleinstellung # up iwconfig wlan0 mode Ad-Hoc essid Deine_ESSID key 12345678901234567890123456 channel 1 ## Alternative Syntax 128bit Schlüssel in Klartext # up iwconfig wlan0 mode Ad-Hoc essid Deine_ESSID key s:abcdefghjklmn channel 1 ## vorhandene Regeln und Ketten zuerst löschen up /sbin/iptables -F up /sbin/iptables -X up /sbin/iptables -t nat -F ## Maskieren der LAN-Schnittstelle, Port-Forwarding & Nat aktivieren up /sbin/iptables -A FORWARD -o eth0 -i wlan0 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT up /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT up /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE up /sbin/sysctl -w net.ipv4.ip_forward=1 ## dnsmasq-base verwenden ## verwendeter Adressbereich 192.168.3.10 - 192.168.3.20 up /usr/bin/killall dnsmasq up /bin/sleep 2 post-up /usr/sbin/dnsmasq -i wlan0 -I eth0 -F 192.168.3.10,192.168.3.20,infinite ## Nur bei Verwendung der dnsmasq.conf aktivieren! ## Abschnitt für dnsmasq-base dann deaktivieren! ## dnsmasq neu starten # post-up /etc/init.d/dnsmasq restart }}} Optionale Basiskonfiguration der '''/etc/dnsmasq.conf''' für das hier gezeigte Beispiel: {{{ # DHCP-Server aktiv für Interface interface=wlan0 # DHCP-Server nicht aktiv für Interface no-dhcp-interface=eth0 # IP-Adressbereich / Lease-Time dhcp-range=interface:wlan0,192.168.3.10,192.168.3.20,infinite }}} Feste IP für die angeschlossenen Clients vergeben. Konfiguration über die '''/etc/dnsmasq.conf''' {{{ dhcp-host=,,,infinite dhcp-host=,,infinite dhcp-host=,,infinite }}} == WLAN auf LAN == Die WLAN-Schnittstelle wurde hier für eine Verbindung mit sicherer WPA2-Verschlüsselung vorkonfiguriert. Ebenso ist die WLAN-Konfiguration über [:WLAN/wpa supplicant:] möglich. Soll nur ein einziger Rechner ohne [wikipedia:Switch_(Computertechnik):Netzwerk-Switch] direkt angeschlossen werden, muss möglicherweise ein [wikipedia:Crosskabel:] für die Verbindung verwendet werden. Weitere Hinweise dazu in [:PC-Direktverbindung per Netzwerk-Kabel:]. Konfiguration der '''/etc/network/interfaces''': {{{ auto lo iface lo inet loopback auto wlan0 iface wlan0 inet dhcp wpa-driver wext wpa-ssid DeineSSID wpa-ap-scan 1 wpa-proto RSN wpa-pairwise CCMP wpa-group CCMP wpa-key-mgmt WPA-PSK wpa-psk "Dein_WPA-Kennwort_in Klartext" auto eth0 iface eth0 inet static address 192.168.3.1 netmask 255.255.255.0 broadcast 192.168.3.255 ## vorhandene Regeln und Ketten zuerst löschen up /sbin/iptables -F up /sbin/iptables -X up /sbin/iptables -t nat -F ## Maskieren der LAN-Schnittstelle, Port-Forwarding & Nat aktivieren up /sbin/iptables -A FORWARD -o wlan0 -i eth0 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT up /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT up /sbin/iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE up /sbin/sysctl -w net.ipv4.ip_forward=1 ## dnsmasq-base verwenden ## verwendeter Adressbereich 192.168.3.10 - 192.168.3.20 up /usr/bin/killall dnsmasq up /bin/sleep 2 post-up /usr/sbin/dnsmasq -i eth0 -I wlan0 -F 192.168.3.10,192.168.3.20,infinite ## Nur bei Verwendung der dnsmasq.conf aktivieren! ## Abschnitt für dnsmasq-base dann deaktivieren! ## dnsmasq neu starten # post-up /etc/init.d/dnsmasq restart }}} Optionale Basiskonfiguration der '''/etc/dnsmasq.conf''' für das hier gezeigte Beispiel: {{{ # DHCP-Server aktiv für Interface interface=eth0 # DHCP-Server nicht aktiv für Interface no-dhcp-interface=wlan0 # IP-Adressbereich / Lease-Time dhcp-range=interface:eth0,192.168.3.10,192.168.3.20,infinite }}} Steuerung der Konfiguration über ein Skript. === Instant ICS === Die Einrichtung ist ebenfalls über ein Skript möglich. Das Skript basiert auf [#Instant-Ad-Hoc], ist aber für ein Verbindung zwischen WLAN und LAN umgeschrieben. Der Network-Manager wird durch das Skript gesteuert und muss nicht manuell deaktiviert werden. Skript anlegen und ausführbar machen [2]: {{{#!vorlage befehl touch instant_ICS_WLAN_to_LAN.sh chmod +x instant_ICS_WLAN_to_LAN.sh }}} Inhalt einfügen: {{{#!code bash #!/bin/bash ## Instant ICS - Modus WLAN auf LAN ## elektronenblitz63 ubuntuusers.de 2011 ## published under GPL v3 ## ## Version 1.0.2 vom 23.Dezember 2011 ## ## Skript ## ## freie Variablen ## ## Schnittstellenkonfiguration WLAN-Interface wlaniface="wlan0" ## Konfiguration des Accesspoints ## SSID (Name) des WLAN Accesspoints eintragen zu dem eine Verbindung hergestellt werden soll ssid="Deine_WLAN_SSID" ## MAC-Adresse des WLAN Accesspoints eintragen mac="XX:XX:XX:XX:XX:XX" ## Einstellungen zur Verschlüsselung ## Konfiguration wpa-supplicant proto="WPA RSN" key_mgmt="WPA-PSK" pairwise="TKIP CCMP" group="TKIP CCMP" ## Zugangskennwort in Klartext (PSK) psk="Dein_Zugangsschluessel_in_Klartext_PSK" ## Treiber für wpa_supplicant (Vorgabe) wpadriver="wext" ## temporäre Konfigurationsdatei für wpa_supplicant home="`pwd`" configfile=$home/wpa_supplicant.tmp ## Schnittsetllenkonfiguration LAN-Interface ## LAN statisch (Vorgabe) laniface="eth0" laddress="192.168.3.1" lbroadcast="192.186.3.255" lnetmask="255.255.255.0" iptablemask="192.168.0.0/24" ## DHCP-Client dhcpclient="dhclient" ## manuelle DNS (drei DNS Einträge, 1xDomain und 1xSearch sind möglich) - Startoption -D ## Beispiel: ## dns="nameserver 192.168.178.1 nameserver 192.168.178.1 nameserver 192.168.178.1 domain fritz.box search fritz.box" dns="nameserver 8.8.4.4 nameserver 8.8.8.8 nameserver 213.73.91.35" ## dnsmasq-base Konfiguration ## DHCP-Adresspool umfasst x-Adressen ipaddresses=10 ## Basisadresse DHCP-Adresspool (LAN-IP + Startadresse) lanbaseip=10 ## Lease-Time leasetime="infinite" ## Proxy Server auf Port x proxyport=3128 ## Pause bevor eine IP-Adresse angefordert wird ## diese Zeit in Sek. bleibt wpa_supplicant für den Verbindungsaufbau connectsleep=15 ## Pause in Sekunden für Konfigurationsparameter ## Vorgabewert 2 configdelay=2 ## Ende freie Variablen ## aut. Adressberechnung DHCP-Range für dnsmasq ## gemäß Vorgabe WLAN-Schnittstelle ipaddresses=$[$ipaddresses+$lanbaseip] baseendaddr="`echo $laddress | tr -s . " " | awk {'print $4'}`" basestartaddr="`echo $laddress | tr -s . " " | awk {'print $1,$2,$3'} | tr -s " " .`" endaddr="$basestartaddr""."$[$startaddr+$ipaddresses] startaddr="$basestartaddr""."$[$baseendaddr+$lanbaseip] ## Optionen D=0 H=0 P=0 while getopts ":hDP" OPTION ; do case $OPTION in D) echo "manueller DNS"; D=1;; P) echo "Portumleitung für Proxy aktiviert"; P=1;; h) echo "Hilfe angefordert"; H=1;; esac done if [ "$H" = "1" ]; then echo Verwendung: instant_ICS_WLAN_to_LAN.sh [-start] [-restart] [-stop] [-P] [-h] [-D] [-d] echo Syntax: echo "sudo ./instant_ICS.sh startet mit Standardparametern, wie [-start]" echo "sudo ./instant_ICS.sh -restart -D startet automatische WLAN-Konfiguration über DHCP, verwendet manuelle DNS" echo "sudo ./instant_ICS.sh -restart" echo "sudo ./instant_ICS.sh -P Portumleitung für Proxyserver (Squid)" echo "sudo ./instant_ICS.sh -stop beendet das ICS Netzwerk" echo "Ende" exit fi echo starte Konfiguration ... if [ "$1" != "-start" ]; then echo stoppe alle Dienste, und Verbindungen ... # iptables Filter löschen /sbin/iptables -F /sbin/iptables -X /sbin/iptables -t nat -F defgw="`route -n | grep UG | awk {'print $2'}`" /sbin/route del default gw $defgw $wlaniface echo '' | tee /etc/resolv.conf /sbin/ifconfig $wlaniface down /usr/bin/killall dnsmasq /sbin/sysctl -w net.ipv4.ip_forward=0 service squid stop # lösche Konfigurationsdatei rm $home/wpa_supplicant.tmp ## Restart Network-Manager - beende ICS Netzwerk if [ "$1" = "-stop" ]; then echo echo "reaktiviere Network-Manager." service network-manager start sleep $configdelay service network-manager restart echo "ICS Konfiguration beendet." exit fi fi # Konfiguration service network-manager stop sleep 1 killall wpa_supplicant killall $dhcpclient sleep $configdelay /sbin/ifconfig $wlaniface down sleep $configdelay /sbin/ifconfig $wlaniface up sleep $configdelay # Konfiguration wpa_supplicant ctrliface="ctrl_interface=/var/run/wpa_supplicant" eapolv="eapol_version=1" apscan="ap_scan=1" ## WLAN-Verbindung vorbereiten echo $ctrliface | tee $configfile echo $eapolv | tee -a $configfile echo $apscan | tee -a $configfile echo 'network={' | tee -a $configfile echo ssid='"'$ssid'"' | tee -a $configfile echo bssid=$mac | tee -a $configfile echo proto=$proto | tee -a $configfile echo key_mgmt=$key_mgmt | tee -a $configfile echo pairwise=$pairwise | tee -a $configfile echo group=$group | tee -a $configfile echo psk='"'$psk'"' | tee -a $configfile echo '}' | tee -a $configfile echo "Starte automatische WLAN-Verbindung über DHCP ..." /sbin/wpa_supplicant -i $wlaniface -D $wpadriver -c $configfile -B sleep $connectsleep echo "Fordere IP-Adresse an ..." /sbin/dhclient $wlaniface sleep $configdelay # manuelle DNS - Startoption -D if [ "$D" = "1" ]; then echo "setze manuelle DNS" echo '# instant_ICS_WLAN_to_LAN.sh' | tee /etc/resolv.conf echo $dns | awk {'print $1,$2'} | tee -a /etc/resolv.conf echo $dns | awk {'print $3,$4'} | tee -a /etc/resolv.conf echo $dns | awk {'print $5,$6'} | tee -a /etc/resolv.conf echo $dns | awk {'print $7,$8'} | tee -a /etc/resolv.conf echo $dns | awk {'print $9,$10'} | tee -a /etc/resolv.conf sleep $configdelay fi # statische Konfiguration der Ethernet-Schnittstelle echo echo "Starte statische LAN-Konfiguration ..." /sbin/ifconfig $laniface down /sbin/ifconfig $laniface $laddress broadcast $lbroadcast netmask $lnetmask /sbin/ifconfig $laniface up sleep $configdelay echo "Vorgabewerte:" echo "Schnittstelle: "$laniface" IP: "$laddress" Broadcast: "$lbroadcast" Netzmaske: "$lnetmask # aktiviere IP-Forward und NAT echo "starte IP-Forward, Masquerading und NAT" /sbin/iptables -A FORWARD -o $wlaniface -i $laniface -s $iptablemask -m conntrack --ctstate NEW -j ACCEPT /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -t nat -A POSTROUTING -o $wlaniface -j MASQUERADE /sbin/sysctl -w net.ipv4.ip_forward=1 sleep $configdelay # dnsmasq starten echo "starte dnsmasq" echo "DHCP-Range dnsmasq - Startadresse: "$startaddr" Endadresse: "$endaddr /usr/sbin/dnsmasq -i $laniface -I $wlaniface -F $startaddr,$endaddr,$leasetime # Portumleitung für Squid Proxyserver - Startoption -P if [ "$P" = "1" ]; then /sbin/iptables -t nat -A PREROUTING -i $wlaniface -p tcp --dport 80 -j REDIRECT --to-port 3128 echo "Port 80 $wlaniface auf Port $proxyport umgeleitet (Squid Proxyserver)" echo "starte Squid Proxyserver ..." sleep $configdelay service squid start -n fi # Ausgabe der Konfiguration. Einstellungen der Schnittstellen, # Routingtabelle und DNS prüfen echo "prüfe Konfiguration ..." echo echo "Systemkonfiguration: /etc/resolv.conf" /bin/cat /etc/resolv.conf /sbin/route -n echo echo Konfiguration LAN: /sbin/ifconfig $laniface | egrep 'Link|inet Adresse' echo echo Konfiguration WLAN: /sbin/ifconfig $wlaniface | egrep 'Link|inet Adresse' echo echo "Konfiguration beendet" exit 0 }}} Parameter der Schnittstellen, IP-Adressbereiche usw. können im Deklarationsblock des Skripts angepasst werden. Im Terminal [2] als `root`[3] kann das Skript nun mit verschiedenen Parametern aufgerufen werden: {{{#!vorlage Befehl sudo ./instant_ICS_WLAN_to_LAN.sh [-start|-restart|-stop] sudo ./instant_ICS_WLAN_to_LAN.sh # startet mit automatischer Konfiguration (wie mit [-start]) sudo ./instant_ICS_WLAN_to_LAN.sh -start # startet alle Verbindungen und Dienste mit automatischer Konfiguration sudo ./instant_ICS_WLAN_to_LAN.sh -restart # erneuert alle Verbindungen und Dienste mit automatischer Konfiguration sudo ./instant_ICS_WLAN_to_LAN.sh -stop # beendet alle Verbindungen und Dienste }}} Weitere Startoptionen sind im Skript beschrieben. == LAN auf LAN == Soll nur ein einziger Rechner ohne [wikipedia:Switch_(Computertechnik):Netzwerk-Switch] direkt angeschlossen werden, muss möglicherweise ein [wikipedia:Crosskabel:] für die Verbindung verwendet werden. Weitere Hinweise dazu in [:PC-Direktverbindung per Netzwerk-Kabel:]. Konfiguration der '''/etc/network/interfaces''': {{{ auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet static address 192.168.3.1 netmask 255.255.255.0 broadcast 192.168.3.255 ## vorhandene Regeln und Ketten zuerst löschen up /sbin/iptables -F up /sbin/iptables -X up /sbin/iptables -t nat -F ## Maskieren der LAN-Schnittstelle, Port-Forwarding & Nat aktivieren up /sbin/iptables -A FORWARD -o eth0 -i eth1 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT up /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT up /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE up /sbin/sysctl -w net.ipv4.ip_forward=1 ## dnsmasq-base verwenden ## verwendeter Adressbereich 192.168.3.10 - 192.168.3.20 up /usr/bin/killall dnsmasq up /bin/sleep 2 post-up /usr/sbin/dnsmasq -i eth1 -I eth0 -F 192.168.3.10,192.168.3.20,infinite ## Nur bei Verwendung der dnsmasq.conf aktivieren! ## Abschnitt für dnsmasq-base dann deaktivieren! ## dnsmasq neu starten # post-up /etc/init.d/dnsmasq restart }}} Optionale Basiskonfiguration der '''/etc/dnsmasq.conf''' für das hier gezeigte Beispiel: {{{ # DHCP-Server aktiv für Interface interface=eth1 # DHCP-Server nicht aktiv für Interface no-dhcp-interface=eth0 # IP-Adressbereich / Lease-Time dhcp-range=interface:eth1,192.168.3.10,192.168.3.20,infinite }}} Steuerung der Konfiguration über ein Skript. ==== Instant ICS ==== Die Einrichtung ist ebenfalls über ein Skript möglich. Das Skript basiert auf [#Instant-Ad-Hoc], ist aber für ein Verbindung zwischen zwei Ethernetschnittstellen (LAN auf LAN) umgeschrieben. Der Network-Manager wird durch das Skript gesteuert und muss nicht manuell deaktiviert werden. Skript anlegen und ausführbar machen [2]: {{{#!vorlage befehl touch instant_ICS.sh chmod +x instant_ICS.sh }}} Inhalt einfügen: {{{#!code bash #!/bin/bash ## Instant ICS - Modus LAN auf LAN ## elektronenblitz63 ubuntuusers.de 2011 ## published under GPL v3 ## ## Version 1.0.1 vom 27.November 2011 ## ## Skript ## ## freie Variablen ## ## LAN statisch (Beispiel) (Startoption [-f]) ## Internetverbindung # laniface=eth0 laddress=192.168.178.10 lbroadcast=192.168.178.255 lnetmask=255.255.255.0 lgateway=192.168.178.1 ### DNS (drei DNS Einträge, 1x Domain und 1x Search sind möglich) - nur mit Startoption [-f] # Beispiel: # dns="nameserver 192.168.178.1 nameserver 213.73.91.35 nameserver 87.118.100.175 domain fritz.box search fritz.box" dns="nameserver 8.8.4.4 nameserver 8.8.8.8 nameserver 213.73.91.35" ## dnsmasq DNS (manuell) (Startoption [-D]) ## dnsmasq ignoriert dann /etc/resolv.conf mandns=8.8.4.4 ## MAC-Adresse (optional) (Startoption [-m]) lmacaddress=00:12:79:c0:49:ae ## LAN2 statisch (Beispiel) ## hier werden weitere Clients angeschlossen # laniface2=eth1 address2=192.168.3.1 broadcast2=192.186.3.255 netmask2=255.255.255.0 iptablemask=192.168.0.0/24 ## DNSMASQ Konfiguration # DHCP-Adresspool umfasst x-Adressen ipaddresses=10 # Basisadresse DHCP-Adresspool (WLAN-IP + X) lanbaseip=10 # Lease-Time leasetime=infinite ## Proxy Server auf Port x proxyport=3128 ## Ende freie Variablen ## aut. Adressberechnung DHCP-Range für dnsmasq ## gemäß Vorgabe WLAN-Schnittstelle ipaddresses=$[$ipaddresses+$lanbaseip] baseendaddr="`echo $address2 | tr -s . " " | awk {'print $4'}`" basestartaddr="`echo $address2 | tr -s . " " | awk {'print $1,$2,$3'} | tr -s " " .`" endaddr="$basestartaddr""."$[$startaddr+$ipaddresses] startaddr="$basestartaddr""."$[$baseendaddr+$lanbaseip] ## Pause vor LAN-Verbindungstest pause=4 pingout="" ## Pause in Sekunden für Konfigurationsparameter ## Vorgabewert 3 configdelay=2 ## Optionen A=1 B=0 D=0 H=0 P=0 while getopts ":dfmhDP" OPTION ; do case $OPTION in d) echo "konfiguriere LAN1 über DHCP"; A=1;; f) echo "konfiguriere LAN1 statisch"; A=2;; m) echo "MAC-Change LAN1 ein"; B=1;; D) echo "manueller DNS"; D=1;; P) echo "Portumleitung für Proxy aktiviert"; P=1;; h) echo "Hilfe angefordert"; H=1;; esac done if [ "$H" = "1" ]; then echo Verwendung: instant_AdHoc.sh [-start] [-restart] [-stop] [-d] [-f] [-m] [-h] [-D] echo Syntax: echo "sudo ./instant_AdHoc.sh startet mit Standardparametern, wie [-start][-d]" echo "sudo ./instant_AdHoc.sh -d startet mit Standardparametern, wie [-start]" echo "sudo ./instant_AdHoc.sh -f statische LAN-Konfiguration" echo "sudo ./instant_AdHoc.sh -f -m statische LAN-Konfiguration, MAC-Änderung" echo "sudo ./instant_AdHoc.sh -f -m -c statischer LAN-Konfiguration, MAC-Änderung, MAC-Filter" echo "sudo ./instant_AdHoc.sh -start -f statische LAN-Konfiguration" echo "sudo ./instant_AdHoc.sh -restart -f statische LAN-Konfiguration" echo "sudo ./instant_AdHoc.sh -restart -d -D automatische LAN-Konfiguration über DHCP, dnsmasq ignoriert System-DNS" echo "bei Option [-D] ignoriert dnsmasq die Einträge der /etc/resolv.conf" echo "sudo ./instant_AdHoc.sh -restart -f -m -c statische LAN-Konfiguration, MAC-Änderung, MAC-Filter" echo "sudo ./instant_AdHoc.sh -P Portumleitung für Proxyserver (Squid)" echo "sudo ./instant_AdHoc.sh -stop beendet das ICS Netzwerk" echo "Ende" exit fi echo starte Konfiguration ... sleep 2 if [ "$1" != "-start" ]; then echo stoppe alle Dienste, und Verbindungen ... # iptables Filter löschen /sbin/iptables -F /sbin/iptables -X /sbin/iptables -t nat -F defgw="`route -n | grep UG | awk {'print $2'}`" /sbin/route del default gw $defgw $laniface echo '' | tee /etc/resolv.conf /sbin/ifconfig $laniface2 down /sbin/ifconfig $laniface down /usr/bin/killall dnsmasq /sbin/sysctl -w net.ipv4.ip_forward=0 service squid stop ## Restart Network-Manager - beende ICS Netzwerk if [ "$1" = "-stop" ]; then echo echo "reaktiviere Network-Manager." service network-manager start sleep $configdelay service network-manager restart echo "ICS Konfiguration beendet." exit fi fi ## MAC-Adresse LAN1 abgleichen if [ "$B" = "1" ]; then currentmac="`ifconfig $laniface | grep Adresse | awk {'print $6'}`" echo Schnittstelle $laniface, MAC-Adresse: $currentmac echo Vorgabe: $lmacaddress if [ "$currentmac" = "$lmacaddress" ]; then echo Übereinstimmende MAC-Adresse else /sbin/ifconfig $laniface down /sbin/ip link set dev $laniface addr $lmacaddress currentmac="`ifconfig $laniface | grep Adresse | awk {'print $6'}`" echo versuche MAC-Adresse zu ändern ... echo Schnittstelle $laniface, MAC-Adresse: $currentmac if [ "$currentmac" = "$lmacaddress" ]; then echo Änderung der MAC-Adresse erfolgreich! else echo Änderung der MAC-Adresse nicht erfolgreich! echo fahre fort ... fi fi fi # Konfiguration LAN echo "Beende Network-Manager" service network-manager stop echo "Starte benötigte Dienste, und Verbindungen ..." sleep $configdelay if [ "$A" = "1" ]; then sleep $configdelay echo echo "Starte automatische LAN-Verbindung über DHCP ..." /sbin/dhclient $laniface else sleep $configdelay echo echo "Starte statische LAN-Konfiguration ..." /sbin/ifconfig $laniface down /sbin/ifconfig $laniface $laddress broadcast $lbroadcast netmask $lnetmask sleep $configdelay ## vorhandene Route ggf. löschen echo "Lösche Default-Gateway ..." defgw="`route -n | grep UG | awk {'print $2'}`" /sbin/route del default gw $defgw $laniface echo echo "Setze Gateway und Route ..." /sbin/route add default gw $lgateway $laniface sleep $configdelay ## DNS eintragen (nur bei statischer Konfiguration - Option [-f]) echo setze DNS echo '# erzeugt durch instant_AdHoc.sh' | tee /etc/resolv.conf echo $dns | awk {'print $1,$2'} | tee -a /etc/resolv.conf echo $dns | awk {'print $3,$4'} | tee -a /etc/resolv.conf echo $dns | awk {'print $5,$6'} | tee -a /etc/resolv.conf echo $dns | awk {'print $7,$8'} | tee -a /etc/resolv.conf echo $dns | awk {'print $9,$10'} | tee -a /etc/resolv.conf sleep $pause fi ## Verbindungstest LAN echo LAN Verbindungstest ... pingout="`(ping -c1 $lgateway | egrep -wo '100% packet loss')`" if [ "$pingout" = "100% packet loss" ]; then echo kann Gateway nicht pingen $pingout - Verbindung fehlgeschlagen! echo breche Vorgang ab! echo Kabelverbindung oder Konfiguration überprüfen! /sbin/ifconfig $laniface down if [ "$A" = "2" ]; then echo lösche Default-Gateway ... defgw="`route -n | grep UG | awk {'print $2'}`" /sbin/route del default gw $defgw $laniface fi echo Vorgabewerte: echo Schnittstelle: $laniface IP: $laddress Broadcast: $lbroadcast Netzmaske: $lnetmask echo IP-Adresse Gateway: $lgateway exit fi echo Verbindungstest erfolgreich! # LAN2-Schnittstelle statisch konfigurieren echo Konfiguriere WLAN, starte WLAN Ad-Hoc Modus ... /sbin/ifconfig $laniface2 down sleep 1 /sbin/ifconfig $laniface2 $address2 broadcast $broadcast2 netmask $netmask2 /sbin/ifconfig $laniface2 up echo starte IP-Forward, Masquerading und NAT /sbin/iptables -A FORWARD -o $laniface -i $laniface2 -s $iptablemask -m conntrack --ctstate NEW -j ACCEPT /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -t nat -A POSTROUTING -o $laniface -j MASQUERADE /sbin/sysctl -w net.ipv4.ip_forward=1 ## dnsmasq starten echo starte dnsmasq echo DHCP-Range dnsmasq - Startadresse: $startaddr Endadresse: $endaddr /usr/bin/killall dnsmasq if [ "$S" != "0" ]; then /usr/sbin/dnsmasq -i $laniface2 -I $laniface -F $startaddr,$endaddr,$leasetime else /usr/sbin/dnsmasq -i $wlaniface -I $laniface -F $startaddr,$endaddr,$leasetime -R -S $mandns echo DNS Systemeinstellung wird ignoriert, dnsmasq verwendet DNS: $mandns fi ## Portumleitung für Squid Proxyserver if [ "$P" = "1" ]; then /sbin/iptables -t nat -A PREROUTING -i $laniface2 -p tcp --dport 80 -j REDIRECT --to-port 3128 echo "Port 80 $laniface2 auf Port $proxyport umgeleitet (Squid Proxyserver)" echo starte Squid Proxyserver ... sleep 4 service squid start -n fi ## Ausgabe der Konfiguration. Einstellungen der Schnittstellen, ## Routingtabelle und DNS prüfen echo "prüfe Konfiguration ..." if [ "$A" = "2" ]; then echo vorgegebene DNS: $dns fi echo "Systemkonfiguration: /etc/resolv.conf" /bin/cat /etc/resolv.conf /sbin/route -n echo echo Konfiguration LAN: /sbin/ifconfig $laniface | egrep 'Link|inet Adresse' echo Konfiguration WLAN: /sbin/ifconfig $laniface2 | egrep 'Link|inet Adresse' echo "Konfiguration beendet" exit 0 }}} Parameter der Schnittstellen, IP-Adressbereiche usw. können im Deklarationsblock des Skripts angepasst werden. Im Terminal [2] als `root`[3] kann das Skript nun mit verschiedenen Parametern aufgerufen werden: {{{#!vorlage Befehl sudo ./instant_ICS.sh [-start|-restart|-stop] sudo ./instant_ICS.sh # startet mit automatischer Konfiguration (wie mit [-start]) sudo ./instant_ICS.sh -start # startet alle Verbindungen und Dienste mit automatischer Konfiguration sudo ./instant_ICS.sh -restart # erneuert alle Verbindungen und Dienste mit automatischer Konfiguration sudo ./instant_ICS.sh -stop # beendet alle Verbindungen und Dienste }}} Weitere Startoptionen sind im Skript beschrieben. [[Bild(./Netzwerk_Minirouter.png, 310, align=right)]] === DSL-Modem teilen === Folgende Konfiguration stellt bereits die Funktionalität eines einfachen Routers bereit. Die Internetverbindung wird über `eth0` und einem angeschlossenen Modem mittels pppoeconf aufgebaut, die Verbindung über eine zweite Ethernet-Schnitstelle, hier (`eth1`) und WLAN-Netzwerk Ad-Hoc (`wlan0`), geteilt. Sofern die eingesetzte WLAN-Hardware die Einrichtung eines vollwertigen Acess-Points mit sicherer WPA oder sogar WPA2-Verschlüsselung erlaubt, sollte diese Methode bevorzugt werden. Informationen dazu in [:WLAN Router:]. Hier wird [:Dnsmasq:] als Vollinstallation benötigt (s.o.). Soll nur ein einziger Rechner ohne [wikipedia:Switch_(Computertechnik):Netzwerk-Switch] direkt an die zweite Ethernet-Schnittstelle angeschlossen werden, muss möglicherweise ein [wikipedia:Crosskabel:] für die Verbindung verwendet werden. Weitere Hinweise dazu in [:PC-Direktverbindung per Netzwerk-Kabel:]. Konfiguration der '''/etc/network/interfaces''': {{{ auto lo iface lo inet loopback # an eth0 ist der Modem angeschlossen auto eth0 iface eth0 inet manual # pppoe Verbindung auto dsl-provider iface dsl-provider inet ppp pre-up /sbin/ifconfig eth0 up # line maintained by pppoeconf provider dsl-provider # lokales Netzwerk LAN-Anschluß 2 auto eth1 iface eth1 inet static address 192.168.3.1 netmask 255.255.255.0 broadcast 192.168.3.255 # lokales WLAN-Netzwerk auto wlan0 iface wlan0 inet static address 192.168.3.2 # Bei Verbindungsproblemen alternativ ein anderes Subnetz und Broadcast wählen # address 192.168.4.1 netmask 255.255.255.0 broadcast 192.168.3.255 # broadcast 192.168.4.255 # Ad-Hoc Netz erstellen. ESSID, Schlüssel und Funkkanal anpassen up /sbin/iwconfig wlan0 mode Ad-Hoc essid Deine_ESSID key 12345678901234567890123456 freq 2412000000 ## vorhandene Regeln und Ketten zuerst löschen up /sbin/iptables -F up /sbin/iptables -X up /sbin/iptables -t nat -F ## Maskieren der LAN-Schnittstelle, Port-Forwarding & Nat aktivieren ## Die Eingangs-Schnittstelle kann hier entfallen, da mehre Teilnetze auf das Internet zugreifen dürfen. ## In diesem Fall muss hier 192.168.0.0/16 verwendet werden. up iptables -A FORWARD -o ppp0 -s 192.168.0.0/16 -m conntrack --ctstate NEW -j ACCEPT up /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT up /sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE up /sbin/sysctl -w net.ipv4.ip_forward=1 ## dnsmasq neu starten up /etc/init.d/dnsmasq restart }}} Basiskonfiguration der '''/etc/dnsmasq.conf''': {{{ # DHCP-Server aktiv für Interface interface=eth1 interface=wlan0 # DHCP-Server nicht aktiv für Interface no-dhcp-interface=eth0 # IP-Adressbereich / Lease-Time dhcp-range=interface:eth1,192.168.3.10,192.168.3.40,infinite # Verteile an eth1 Adressen 192.168.3.10..192.168.3.40 dhcp-range=interface:wlan0,192.168.3.10,192.168.3.40,infinite # Verteile an wlan0 Adressen 192.168.3.10..192.168.3.40 # Bei Verbindungsproblemen (IP-Adresse wird nicht zugewiesen) alternativ ein anderes Subnetz für WLAN wählen # dhcp-range=interface:wlan0,192.168.4.10,192.168.4.40,infinite # Verteile an wlan0 Adressen 192.168.4.10..192.168.4.40 }}} === MAC-Adressfilter einrichten === Eine WEP-Verschlüsselung ist unsicher und mit den entsprechenden Werkzeugen schnell entschlüsselt. Um etwas zusätzliche Sicherheit zu erlangen, kann der IP-Adressbereich des DHCP-Servers (dnsmasq) in der Konfigurationsdatei auf die tatsächliche Anzahl der angeschlossenen Rechner begrenzt werden. Zusätzlich können über [:iptables2:iptables] entsprechende Filterregeln erstellt werden, so dass nur bekannten Rechnern eine Datenübertragung bzw. der Internet-Zugriff gestattet wird. Allerdings kann diese Maßnahme mit dem entsprechenden Hintergrundwissen ebenfalls relativ einfach überwunden werden, da MAC-Adressen unverschlüsselt im Netzwerk übertragen werden. Sensible persönliche Daten sollten in einem WEP-verschlüsselten Netzwerk deshalb nicht ohne Dateiverschlüsselung oder Kennwortschutz freigegeben werden und zugänglich sein. An die bestehende Konfiguration in der Datei [:interfaces:/etc/network/interfaces] ist Folgendes anzuhängen. Die gezeigten MAC-Geräteadressen sind natürlich nur Beispiele. Für jeden Rechner im Netzwerk ist eine Filterregel mit der MAC-Adresse der verbauten LAN- bzw. WLAN-Karte einzufügen. Hier wurden Filterregeln für LAN und WLAN berücksichtigt. Die Bezeichnung der tatsächlich verwendeten Schnittstellen ist zu beachten. {{{ # MAC-Adressfilter aktivieren / Datenübertragung für eingetragene WLAN-Geräte zulassen up /sbin/iptables -A INPUT -i wlan0 -m mac --mac-source 00:14:f6:2d:0a:b1 -j ACCEPT up /sbin/iptables -A INPUT -i wlan0 -m mac --mac-source 1c:2a:b4:30:4a:23 -j ACCEPT # MAC-Adressfilter aktivieren / Datenübertragung für eingetragene LAN-Geräte zulassen up /sbin/iptables -A INPUT -i eth1 -m mac --mac-source 00:24:12:0e:9f:4a -j ACCEPT up /sbin/iptables -A INPUT -i eth1 -m mac --mac-source 00:26:35:10:2a:1b -j ACCEPT # alle anderen Datenpakete die über die freigegebene WLAN-Schnittstelle kommen verwerfen up /sbin/iptables -A INPUT -i wlan0 -j DROP # alle anderen Datenpakete die über die freigegebene LAN-Schnittstelle kommen verwerfen up /sbin/iptables -A INPUT -i eth1 -j DROP }}} Das Netzwerk abschließend wie beschrieben neu starten und die Filterregeln überprüfen: {{{#!vorlage Befehl sudo iptables -t filter -n -L -v }}} Die Ausgabe für die Kette `INPUT` sollte passend zum Beispiel folgendermaßen aussehen (die Anzahl der übertragenen Datenpakete und Bytes ändert sich natürlich): {{{ Chain INPUT (policy ACCEPT 617 packets, 229K bytes) pkts bytes target prot opt in out source destination 65 8826 ACCEPT all -- wlan0 * 0.0.0.0/0 0.0.0.0/0 MAC 00:14:f6:2d:0a:b1 13 1564 ACCEPT all -- wlan0 * 0.0.0.0/0 0.0.0.0/0 MAC 1c:2a:b4:30:4a:23 0 0 ACCEPT all -- eth1 * 0.0.0.0/0 0.0.0.0/0 MAC 00:24:12:0E:9F:4A 0 0 ACCEPT all -- eth1 * 0.0.0.0/0 0.0.0.0/0 MAC 00:26:35:10:2A:1B 6 1158 DROP all -- wlan0 * 0.0.0.0/0 0.0.0.0/0 0 0 DROP all -- eth1 * 0.0.0.0/0 0.0.0.0/0 ... }}} Für eine erweiterte Konfiguration und die Einrichtung spezieller Filtertabellen bietet sich [:Skripte/nathelper:nathelper] oder [:ufw:]. Entsprechende Befehle können ebenfalls in die Datei interfaces integriert werden. Ebenso lassen sich diverse [:Serverdienste:] einrichten. [[Bild(./Netzwerk01.png, 410, align=right)]] == Statische Konfiguration == Die WLAN-Verbindung des Host-Rechners die z.B. über eine manuelle Konfiguration ([:interfaces:]) aufgebaut wird, soll __ohne__ zusätzlichen DHCP-Server/DNS-Cache ([:Dnsmasq:]) über LAN `eth0` einem oder auch mehreren anderen Rechnern die Internetverbindug zur Verfügung stellen und auch einen lokalen Server oder ein [wikipedia:Network_Attached_Storage:NAS] anbinden. Über einen [wikipedia:Switch_(Computertechnik):Netzwerk-Switch] können so auch mehrere Clients angeschlossen und untereinander vernetzt werden. Soll nur ein einziger Rechner ohne [wikipedia:Switch_(Computertechnik):Netzwerk-Switch] direkt angeschlossen werden, muss möglicherweise ein [wikipedia:Crosskabel:] für die Verbindung verwendet werden. Weitere Hinweise dazu in [:PC-Direktverbindung per Netzwerk-Kabel:]. === WLAN auf LAN === Beispiel mit manueller Konfiguration des WLAN und LAN Konfiguration der '''/etc/network/interfaces''' des Host-Rechners: {{{ auto lo iface lo inet loopback auto wlan0 iface wlan0 inet dhcp wpa-driver wext wpa-ssid DeineSSID wpa-ap-scan 1 wpa-proto RSN wpa-pairwise CCMP wpa-group CCMP wpa-key-mgmt WPA-PSK wpa-psk "Dein_WPA-Kennwort_in Klartext" auto eth0 iface eth0 inet static address 192.168.3.1 netmask 255.255.255.0 broadcast 192.168.3.255 ## vorhandene Regeln und Ketten zuerst löschen up /sbin/iptables -F up /sbin/iptables -X up /sbin/iptables -t nat -F ## Maskieren der LAN-Schnittstelle, Port-Forwarding & Nat aktivieren up /sbin/iptables -A FORWARD -o wlan0 -i eth0 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT up /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT up /sbin/iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE up /sbin/sysctl -w net.ipv4.ip_forward=1 }}} [[Bild(./Netzwerk_statisch_Modem.png, 260, align=right)]] === DSL-Modem teilen === Ein Router ist nicht vorhanden, alle Rechner verfügen nur über eine einzige Ethernet-Schnittstelle und sind über einen [wikipedia:Switch_(Computertechnik):Netzwerk-Switch] miteinander verbunden. Der DSL-Modem ist ebenfalls am Switch angeschlossen. Einer der Rechner (Host) übernimmt die Einwahl (über pppoeconf) und leitet die Verbindung über ein virtuelles Interface (`eth0:1`) in das lokale Subnetz weiter. Die Konfiguration erfolgt ausschließlich über die '''/etc/network/interfaces'''. Zusätzlich empfiehlt es sich, hier über einen transparenten Proxyserver wie z.B. [:Squid:] auf dem Host-Rechner einen Daten-Cache einzurichten. Anleitung dazu weiter unten in diesem Artikel. Der vom Provider zugewiesenen DNS-Server des Host-Rechners kann nach Verbindungsaufbau abgefragt und ebenfalls für die Konfiguration der Clients verwendet werden: {{{#!vorlage Befehl cat /etc/resolv.conf }}} Konfiguration der '''/etc/network/interfaces''': {{{ auto lo iface lo inet loopback # an eth0 ist der Modem angeschlossen / LAN-Anschluß 1-0 auto eth0 iface eth0 inet manual # pppoe Verbindung auto dsl-provider iface dsl-provider inet ppp pre-up /sbin/ifconfig eth0 up # line maintained by pppoeconf provider dsl-provider # lokales Netzwerk LAN-Anschluß 1-1 auto eth0:1 iface eth0:1 inet static address 192.168.3.1 netmask 255.255.255.0 broadcast 192.168.3.255 ## vorhandene Regeln und Ketten zuerst löschen up /sbin/iptables -F up /sbin/iptables -X up /sbin/iptables -t nat -F ## Maskieren der LAN-Schnittstelle, Port-Forwarding & Nat aktivieren up /sbin/iptables -A FORWARD -o ppp0 -s 192.168.0.0/16 -m conntrack --ctstate NEW -j ACCEPT up /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT up /sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE up /sbin/sysctl -w net.ipv4.ip_forward=1 # Vorbereitung für transparenten Proxyserver Squid # up service squid stop # post-up /sbin/iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -j REDIRECT --to-port 3128 # post-up service squid start -n }}} [[Bild(./NM_statisch.png, 100, align=right)]] === Konfiguration der Clients === Die Konfiguration muss ebenfalls statisch erfolgen. Das kann manuell über die Datei [:interfaces:/etc/network/interfaces], mit dem [:Network-Manager:] durchgeführt werden. Statische IP-Adressen im lokalen Netz dürfen nicht doppelt vergeben werden und müssen sich im selben Adressbereich befinden wie die des Host-Rechners! ==== Mit Netzwerkmanager ==== Über einen Rechtsklick [[Vorlage(Tasten, rmb)]] auf das Network-Manager Symbol und ''"Verbindungen bearbeiten"'' kann ein neuer Eintrag für die statische Konfiguration angelegt werden. ==== Über die interfaces ==== Konfiguration der '''/etc/network/interfaces''' (Beispiel): {{{ auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.3.10 netmask 255.255.255.0 broadcast 192.168.3.255 gateway 192.168.3.1 # IP-Adresse LAN-Schnittstelle des Host ## optional benötigte DNS eintragen ## drei Einträge sind möglich # post-up /bin/echo 'nameserver 192.168.178.1' | tee /etc/resolv.conf # post-up /bin/echo 'nameserver 213.73.91.35' | tee -a /etc/resolv.conf # post-up /bin/echo 'nameserver 87.118.100.175' | tee -a /etc/resolv.conf ## optional Domain und Sucheintrag # post-up /bin/echo 'domain fritz.box' | tee -a /etc/resolv.conf # post-up /bin/echo 'search fritz.box' | tee -a /etc/resolv.conf }}} [[Bild(./Netzwerk-Bruecke.png, 300, align=right)]] == Netzwerkbrücke == Ein Rechner (Host) stellt über einen DSL-Router und Schnittstelle (`eth0`) die Internetverbindung her. Über eine zweite Schnittstelle (`eth1`) wird die Verbindung durchgereicht. Beide Anschlüsse werden über eine "Netzwerkbrücke" miteinander verbunden. Die Verbindung ist "transparent", dass heißt alle Rechner im Netzwerk verhalten sich so, als wären sie direkt am Router angeschlossen. Dieser verteilt IP-Adressen über DHCP. Eine statische Konfiguration ist ebenfalls möglich. Siehe dazu auch [:Netzwerkbrücke:]. Über einen [wikipedia:Switch_(Computertechnik):Netzwerk-Switch] können so auch mehrere Clients angeschlossen und untereinander vernetzt werden. Soll nur ein einziger Rechner ohne [wikipedia:Switch_(Computertechnik):Netzwerk-Switch] direkt angeschlossen werden, muss möglicherweise ein [wikipedia:Crosskabel:] für die Verbindung verwendet werden. Weitere Hinweise dazu in [:PC-Direktverbindung per Netzwerk-Kabel:]. Auf dem Host-Rechner wird dazu folgende Software benötigt: {{{#!vorlage Paketinstallation bridge-utils , Software um eine Netzwerkbrücke herzustellen }}} === LAN auf LAN === Eine permanente Konfiguration des Host-Rechners erfolgt manuell über die [:interfaces:/etc/network/interfaces]. {{{ auto lo iface lo inet loopback auto br0 iface br0 inet dhcp bridge_ports eth0 eth1 bridge_fd 5 bridge_stp no }}} Die Clients können wie gewohnt über einen Netzwerkmanager oder auch manuell konfiguriert werden. ==== Steuerung über Skript ==== Über ein kleines Skript kann eine bei Bedarf benötigte Netzwerkbrücke erstellt und auch wieder entfernt werden. Die Datei '''/etc/network/interfaces''' muss dazu nicht verändert werden. Ebenso kann der Network-Manager parallel verwendet werden und wird durch das Skript automatisch gestoppt und auch wieder gestartet. Mit einem Editor [1] oder über Terminal [2] wird das Skript '''lan_bridge.sh''' angelegt und ausführbar gemacht. {{{#!vorlage Befehl touch lan_bridge.sh chmod +x lan_bridge.sh }}} Folgenden Inhalt einfügen und abspeichern: {{{#!code bash #!/bin/bash ## Instant LAN-Bridge ## elektronenblitz63 ubuntuusers.de 2011 ## published under GPL v3 ## ## Skript ## ## Konfiguration bridge=br0 forward_delay=5 stp=0 ## Schnittstellen iface0=eth0 iface1=eth1 ## Verbindungen beenden if [ "$1" = "off" ]; then /sbin/ifconfig $bridge down /sbin/ifconfig $iface1 down ## Brücke löschen echo "lösche Brücke und Konfiguration, starte den Network-Manager ..." /usr/sbin/brctl delif $bridge $iface0 /usr/sbin/brctl delif $bridge $iface1 /usr/sbin/brctl delbr $bridge service network-manager start echo "LAN-Brücke beendet" fi ## Bridge starten if [ "$1" = "on" ]; then echo "stoppe Network-Manager, starte LAN-Brücke" $iface0 "<=>" $iface1 sleep 2 service network-manager stop sleep 2 ## Brücke erzeugen /usr/sbin/brctl addbr $bridge /usr/sbin/brctl addif $bridge $iface0 /usr/sbin/brctl addif $bridge $iface1 /usr/sbin/brctl stp $bridge $stp /usr/sbin/brctl setfd $bridge $forward_delay ## Verbindungen starten /sbin/ifconfig $bridge up /sbin/ifconfig $iface1 up /sbin/dhclient $bridge fi exit 0 }}} Skript starten und beenden: {{{#!vorlage Befehl sudo lan_bridge.sh on # startet die LAN-Brücke sudo lan_bridge.sh off # beendet die LAN-Brücke }}} === WLAN auf LAN === Eine transparente Brücke zwischen WLAN und LAN ist nicht so einfach herzustellen, außerdem muss die WLAN-Hard- und Firmware dies auch unterstützen (MAC-Forwarding). Diese Möglichkeit wurde im Kernel abgeschaltet. Eine Brücke zwischen LAN und WLAN ist nur möglich, wenn sich die WLAN-Karte im Master-Modus befindet, also über hostapd so wie in [:WLAN_Router:] beschrieben. [[Bild(./Netzwerk02_Instant.png, 320, align=right)]] == Instant Ad-Hoc == Über ein Skript kann ein Ad-Hoc-Netz erzeugt und die vorhandene Internetverbindung über LAN durchgereicht werden. Die Datei '''/etc/network/interfaces''' muss dazu __nicht__ verändert werden. So kann "zwischendurch" schnell mal ein Ad-Hoc-Netzwerk erstellt werden, sollte dies mit dem Network-Manager, wie am Anfang des Artikels beschrieben, verwendet wird. Das Skript kann aber auch problemlos mit dem Network-Manager verwendet werden. Der Manager wird dazu automatisch deaktiviert und auch wieder neu gestartet. Das Skript verwendet [:Dnsmasq:dnsmasq-base] zur Konfiguration. Manuelle Änderungen im Skript wie die verwendeten Schnittstellen und IP-Adressen werden für dnsmasq automatisch übernommen bzw. gemäß der getroffenen Einstellungen generiert. Mit einem Editor [1] oder über Terminal [2] wird das Skript '''instant_AdHoc.sh''' angelegt und ausführbar gemacht. {{{#!vorlage Befehl touch instant_AdHoc.sh chmod +x instant_AdHoc.sh }}} Anschließend folgenden Inhalt mit einem Editor [2] einfügen: {{{#!code bash #!/bin/bash ## Instant Ad-Hoc Modus ## elektronenblitz63 ubuntuusers.de 2011 ## published under GPL v3 ## ## Version 2.5.7 vom 6.November 2011 # Prüfung der Konfiguration verbessert # voreingestellte freie DNS geändert # Startoptionen Fehler beseitigt # Restart des Network-Managers erst bei -stop # ## Version 2.5.6 vom 4.November 2011 # -x Ad-Hoc Netzwerk ohne Verschlüsselung # -c aktiviert MAC-Filter und legt eine Konfigurationsdatei an / vereinfachte Zugangskontrolle bekannter Clients # -C verwendet die über -c angelegte Konfigurationsdatei für MAC-Filterkonfiguration # Delay für einzelne Konfigurationsabschitte einstellbar ## ## Version 2.5.4 vom 1.November 2011 # div. Bugfixes/Syntax # Verbindungstest LAN über Startoption -v abschaltbar ## ## freie Variablen ## ## LAN statisch (Beispiel) (Startoption [-f]) laniface=eth0 laddress=192.168.178.5 lbroadcast=192.168.178.255 lnetmask=255.255.255.0 lgateway=192.168.178.1 ### DNS (drei DNS Einträge, 1x Domain und 1x Search sind möglich) - nur mit Startoption [-f] # Beispiel: # dns="nameserver 192.168.178.1 nameserver 213.73.91.35 nameserver 87.118.100.175 domain fritz.box search fritz.box" dns="nameserver 8.8.4.4 nameserver 8.8.8.8 nameserver 213.73.91.35" ## dnsmasq DNS (manuell) (Startoption [-D]) ## dnsmasq ignoriert dann /etc/resolv.conf mandns=8.8.4.4 ## MAC-Adresse (optional) (Startoption [-m]) lmacaddress=00:12:79:c0:49:ae ## WLAN statisch (Beispiel) ## Einstellungen der WLAN-Schnittstelle wlaniface=wlan0 waddress=192.168.3.1 wbroadcast=192.186.3.255 wnetmask=255.255.255.0 iptablemask=192.168.0.0/24 ## WLAN Konfiguration ## Einstellungen des Ad-Hoc Netzes ## # Verschlüsselung (hex) (128bit/26 Zeichen - 64bit/10 Zeichen) wkey=12345678901234567890ABCdef ## SSID wname="Instant_Ad-Hoc" ## Funkkanal wchannel=1 ## dnsmasq-base Konfiguration # DHCP-Adresspool umfasst x-Adressen ipaddresses=10 # Basisadresse DHCP-Adresspool (WLAN-IP + X) wlanbaseip=10 # Lease-Time leasetime=infinite ## Proxy Server auf Port x proxyport=3128 ## Pause in Sekunden für Konfigurationsparameter ## Vorgabewert 3 configdelay=2 ## Pause in Sekunden vor LAN-Verbindungstest ## Vorgabewert 4 pause=4 ## Konfigurationsdatei bekannte Geräte für MAC-Filter configfile="instant_AdHoc_MAC.conf" #### Ende freie Variablen ## pingout="" ## Prüfung der Konfiguration if [ "$1" != "-stop" ]; then ## prüfe Basiskonfiguration Schnittstellen check_wlaniface="`ifconfig $wlaniface | grep Link | awk {'print $1'}`" check_laniface="`ifconfig $laniface | grep Link | awk {'print $1'}`" if [ "$check_wlaniface" = $wlaniface ]; then echo "WLAN-Interface" $wlaniface "gefunden. Setze Konfiguration fort." else echo "WLAN-Interface" $wlaniface "nicht gefunden! Breche Konfiguration ab." exit 0 fi if [ "$check_laniface" = $laniface ]; then echo "LAN-Interface" $laniface "gefunden. Setze Konfiguration fort." else echo "LAN-Interface" $laniface "nicht gefunden! Breche Konfiguration ab." exit 0 fi ## Plausibilitätsprüfung WEP-Schlüssel keycheck="`echo $wkey | egrep -o [A-Fa-f0-9]`" keycheck="`echo $keycheck | tr -d " "`" keylenght="`expr length $keycheck | egrep -wo '10|26'`" keylenght=$[keylenght +1] if [ $keycheck != $wkey ]; then echo "Unzulässige Zeichen im WEP-Schlüssel. [a-f] [A-F] [0-9] (hex-Code) sind erlaubt" exit elif [ $keylenght = 1 ]; then echo "Länge des gewählten WEP-Schlüssels fehlerhaft, 10 Zeichen (64bit) oder 26 Zeichen (128bit) sind erlaubt" exit fi echo "Plausibilitätsprüfung des WEP-Schlüssels abgeschlossen. Setze Konfiguration fort." fi ## Konfiguration der Startoptionen ## benötigte Optionen können an dieser Stelle auch fest vorgegeben werden A=1 B=0 C=0 D=0 E=0 F=0 H=0 P=0 V=0 X=0 ## hier keine Änderungen vornehmen! while getopts ":dfmcCDPhvx" OPTION ; do case $OPTION in d) echo "konfiguriere LAN über DHCP"; A=1;; f) echo "konfiguriere LAN statisch"; A=2;; m) echo "MAC-Adressänderung LAN ein"; B=1;; c) echo "MAC-Filter WLAN ein"; C=1;; C) echo "MAC-Filter WLAN ein, verwende Konfigurationsdatei"; C=2;; D) echo "manueller DNS"; D=1;; P) echo "Portumleitung für Proxy aktiviert"; P=1;; h) echo "Hilfe angefordert"; H=1;; v) echo "Verbindungstest über Ping abgeschaltet"; V=1;; x) echo "Verschlüsselung abgeschaltet"; X=1;; esac done ## Ausgabe Hilfetext if [ "$H" = "1" ]; then echo Verwendung: instant_AdHoc.sh [-start] [-restart] [-stop] [-d] [-f] [-m] [-e] [-c] [-C] [-v] [-h] [-D] [-x] echo Syntax: echo "sudo ./instant_AdHoc.sh startet mit Standardparametern, wie [-start][-d]" echo "sudo ./instant_AdHoc.sh -d startet mit Standardparametern, wie [-start]" echo "sudo ./instant_AdHoc.sh -f statische LAN-Konfiguration" echo "sudo ./instant_AdHoc.sh -x ohne WEP Verschlüsselung" echo "sudo ./instant_AdHoc.sh -c aktiviert MAC-Adressfilter" echo "sudo ./instant_AdHoc.sh -C aktiviert MAC-Adressfilter. Verwendet angelegte konfigurationsdatei." echo "sudo ./instant_AdHoc.sh -v deaktiviert den aut. Verbindungstest (LAN) mittels Ping" echo "sudo ./instant_AdHoc.sh -f -m statische LAN-Konfiguration, MAC-Änderung" echo "sudo ./instant_AdHoc.sh -f -m -c statischer LAN-Konfiguration, MAC-Änderung, MAC-Filter" echo "sudo ./instant_AdHoc.sh -start -f statische LAN-Konfiguration" echo "sudo ./instant_AdHoc.sh -restart -f statische LAN-Konfiguration" echo "sudo ./instant_AdHoc.sh -restart -d -D automatische LAN-Konfiguration über DHCP, dnsmasq ignoriert System-DNS" echo "bei Option [-D] ignoriert dnsmasq die Einträge der /etc/resolv.conf" echo "sudo ./instant_AdHoc.sh -restart -f -m -c statische LAN-Konfiguration, MAC-Änderung, MAC-Filter" echo "sudo ./instant_AdHoc.sh -P Portumleitung für Proxyserver (Squid)" echo "sudo ./instant_AdHoc.sh -stop beendet das Ad-Hoc Netzwerk" echo "Ende" exit fi echo "Instant Ad-Hoc Netzwerkkonfiguration" echo "Starte gewählte Konfiguration ..." sleep 2 ## Abfrage der Konfigurationsdatei für berechtigten Clients bei Option -C cconfig="" path="`pwd`""/" cconfig="`grep "Client(s) erfasst" $path$configfile | awk {'print $1'}`" if [ "$cconfig" != "" ] && [ "$C" = "2" ]; then ipaddresses=$cconfig fi ## aut. Adressberechnung DHCP-Range für dnsmasq ## gemäß Vorgabe WLAN-Schnittstelle ipaddresses=$[$ipaddresses+$wlanbaseip] baseendaddr="`echo $waddress | tr -s . " " | awk {'print $4'}`" basestartaddr="`echo $waddress | tr -s . " " | awk {'print $1,$2,$3'} | tr -s " " .`" endaddr="$basestartaddr""."$[$startaddr+$ipaddresses] startaddr="$basestartaddr""."$[$baseendaddr+$wlanbaseip] ipaddresses=$[$ipaddresses-1] if [ "$1" != "-start" ]; then echo "Stoppe alle Dienste, Port-Forwarding, entferne Paketfilter und beende Verbindungen ..." # iptables Filter löschen /sbin/iptables -F /sbin/iptables -X /sbin/iptables -t nat -F defgw="`route -n | grep UG | awk {'print $2'}`" /sbin/route del default gw $defgw $laniface echo '' | tee /etc/resolv.conf /sbin/ifconfig $wlaniface down sleep $configdelay /sbin/iwconfig $wlaniface mode managed /sbin/ifconfig $laniface down /usr/bin/killall dnsmasq /sbin/sysctl -w net.ipv4.ip_forward=0 service squid stop sleep $configdelay ## Systemprotokollierung auf Standardwerte sed -i 's/:msg, contains, "DHCPREQUEST" syslog/# :msg, contains, "DHCPREQUEST" syslog/g' /etc/rsyslog.conf service rsyslog restart /sbin/modprobe -rfv iptable_nat ipt_MASQUERADE xt_conntrack iptable_filter ## Restart Network-Manager - beende Ad-Hoc Netzwerk if [ "$1" = "-stop" ]; then echo echo "reaktiviere Network-Manager." service network-manager start sleep $configdelay service network-manager restart echo "Ad-Hoc Konfiguration beendet." exit fi fi ## MAC-Adresse abgleichen if [ "$B" = "1" ]; then currentmac="`ifconfig $laniface | grep Adresse | awk {'print $6'}`" echo "Schnittstelle "$laniface", MAC-Adresse: "$currentmac echo "Vorgabe: "$lmacaddress if [ "$currentmac" = "$lmacaddress" ]; then echo "Übereinstimmende MAC-Adresse. Änderungsversuch obsolet." sleep $configdelay else /sbin/ifconfig $laniface down sleep $configdelay /sbin/ip link set dev $laniface addr $lmacaddress sleep $configdelay currentmac="`ifconfig $laniface | grep Adresse | awk {'print $6'}`" echo "Versuche MAC-Adresse zu ändern ..." echo "Schnittstelle "$laniface", MAC-Adresse: "$currentmac if [ "$currentmac" = "$lmacaddress" ]; then echo Änderung der MAC-Adresse erfolgreich! else echo "Änderung der MAC-Adresse nicht erfolgreich!" echo "fahre ohne Änderung fort ..." fi fi fi # Konfiguration LAN echo "Beende Network-Manager" service network-manager stop echo "Starte benötigte Dienste, und Verbindungen ..." sleep $configdelay if [ "$A" = "1" ]; then sleep $configdelay echo echo "Starte automatische LAN-Verbindung über DHCP ..." /sbin/dhclient $laniface else sleep $configdelay echo echo "Starte statische LAN-Konfiguration ..." /sbin/ifconfig $laniface down /sbin/ifconfig $laniface $laddress broadcast $lbroadcast netmask $lnetmask sleep $configdelay ## vorhandene Route ggf. löschen echo "Lösche Default-Gateway ..." defgw="`route -n | grep UG | awk {'print $2'}`" /sbin/route del default gw $defgw $laniface echo echo "Setze Gateway und Route ..." /sbin/route add default gw $lgateway $laniface sleep $configdelay ## DNS eintragen (nur bei statischer Konfiguration - Option [-f]) echo echo "Setze manuell vorgegebene DNS" echo '# erzeugt durch instant_AdHoc.sh' | tee /etc/resolv.conf echo $dns | awk {'print $1,$2'} | tee -a /etc/resolv.conf echo $dns | awk {'print $3,$4'} | tee -a /etc/resolv.conf echo $dns | awk {'print $5,$6'} | tee -a /etc/resolv.conf echo $dns | awk {'print $7,$8'} | tee -a /etc/resolv.conf echo $dns | awk {'print $9,$10'} | tee -a /etc/resolv.conf fi sleep $pause ## Verbindungstest LAN if [ "$V" = "0" ]; then echo "Starte LAN Verbindungstest ..." pingout="`(ping -c1 $lgateway | egrep -wo '100% packet loss')`" if [ "$pingout" = "100% packet loss" ]; then echo "Kann Gateway nicht pingen $pingout - Verbindung fehlgeschlagen!" echo "breche Vorgang ab!" echo "Kabelverbindung oder Konfiguration überprüfen!" /sbin/ifconfig $laniface down echo "Erfasste Vorgabewerte:" echo "Schnittstelle: "$laniface" IP: "$laddress" Broadcast: "$lbroadcast" Netzmaske: "$lnetmask echo "IP-Adresse Gateway: "$lgateway exit fi echo "Verbindungstest erfolgreich!" else echo "Verbindungstest abgeschaltet" fi ## WLAN-Schnittstelle statisch konfigurieren echo "Konfiguriere WLAN, starte WLAN Ad-Hoc Modus ..." /sbin/ifconfig $wlaniface down sleep $configdelay ## mit/ohne Verschlüsselung if [ "$X" = "1" ]; then /sbin/iwconfig $wlaniface mode Ad-Hoc essid $wname channel $wchannel else /sbin/iwconfig $wlaniface mode Ad-Hoc essid $wname key $wkey channel $wchannel sleep $configdelay fi /sbin/ifconfig $wlaniface $waddress broadcast $wbroadcast netmask $wnetmask sleep $configdelay /sbin/ifconfig $wlaniface up sleep $configdelay ## force Mode and SSID ## Optional/testing # /sbin/iwconfig $wlaniface mode Ad-Hoc essid $wname # sleep $configdelay ## Systemkonfiguration iptables und IP-Forwarding echo "Starte IP-Forward, Masquerading und NAT" /sbin/iptables -A FORWARD -o $laniface -i $wlaniface -s $iptablemask -m conntrack --ctstate NEW -j ACCEPT /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -t nat -A POSTROUTING -o $laniface -j MASQUERADE /sbin/sysctl -w net.ipv4.ip_forward=1 ## dnsmasq starten echo "Starte dnsmasq" echo "DHCP-Range dnsmasq-base - Startadresse: "$startaddr" Endadresse: "$endaddr echo /usr/bin/killall dnsmasq if [ "$D" = "0" ]; then /usr/sbin/dnsmasq -i $wlaniface -I $laniface -F $startaddr,$endaddr,$leasetime else /usr/sbin/dnsmasq -i $wlaniface -I $laniface -F $startaddr,$endaddr,$leasetime -R -S $mandns echo "DNS Systemeinstellung wird ignoriert, dnsmasq verwendet DNS: "$mandns fi ## Portumleitung für Squid Proxyserver if [ "$P" = "1" ]; then /sbin/iptables -t nat -A PREROUTING -i $wlaniface -p tcp --dport 80 -j REDIRECT --to-port $proxyport echo "Port 80 $wlaniface auf Port $proxyport umgeleitet (Squid Proxyserver)" echo "Starte Squid Proxyserver ..." sleep $configdelay service squid start -n fi ## Ausgabe der Konfiguration. Einstellungen der Schnittstellen, ## Routingtabelle und DNS prüfen echo "Aktuelle Konfiguration ..." if [ "$A" = "2" ]; then echo "vorgegebene DNS: "$dns fi echo echo "Systemkonfiguration: /etc/resolv.conf" /bin/cat /etc/resolv.conf echo echo "Systemkonfiguration: Routingtabelle" /sbin/route -n echo echo "Konfiguration LAN:" /sbin/ifconfig $laniface | egrep 'Link|inet Adresse' echo echo "Konfiguration WLAN (IP-Einstellungen und Modus):" /sbin/ifconfig $wlaniface | egrep 'Link|inet Adresse' echo echo "warte 10 Sekunden ..." sleep 10 /sbin/iwconfig $wlaniface | egrep 'IEEE|Mode' echo "Basiskonfiguration abgeschlossen." ## Ende Standardkonfiguration ## MAC-Adressfilter / Anmeldung der Clients maccount=0 ## Konfigurationsdatei auslesen if [ "$C" = "2" ]; then echo echo "MAC-Adressfilter aktiviert" echo "Verarbeite Konfigurationsdatei ""`pwd`"/$configfile for i in {1..50} do mac="`grep "MAC $i" instant_AdHoc_MAC.conf | awk {'print $4'}`" if [ "$mac" = "" ]; then echo "Konfiguration beendet." /sbin/iptables -A INPUT -i $wlaniface -j DROP exit 0 else /sbin/iptables -A INPUT -i $wlaniface -m mac --mac-source $mac -j ACCEPT echo "Erlaube Verbindung für Client "$mac fi done fi ## erforderliche Protokollierung des Systems aktivieren ## erstellen der Konfigurationsdatei if [ "$C" = "1" ]; then echo echo "MAC-Adressfilter aktiviert. Starte Erfassung der Clients" echo "Aktiviere erforderliche Systemprotokollierung" logfilter="`(grep ':msg, contains, "DHCPREQUEST" syslog' /etc/rsyslog.conf)`" if [ "$logfilter" = "" ]; then echo ':msg, contains, "DHCPREQUEST" syslog' | tee -a /etc/rsyslog.conf else sed -i 's/# :msg, contains, "DHCPREQUEST" syslog/:msg, contains, "DHCPREQUEST" syslog/g' /etc/rsyslog.conf service rsyslog restart sleep $configdelay fi ## MAC-Filter / Geräteadressen erfassen /sbin/sysctl -w net.ipv4.ip_forward=0 echo echo "Basiskonfiguration beendet. MAC-Adressfilter aktiviert. Warte auf Clients ..." echo "## Erfasste Adressen" > "`pwd`"/$configfile else exit 0 fi while true do input="none" iprequest="`(tail -n3 /var/log/syslog | grep DHCPREQUEST | awk {'print $8'})`" if [ "$iprequest" != "" ]; then echo "Berechtigungsanfrage!" echo -n "Soll dem Gerät mit der MAC-Adresse "$iprequest" der Zugang gestattet werden? [y/n] " read input if [ "$input" = "y" ]; then timestamp="`date`" echo $timestamp" ICS Instant Ad-Hoc. Zugangsanfrage erkannt" | tee -a /var/log/syslog echo $timestamp" ICS Instant Ad-Hoc. Gestatte WLAN-Zugang für Client "$iprequest | tee -a /var/log/syslog maccount=$[$maccount+1] echo "MAC "$maccount" - "$iprequest >> "`pwd`"/$configfile /sbin/iptables -A INPUT -i $wlaniface -m mac --mac-source $iprequest -j ACCEPT fi if [ "$input" = n ]; then echo "verweigere Zugang für "$iprequest echo "warte auf Clients ..." fi if [ "$maccount" != "0" ]; then echo -n "Soll weiteren Clients eine Verbindung gestattet werden ? [y/n] " read input fi if [ "$input" = "n" ]; then echo $maccount " Client(s) erfasst, beende Konfiguration!" echo "aktiviere IP-Forwarding" /sbin/sysctl -w net.ipv4.ip_forward=1 /sbin/iptables -A INPUT -i $wlaniface -j DROP echo "## Anzahl erfasster Clients" >> "`pwd`"/$configfile echo $maccount" Client(s) erfasst" >> "`pwd`"/$configfile exit else echo "warte auf Clients ..." fi fi sleep 6 done exit 0 }}} Die verwendeten Schnittstellen für LAN und WLAN, sowie die gewünschten IP-Adressen sind ggf. noch anzupassen. Alle erforderlichen Parameter können im Deklarationsblock des Skripts im Abschnitt `## freie Variablen` geändert werden. Im Terminal [2] als `root`[3] kann das Skript nun mit verschiedenen Parametern aufgerufen werden: {{{#!vorlage Befehl sudo ./instant_AdHoc.sh [-start|-restart|-stop] sudo ./instant_AdHoc.sh # startet mit automatischer Konfiguration (wie mit [-start]) sudo ./instant_AdHoc.sh -start # startet alle Verbindungen und Dienste mit automatischer Konfiguration sudo ./instant_AdHoc.sh -restart # erneuert alle Verbindungen und Dienste mit automatischer Konfiguration sudo ./instant_AdHoc.sh -stop # beendet alle Verbindungen und Dienste }}} Zusätzliche Optionen für eine statische Konfiguration der LAN-Schnittstelle, manuelle DNS-Einstellungen, ein MAC-Adressfilter und eine Änderung der MAC-Adresse der LAN-Schnittstelle sind möglich, sollte dies für eine Verbindung erforderlich sein. Das Skript gibt entsprechende Rückmeldungen. Am Ende wird die Konfiguration der LAN- und WLAN-Schnittstelle, sowie die Routingtabelle zur Funktionsprüfung ausgegeben. Beispiele zur Anwendung der Startoptionen: {{{#!vorlage Befehl sudo ./instant_AdHoc.sh [-start|-restart|-stop] [-d] [-f] [-m] [-c] [-C] [-h] [-v] [-D] [-P] [-x] sudo ./instant_AdHoc.sh -h # gibt eine Hilfe zur Syntax aus sudo ./instant_AdHoc.sh -f -c # startet LAN mit statischer Konfiguration und und MAC-Adressfilter sudo ./instant_AdHoc.sh -D # dnsmasq verwendet den angebenen DNS und ignoriert die /etc/resolv.conf sudo ./instant_AdHoc.sh -P # startet Proxyserver Squid sudo ./instant_AdHoc.sh -x # Ad-Hoc unverschlüsselt sudo ./instant_AdHoc.sh -start -d -m # startet LAN mit automatischer Konfiguration und ändert die MAC-Adresse sudo ./instant_AdHoc.sh -start -f -m # startet LAN mit statischer Konfiguration und ändert die MAC-Adresse sudo ./instant_AdHoc.sh -restart -f -c # erneuert alle Verbindungen mit statischer Konfiguration und MAC-Adressfilter sudo ./instant_AdHoc.sh -start -C # startet mit MAC-Adressfilter, verwendet aber die zuvor angelegte Konfigurationsdatei sudo ./instant_AdHoc.sh -start -v # LAN Verbindungstest über Ping deaktiviert sudo ./instant_AdHoc.sh -restart -fmcD # Restart, LAN statisch & MAC-Änderung & MAC-Adressfilter & manueller DNS }}} Die Optionen können beliebig kombiniert werden. Bei Option `-df` wird eine statische Konfiguration, und bei `-fd` eine dynamische Konfiguration der LAN-Schnitstelle ausgeführt, also immer die zuletzt angegebene Option verwendet. Parameter `-stop` erfortert keine Option, bzw. ignoriert diese. Mit `-c` wird ein MAC-Adressfilter aktiviert. Alle Clients müssen sich nacheinander anmelden, bevor die Konfiguration bei der abschließenden Eingabeaufforderung mit einem [[Vorlage(Tasten, N)]] beendet ist und der Internetzugang freigegeben wird. Beispielausgabe: {{{ Basiskonfiguration beendet. MAC-Adressfilter aktiviert. Warte auf Clients ... Berechtigungsanfrage! Soll dem Gerät mit der MAC-Adresse 1c:4b:d6:50:5f:63 der Zugang gestattet werden? [y/n]y ICS Instant Ad-Hoc. Gestatte WLAN-Zugang für 1c:4b:d6:50:5f:63 Soll weiteren Clients eine Verbindung gestattet werden ? [y/n]y warte auf Clients ... Berechtigungsanfrage! Soll dem Gerät mit der MAC-Adresse 00:04:0e:c2:61:ca der Zugang gestattet werden? [y/n]y ICS Instant Ad-Hoc. Gestatte WLAN-Zugang für 00:04:0e:c2:61:ca Soll weiteren Clients eine Verbindung gestattet werden ? [y/n]n 2 Client(s) erfasst, beende Konfiguration. }}} Nun wird die Internetverbindung auf alle angemeldeten Clients weitergeleitet. Die Konfiguration wird im Benutzerverzeichnis in der Textdatei '''instant_AdHoc_MAC.conf''' abgelegt. Bei einem Start des Skripts mit Option `-C` werden die Einstellungen aus dieser Datei übernommen, und die Clients müssen sich nicht erneut manuell anmelden. Der IP-Adresspool des DHCP-Server wird zusätzlich auf die Anzahl der bekannten Clients begrenzt. Sollen weitere Clients erfasst werden, muss das Skript erneut mit Option `-c` gestartet werden um die Konfigurationsdatei neu anzulegen. Die Konfigurationsdatei kann auch manuell mit einem Editor [1] angelegt oder bearbeitet werden. Der Inhalt ist natürlich entsprechend anzupassen. Maximal 50 Adressen werden vom Skript ausgewertet. Beispiel für zwei zugelassene Clients: {{{ ## Erfasste Adressen MAC 1 - 1c:4b:d6:50:5f:63 MAC 2 - 00:04:0e:c2:61:ca ## Anzahl erfasster Clients 2 Client(s) erfasst }}} Nachdem das Skript und alle Dienste beendet, sowie die Einstellungen zurückgesetzt wurden, wird der Network-Manager wieder gestartet und kann wie gewohnt verwendet werden. == Proxyserver == {{{#!vorlage Paketinstallation squid, ein Open-Source Proxyserver und Daten-Cache, siehe [:Squid:] }}} === Squid als Daten-Cache === Zusätzliche Sicherheit erreicht man durch einen Proxyserver wie [:Squid:], mit dem ein Daten-Cache und Web-Filter eingerichtet werden kann. [:Squid:] arbeitet hier als "transparenter" Proxy und reiner Datencache. Über SquidGuard kann ein zusätzlicher Web-Filter eingerichtet werden, die gezeigte Konfigurationsdatei ist entsprechend vorbereitet. Auf den angeschlossenen Clients muss dazu nichts weiter konfiguriert werden, alle Anfragen werden direkt auf den Proxyserver umgeleitet. Nach der Installation wird die squid-Konfigurationsdatei '''/etc/squid/squid.conf''' gesichert und durch folgende Basiskonfiguration ersetzt. {{{#!vorlage Befehl sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak }}} Die Konfigurationsdatei kann nun mit einem [:Editor:] [1] und Root-Rechten [3] bearbeitet werden. Folgender Inalt ist einzufügen: {{{ # SQUID erforderliche Minimalkonfiguration acl all src all acl manager proto cache_object acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 # Example rule allowing access from your local networks. acl localnet src 192.168.0.0/24 # RFC1918 possible internal network # lokale Rechner freigegeben acl lokale_rechner src 192.168.3.0/255.255.255.0 http_access allow lokale_rechner acl SSL_ports port 443 # https acl SSL_ports port 563 # snews acl SSL_ports port 873 # rsync acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager # Only allow purge requests from localhost http_access allow purge localhost http_access deny purge # Deny requests to unknown ports http_access deny !Safe_ports # Deny CONNECT to other than SSL ports http_access deny CONNECT !SSL_ports http_access deny all #Allow ICP queries from local networks only icp_access allow localnet icp_access deny all # verwendeter Port 3128 http_port 192.168.3.1:3128 transparent # deutsche Fehlermeldungen geblockte Seiten usw. error_directory /usr/share/squid/errors/de # Tag: Programmumleitung zu Squid-Guard / hier deaktiviert # redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf access_log /var/log/squid/access.log squid # Speicherverwaltung cache_dir ufs /var/spool/squid 2000 16 256 cache_replacement_policy heap LFUDA memory_replacement_policy heap LFUDA maximum_object_size 5000 KB maximum_object_size_in_memory 32 KB cache_mem 32 MB }}} Diese Konfiguration kann ebenfalls direkt mit dem hier gezeigten Skript '''instant_AdHoc.sh''' mit der Startoption `-P` verwendet werden. Bei einer manuellen Konfiguration über die Datei [:interfaces:/etc/network/interfaces] muss eine entsprechende Portweiterleitung und der Startbefehl für Squid nachgetragen werden. {{{ ... up service squid stop post-up /sbin/iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -j REDIRECT --to-port 3128 post-up service squid start -n }}} Die Konfiguration auf ist damit abgeschlossen. === Squid mit NCSA Authentifikation === Hier soll zunächst gezeigt werden wie damit eine zusätzliche Authentifikation über den Benutzernamen und ein Kennwort eingerichtet wird. Ein transparenter Proxy-Server kann in diesem Fall nicht verwendet werden. Es werden zusätzlich folgende Programmpakete benötigt: {{{#!vorlage Paketinstallation apache2-utils , Hilfsprogramme um u.a. Kennwortdateien anlegen und verwalten zu können }}} Nach der Installation wird die squid-Konfigurationsdatei '''/etc/squid/squid.conf''' gesichert und durch folgende Basiskonfiguration ersetzt. {{{#!vorlage Befehl sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak }}} Die Konfigurationsdatei kann nun mit einem [:Editor:] [1] und Root-Rechten [3] bearbeitet werden. Folgender Inhalt ist einzufügen: {{{ # SQUID erforderliche Minimalkonfiguration acl all src all acl manager proto cache_object acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 # Example rule allowing access from your local networks. acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/24 # RFC1918 possible internal network acl SSL_ports port 443 # https acl SSL_ports port 563 # snews acl SSL_ports port 873 # rsync acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT # Authetifikation auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd auth_param basic realm Benutzerauthentifizierung fuer den Internetzugang auth_param basic casesensitive off auth_param basic children 5 acl kennwort proxy_auth REQUIRED http_access allow kennwort http_access allow manager localhost http_access deny manager # Only allow purge requests from localhost http_access allow purge localhost http_access deny purge # Deny requests to unknown ports http_access deny !Safe_ports # Deny CONNECT to other than SSL ports http_access deny CONNECT !SSL_ports http_access deny all #Allow ICP queries from local networks only icp_access allow localnet icp_access deny all # verwendeter Port 3128 http_port 192.168.3.1:3128 # deutsche Fehlermeldungen geblockte Seiten usw. error_directory /usr/share/squid/errors/de # Tag: Programmumleitung zu Squid-Guard / hier deaktiviert # redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf access_log /var/log/squid/access.log squid # Speicherverwaltung cache_dir ufs /var/spool/squid 2000 16 256 cache_replacement_policy heap LFUDA memory_replacement_policy heap LFUDA maximum_object_size 5000 KB maximum_object_size_in_memory 32 KB cache_mem 32 MB }}} Nun muss noch die erfoderliche Kennwortdatei '''/etc/squid/passwd''' angelegt werden. Dazu wird das Werkzeug htpasswd aus dem installierten Paket '''apache2-utils''' verwendet. {{{#!vorlage Befehl sudo htpasswd -bc /etc/squid/passwd # Option -c erzeugt die Datei, bzw. legt diese neu an sudo htpasswd -b /etc/squid/passwd # weitere Benutzer anlegen oder das Kennwort vorhandener Benutzer ändern }}} Beispiel: {{{#!vorlage Befehl sudo htpasswd -bc /etc/squid/passwd stefan stefanskennwort # Datei erzeugen, ersten Eintrag anlegen sudo htpasswd -b /etc/squid/passwd peter peterskennwort # weitere Einträge anlegen oder ändern sudo htpasswd -b /etc/squid/passwd manuela manuelaskennwort # weitere Einträge anlegen oder ändern }}} Diese Konfiguration kann direkt mit dem hier gezeigten Skript '''instant_AdHoc.sh''' mit der Startoption `-P` verwendet werden. Bei einer manuellen Konfiguration über die Datei [:interfaces:/etc/network/interfaces] muss eine entsprechende Portweiterleitung und der Startbefehl für Squid nachgetragen werden. {{{ ... up service squid stop post-up /sbin/iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -j REDIRECT --to-port 3128 post-up service squid start -n }}} Die Konfiguration auf dem Host-Rechner ist damit abgeschlossen. [[Bild(./Proxy-EinstellungenFF.png, 110, align=right)]] [[Bild(./Proxy-Einstellungen.png, 110, align=right)]] === Konfiguration der Clients === Damit auf den angeschlossenen Clients die Kennwortabfrage wirksam werden kann und der WEB-Zugriff ermöglicht wird, müssen die Proxy-Einstellungen Systemweit angewandt werden. Dazu wird über das Menü in ''"System -> Einstellungen -> Netzwerk-Proxy"'' die IP-Adresse des Host, in unserem Fall `192.168.3.1` und der verwendete Port `3128` eingetragen. Die Einstellungen müssen dann ''"Systemweit übernommen"'' werden. Der Browser [:Firefox:] und auch der Mail-Client [:Thunderbird:] muss separat konfiguriert werden. Bei den erweiterten Einstellungen, Registerkarte ''"Netzwerk"'' ist ''"Proxyeinstellungen des Systems verwenden"'' auszuwählen. Bei Anwahl einer beliebigen Webseite wird nun zunächst nach dem Benutzernamen und dem Kennwort gefragt. = Zusatzinformationen = * [wikipedia:Wireless_Local_Area_Network#Frequenzen_und_Kan.C3.A4le:Frequenzeinstellungen] * [https://linuxwiki.de/dnsmasq dnsmasq] - Tipps und Tricks auf linuxwiki.de {de} = Links = * [:Internet_und_Netzwerk:] und [:Netzwerk:] {Übersicht} - Übersichten zu verschiedenen Netzwerkthemen * [:Router:] * [:WLAN:] {Übersicht} - alles rund um Wireless LAN * [:WLAN Router:] * [:Heimnetzwerk:] - Daten in einem LAN austauschen #tag: Netzwerk, Internet, WLAN