Created
February 6, 2017 10:52
-
-
Save gylns/e10edcad6b1b09e79db64fe0fb6efb10 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
sudo apt-get install isc-dhcp-server -y | |
set interfaces | |
set addresses | |
set ip | |
# Find network interfaces | |
function find_interfaces() | |
{ | |
local ip_result=$(ip link | awk '{print $2}') | |
ip_result=($ip_result) | |
local counter=0 | |
while [ $counter -lt "${#ip_result[@]}" ] | |
do | |
interface="${ip_result[$counter]}" | |
if [ "$interface" == "lo:" ]; then counter=$[$counter +2]; continue; fi | |
interface=${interface::-1} | |
interfaces+=($interface) | |
counter=$[$counter +1] | |
mac="${ip_result[$counter]}" | |
addresses+=($mac) | |
counter=$[$counter +1] | |
done | |
} | |
# Find network interfaces | |
function display_interfaces() | |
{ | |
counter=0 | |
while [ $counter -lt "${#interfaces[@]}" ] | |
do | |
echo "To use ${interfaces[$counter]} enter $counter" | |
counter=$[$counter +1] | |
done | |
} | |
# Test an IP address for validity | |
function valid_ip() | |
{ | |
ip=$1 | |
local stat=1 | |
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then | |
OIFS=$IFS | |
IFS='.' | |
ip=($ip) | |
IFS=$OIFS | |
[[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \ | |
&& ${ip[2]} -le 255 && ${ip[3]} -le 252 && ${ip[3]} -ge 1 ]] | |
stat=$? | |
fi | |
return $stat | |
} | |
set -e | |
echo "Looking for network interfaces..." | |
find_interfaces | |
if [ "${#interfaces[@]}" == "0" ] | |
then | |
echo "No network interfaces found, please check your system" | |
exit | |
fi | |
echo "Found ${#interfaces[@]} interfaces $interfaces" | |
echo "Choose the network interface to be used" | |
display_interfaces | |
iface=-1 | |
while [[ "$iface" -ge "${#interfaces[@]}" || "$iface" -le "-1" ]]; do | |
read -p "Ethernet interface " iface | |
done | |
ip_state="bad" | |
while [ "$ip_state" == "bad" ]; do | |
read -p "IP address " subnet | |
if valid_ip $subnet; then ip_state="good"; break; else echo "Please provide a valid IP address in [X.X.X.1 X.X.X.252]"; fi | |
done | |
# Create /etc/network/interfaces | |
if [ -e /etc/network/interfaces ] | |
then | |
sudo mv /etc/network/interfaces /etc/network/interfaces.bak | |
sudo touch /etc/network/interfaces | |
fi | |
echo "# interfaces(5) file used by ifup(8) and ifdown(8) | |
auto lo | |
iface lo inet loopback | |
allow-hotplug ${interfaces[$iface]} | |
iface ${interfaces[$iface]} inet static | |
address $subnet | |
netmask 255.255.255.0 | |
post-up service isc-dhcp-server restart" > /etc/network/interfaces | |
sudo chown root:root /etc/network/interfaces | |
sudo chmod 644 /etc/network/interfaces | |
if [ -e /etc/default/isc-dhcp-server ] | |
then | |
sudo mv /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.bak | |
sudo touch /etc/default/isc-dhcp-server | |
fi | |
echo "INTERFACES=\"${interfaces[$iface]}\"" > /etc/default/isc-dhcp-server | |
sudo chown root:root /etc/default/isc-dhcp-server | |
sudo chmod 644 /etc/default/isc-dhcp-server | |
# Create /etc/dhcp/dhcpd.conf | |
if [ -e /etc/dhcp/dhcpd.conf ] | |
then | |
sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak | |
sudo touch /etc/dhcp/dhcpd.conf | |
fi | |
echo "# | |
# Simple configuration file for ISC dhcpd for Debian | |
# | |
ddns-update-style none; | |
option domain-name \"example.org\"; | |
option domain-name-servers ns1.example.org, ns2.example.org; | |
log-facility local7; | |
subnet ${ip[0]}.${ip[1]}.${ip[2]}.0 netmask 255.255.255.0 { | |
range ${ip[0]}.${ip[1]}.${ip[2]}.$[${ip[3]} +1] ${ip[0]}.${ip[1]}.${ip[2]}.254; | |
option routers $subnet; | |
default-lease-time 345600; | |
max-lease-time 31557600; | |
}" > /etc/dhcp/dhcpd.conf | |
sudo chown root:root /etc/dhcp/dhcpd.conf | |
sudo chmod 644 /etc/dhcp/dhcpd.conf | |
# Make the chosen interface unmanaged | |
if [ -e /etc/NetworkManager/NetworkManager.conf ] | |
then | |
sudo mv /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.bak | |
sudo touch /etc/NetworkManager/NetworkManager.conf | |
fi | |
echo "[main] | |
plugins=ifupdown,keyfile,ofono | |
dns=dnsmasq | |
[ifupdown] | |
managed=false | |
[keyfile] | |
unmanaged-devices=mac:${addresses[$iface]} | |
" > /etc/NetworkManager/NetworkManager.conf | |
sudo chown root:root /etc/NetworkManager/NetworkManager.conf | |
sudo chmod 644 /etc/NetworkManager/NetworkManager.conf |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment