aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorache <ache@ache.one>2018-02-17 00:28:46 +0100
committerache <ache@ache.one>2018-02-17 00:28:46 +0100
commit4687983a57d1acdcb90e39de555d04d8b1ced795 (patch)
treec3622c64770992bb143fb6081d50f0e3d27b6465
parentRefactoring tethapp (diff)
[autoDHCP] ake iptables
-rwxr-xr-xautoDHCP.sh80
1 files 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 ;)'