Created
February 6, 2017 10:52
-
-
Save gylns/e10edcad6b1b09e79db64fe0fb6efb10 to your computer and use it in GitHub Desktop.
Revisions
-
gylns created this gist
Feb 6, 2017 .There are no files selected for viewing
This file contains hidden or 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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,151 @@ #!/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