From 4687983a57d1acdcb90e39de555d04d8b1ced795 Mon Sep 17 00:00:00 2001 From: ache Date: Sat, 17 Feb 2018 00:28:46 +0100 Subject: [autoDHCP] ake iptables --- autoDHCP.sh | 80 ++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 56 insertions(+), 24 deletions(-) diff --git a/autoDHCP.sh b/autoDHCP.sh index f6e144d..7b39de3 100755 --- a/autoDHCP.sh +++ b/autoDHCP.sh @@ -3,21 +3,58 @@ interface=""; server="dhcpd" ip="10.5.5.11" -range="/24" +range="24" +interface_internet="" -# Todo : List interface ✓ +# Todo : List interface ✓ # Select first ✓ # Select dhcpd or dnsmasq ✓ # Select ip range ✓ # Select ip ✓ # Help ✓ # Install from Makefile ✓ +# Add support for tethapp +# dnsmasq config overwrite # Default interface is the first non-wireless interfaces (sorted alpha-num) +function guess_nowifi { + for i in `ls /sys/class/net/`; do + if [ ! -d "/sys/class/net/$i/wireless" ] ; then + if [ "$interface" ] ; then + if [[ "$i" < "$înterface" ]] ; then + interface="$i" + fi + else + interface="$i" + fi + fi + done +} +function guess_internet { + echo $(ip route show | grep 'default' | \ + sed 's/.*dev/dev/' | sed 's/scope//' | \ + sed 's/src \([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}//g' | \ + sed 's/link//' | + tr -s ' ' | + cut -d' ' -f 2) +} + + + + + + if [ "$1" == "dns" ] ; then server="dnsmasq" shift +elif [ "$1" == "teth" ] ; then + interface_internet=$(guess_internet) + shift +elif [ "$1" == "teth_dns" ] ; then + interface_internet=$(guess_internet) + server="dnsmasq" + shift fi if [ "$1" == "help" -o "$1" == "-h" -o "$1" == "--help" ] ; then @@ -52,36 +89,22 @@ if [ "$3" == "dns" ] ; then server="dnsmasq" fi +IFS='.' read -r -a ipList <<< "$ip" +mask=$(( 4294967295 >> 32-${range} << 32-${range} )) +ipRaw=$(( ipList[0]*2**24 + ipList[1]*2**16 + ipList[2]*2**8 + ipList[3] )) +ipNetRaw=$(( ipRaw & mask )) - - - - - -function guess_nowifi { - for i in `ls /sys/class/net/`; do - if [ ! -d "/sys/class/net/$i/wireless" ] ; then - if [ "$interface" ] ; then - if [[ "$i" < "$înterface" ]] ; then - interface="$i" - fi - else - interface="$i" - fi - fi - done -} - - +ipNet="$(( ipNetRaw >> 24 )).$(( ipNetRaw >> 16 & 255 )).$(( ipNetRaw >> 8 & 255)).$(( ipNetRaw & 255))" if [ -z "$interface" ] ; then - guess_nowifi + guess_nowifi fi sudo ip l set "$interface" up sudo ip a r "${ip}/${range}" dev "$interface" +#sudo ip r a "${ip}/${range}" dev "$interface" src "${ip}" -if [ "$server" == "dhcpd" ] ; then +if [ "$server" == "dhcpd" ] ; then sudo /usr/bin/dhcpd -4 -q -pf /run/dhcpd4.pid "$interface" elif [ "$server" == "dnsmasq" ] ; then @@ -107,4 +130,13 @@ else echo "Server name ${server} unknow" fi + +if [ -n "$interface_internet" ] ; then + echo "Routage des connections internet (${interface_internet} => ${interface})" + sudo iptables -t nat -A POSTROUTING -o "${interface_internet}" -j MASQUERADE + sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT + sudo iptables -A FORWARD -i "${interface}" -o "${interface_internet}" -j ACCEPT +fi + + echo 'Should be ready ;)' -- cgit v1.2.3