Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save carlcarl/1ec16009a525ef8d9c6d to your computer and use it in GitHub Desktop.

Select an option

Save carlcarl/1ec16009a525ef8d9c6d to your computer and use it in GitHub Desktop.

Revisions

  1. @dashohoxha dashohoxha revised this gist Jun 9, 2014. 1 changed file with 5 additions and 0 deletions.
    5 changes: 5 additions & 0 deletions install_wifi_access_point.sh
    Original file line number Diff line number Diff line change
    @@ -135,6 +135,11 @@ function stop_wifi_ap {
    function start_wifi_ap {
    stop_wifi_ap
    sleep 3
    ### see: https://bugs.launchpad.net/ubuntu/+source/wpa/+bug/1289047/comments/8
    nmcli nm wifi off
    rfkill unblock wlan
    ### give a static IP to the wifi interface
    ip link set dev $wifi_interface up
  2. @dashohoxha dashohoxha revised this gist Sep 11, 2013. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions install_wifi_access_point.sh
    Original file line number Diff line number Diff line change
    @@ -46,6 +46,7 @@ read -p "The password of your hosted network [$password]: " input
    password=${input:-$password}

    ### get wifi interface
    rfkill unblock wifi # enable wifi in case it is somehow disabled (thanks to Darrin Wolf for this tip)
    wifi_interface=$(lshw -quiet -c network | sed -n -e '/Wireless interface/,+12 p' | sed -n -e '/logical name:/p' | cut -d: -f2 | sed -e 's/ //g')

    ### create /etc/hostapd/hostapd.conf
  3. @dashohoxha dashohoxha revised this gist Jun 21, 2013. 1 changed file with 13 additions and 5 deletions.
    18 changes: 13 additions & 5 deletions install_wifi_access_point.sh
    Original file line number Diff line number Diff line change
    @@ -127,12 +127,19 @@ function stop_wifi_ap {
    sed -i /etc/network/interfaces -e '/auto $wifi_interface/,\$ d'
    sed -i /etc/network/interfaces -e '\$ d'
    fi
    ### restart network manager to takeover wifi management
    service network-manager restart
    }
    function start_wifi_ap {
    stop_wifi_ap
    ### give a static IP to the wifi interface
    ip link set dev $wifi_interface up
    ip address add 10.10.0.1/24 dev $wifi_interface
    ### protect the static IP from network-manger restart
    echo >> /etc/network/interfaces
    echo 'auto $wifi_interface' >> /etc/network/interfaces
    echo 'iface $wifi_interface' inet static >> /etc/network/interfaces
    @@ -157,11 +164,12 @@ EOF

    chmod +x /etc/init.d/wifi_access_point

    read -p 'Start wifi access point automatically on boot? [y/N]: ' input
    if [ "$input" = "y" ]
    then
    update-rc.d wifi_access_point defaults
    fi
    ### make sure that it is stopped on boot
    sed -i /etc/rc.local \
    -e '/service wifi_access_point stop/ d'
    sed -i /etc/rc.local \
    -e '/^exit/ i service wifi_access_point stop'


    ### display usage message
    echo "
  4. @dashohoxha dashohoxha revised this gist Jun 13, 2013. 1 changed file with 3 additions and 4 deletions.
    7 changes: 3 additions & 4 deletions install_wifi_access_point.sh
    Original file line number Diff line number Diff line change
    @@ -45,14 +45,13 @@ password='1234567890'
    read -p "The password of your hosted network [$password]: " input
    password=${input:-$password}

    ### get wifi interface and driver
    ### get wifi interface
    wifi_interface=$(lshw -quiet -c network | sed -n -e '/Wireless interface/,+12 p' | sed -n -e '/logical name:/p' | cut -d: -f2 | sed -e 's/ //g')
    wifi_driver=$(lshw -quiet -c network | sed -n -e '/Wireless interface/,+12 p' | sed -n -e '/configuration:/p' | tr ' ' "\n" | sed -n -e '/driver=/p' | cut -d= -f2)

    ### create /etc/hostapd/hostapd.conf
    cat <<EOF > /etc/hostapd/hostapd.conf
    interface=$wifi_interface
    driver=$wifi_driver
    driver=nl80211
    ssid=$ssid
    hw_mode=g
    channel=1
    @@ -174,4 +173,4 @@ You can start and stop it with:
    service wifi_access_point start
    service wifi_access_point stop
    "
    "
  5. @dashohoxha dashohoxha created this gist Jun 12, 2013.
    177 changes: 177 additions & 0 deletions install_wifi_access_point.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,177 @@
    #!/bin/bash
    ### Setup a wifi Access Point on Ubuntu 12.04 (or its derivatives).

    ### make sure that this script is executed from root
    if [ $(whoami) != 'root' ]
    then
    echo "
    This script should be executed as root or with sudo:
    sudo $0
    "
    exit 1
    fi

    ##############################################################
    ## Check whether the wireless card supports Access Point mode
    ##############################################################

    ### make sure that iw is installed
    apt-get -y install iw

    ### check that AP is supported
    supports_access_point=$(iw list | sed -n -e '/* AP$/p')
    if [ "$supports_access_point" = '' ]
    then
    echo "AP is not supported by the driver of the wireless card."
    echo "This script does not work for this driver."
    exit 1
    fi

    ##############################################################
    ## Setup and host a network
    ##############################################################

    ### install hostapd
    apt-get -y install hostapd

    ### it should not start automatically on boot
    update-rc.d hostapd disable

    ### get ssid and password
    ssid=$(hostname --short)
    read -p "The name of your hosted network (SSID) [$ssid]: " input
    ssid=${input:-$ssid}
    password='1234567890'
    read -p "The password of your hosted network [$password]: " input
    password=${input:-$password}

    ### get wifi interface and driver
    wifi_interface=$(lshw -quiet -c network | sed -n -e '/Wireless interface/,+12 p' | sed -n -e '/logical name:/p' | cut -d: -f2 | sed -e 's/ //g')
    wifi_driver=$(lshw -quiet -c network | sed -n -e '/Wireless interface/,+12 p' | sed -n -e '/configuration:/p' | tr ' ' "\n" | sed -n -e '/driver=/p' | cut -d= -f2)

    ### create /etc/hostapd/hostapd.conf
    cat <<EOF > /etc/hostapd/hostapd.conf
    interface=$wifi_interface
    driver=$wifi_driver
    ssid=$ssid
    hw_mode=g
    channel=1
    macaddr_acl=0
    auth_algs=1
    ignore_broadcast_ssid=0
    wpa=3
    wpa_passphrase=$password
    wpa_key_mgmt=WPA-PSK
    wpa_pairwise=TKIP
    rsn_pairwise=CCMP
    EOF

    ### modify /etc/default/hostapd
    cp -n /etc/default/hostapd{,.bak}
    sed -i /etc/default/hostapd \
    -e '/DAEMON_CONF=/c DAEMON_CONF="/etc/hostapd/hostapd.conf"'

    ################################################
    ## Set up DHCP server for IP address management
    ################################################

    ### make sure that the DHCP server is installed
    apt-get -y install isc-dhcp-server

    ### it should not start automatically on boot
    update-rc.d isc-dhcp-server disable

    ### set the INTERFACES on /etc/default/isc-dhcp-server
    cp -n /etc/default/isc-dhcp-server{,.bak}
    sed -i /etc/default/isc-dhcp-server \
    -e "/INTERFACES=/c INTERFACES=\"$wifi_interface\""

    ### modify /etc/dhcp/dhcpd.conf
    cp -n /etc/dhcp/dhcpd.conf{,.bak}
    sed -i /etc/dhcp/dhcpd.conf \
    -e 's/^option domain-name/#option domain-name/' \
    -e 's/^option domain-name-servers/#option domain-name-servers/' \
    -e 's/^default-lease-time/#default-lease-time/' \
    -e 's/^max-lease-time/#max-lease-time/'

    sed -i /etc/dhcp/dhcpd.conf \
    -e '/subnet 10.10.0.0 netmask 255.255.255.0/,+4 d'
    cat <<EOF >> /etc/dhcp/dhcpd.conf
    subnet 10.10.0.0 netmask 255.255.255.0 {
    range 10.10.0.2 10.10.0.16;
    option domain-name-servers 8.8.4.4, 208.67.222.222;
    option routers 10.10.0.1;
    }
    EOF

    #################################################
    ## Create a startup script
    #################################################

    cat <<EOF > /etc/init.d/wifi_access_point
    #!/bin/bash
    ext_interface=\$(ip route | grep default | cut -d' ' -f5)
    function stop_wifi_ap {
    ### stop services dhcpd and hostapd
    service isc-dhcp-server stop
    service hostapd stop
    ### disable IP forwarding
    echo 0 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -D POSTROUTING -s 10.10.0.0/16 -o \$ext_interface -j MASQUERADE 2>/dev/null
    ### remove the static IP from the wifi interface
    if grep -q 'auto $wifi_interface' /etc/network/interfaces
    then
    sed -i /etc/network/interfaces -e '/auto $wifi_interface/,\$ d'
    sed -i /etc/network/interfaces -e '\$ d'
    fi
    }
    function start_wifi_ap {
    stop_wifi_ap
    ### give a static IP to the wifi interface
    echo >> /etc/network/interfaces
    echo 'auto $wifi_interface' >> /etc/network/interfaces
    echo 'iface $wifi_interface' inet static >> /etc/network/interfaces
    echo 'address 10.10.0.1' >> /etc/network/interfaces
    echo 'netmask 255.255.255.0' >> /etc/network/interfaces
    ### enable IP forwarding
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -o \$ext_interface -j MASQUERADE
    ### start services dhcpd and hostapd
    service hostapd start
    service isc-dhcp-server start
    }
    ### start/stop wifi access point
    case "\$1" in
    start) start_wifi_ap ;;
    stop) stop_wifi_ap ;;
    esac
    EOF

    chmod +x /etc/init.d/wifi_access_point

    read -p 'Start wifi access point automatically on boot? [y/N]: ' input
    if [ "$input" = "y" ]
    then
    update-rc.d wifi_access_point defaults
    fi

    ### display usage message
    echo "
    ======================================
    Wifi Access Point installed.
    You can start and stop it with:
    service wifi_access_point start
    service wifi_access_point stop
    "