#!/bin/bash
source "$(dirname $0)/seminarnet.settings";
devices=$(ip -o link show | grep -P '[0-9]: en' | cut -d ' ' -f2 | tr -d ':');
ipPattern=$(echo "inet ${ip}" | sed -e 's/\./\\./g');
for device in $devices; do
#echo "ip -o address show dev ${device}";
c=$(ip -o address show dev ${device} | grep -P "${ipPattern}" | wc -l);
if [ "1" = "${c}" ]; then
echo "Die IP-Adresse ${ip} ist schon an das Gerät '${device}' vergeben.";
exit;
fi
done
ip link set ${localnetDev} up
ip address add ${ip}/${netmask} dev ${localnetDev};
systemctl start isc-dhcp-server;
## Wenn der DNS nicht verwendbar ist:
#dnsproxy -dc /etc/dnsproxy.conf &
## Starten der Proxy-Server
systemctl start privoxy;
systemctl start squid;
## Starten des Routings:
sysctl -w net.ipv4.ip_forward=1 > /dev/null;
## Firewall-Settings für das Routing und NAT
iptables -A FORWARD -o ${internetDev} -i ${localnetDev} -s ${net}/${netmask} -m conntrack --ctstate NEW -j ACCEPT;
iptables -A FORWARD -i ${internetDev} -o ${localnetDev} -s 0.0.0.0/0 -m conntrack --ctstate NEW -j ACCEPT;
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT;
## Starten des NAT
iptables -t nat -A POSTROUTING -o ${internetDev} -j MASQUERADE;
## Route zu den virtuellen Maschinen
route add -net ${net}/${netmask} gw ${ip};
## Ausgaben:
ownIP=$(ip address show ${internetDev} | grep 'inet ' | cut -d ' ' -f6);
echo "Das Testnetz wurde auf dem Gerät '${localnetDev}' mit der Adresse '${net}/${netmask}' gestartet. DNS, Router und Proxy ist '${ip}', erreichbar via ${internetDev} (${ownIP}).";