[GUIDE] Making infrastructure wifi hotspot on ubuntu 12.04/12.10

Search This thread

Top Liked Posts

  • There are no posts matching your filters.
  • 29
    As many of you know, most of our android(not only android) devices can't connect to ad hoc hotspots. There's a solution for win7/8 users to set up infrastructure hotspot on their laptop using software like connectify and so on. Ubuntu also allows to create wifi hotspot to share internet, but it will be ad hoc one.
    So here's the guide how to set up infrastructure hotspot on ubuntu 12.04/12.10. Unlike some other methods described on the internet, this one will not break default network manager.

    1. First of all you should make sure, that your wifi adapter supports infrastructure hotspots. If you used connectify on your windows system and it worked, skip this step.

    open terminal and type: sudo lshw | less

    find -network section and make sure that driver is ath5k or ath9k, this solution will only work for those drivers, but should fit the needs for the most laptop users.



    2. We now need to install 2 additional tools to make out hotspot, 1st one is hostapd(hotspot server), 2nd one is dnsmasq(dns dhcp server)

    in terminal type: sudo apt-get install hostapd dnsmasq

    3. stop those services if started already, and prevent them from starting on system start up.

    in terminal type:
    sudo service hostapd stop
    sudo service dnsmasq stop
    sudo update-rc.d hostapd disable
    sudo update-rc.d dnsmasq disable


    4. Now we need to set up config files.
    in terminal type: sudo gedit /etc/dnsmasq.conf
    or sudo kate /etc/dnsmasq.conf if you use kde

    add those lines to the config file
    Code:
    # Bind to only one interface
    bind-interfaces
    # Choose interface for binding
    interface=wlan0
    # Specify range of IP addresses for DHCP leasses
    dhcp-range=192.168.150.2,192.168.150.10
    5. hostapd config

    in terminal type: sudo gedit /etc/hostapd.conf

    and add those lines

    Code:
    # Define interface
    interface=wlan0
    # Select driver
    driver=nl80211
    # Set access point name
    ssid=myhotspot
    # Set access point harware mode to 802.11g
    hw_mode=g
    # Set WIFI channel (can be easily changed)
    channel=6
    # Enable WPA2 only (1 for WPA, 2 for WPA2, 3 for WPA + WPA2)
    wpa=2
    wpa_passphrase=mypassword

    You can change ssid name and password for anything you want here. Current config will create hotspot named myhotspot with mypassword password.

    6. Now create anywhere you want a file named start.sh
    edit it with any text editor like this:

    Code:
    #!/bin/bash
    # Start
    # Configure IP address for WLAN
    sudo ifconfig wlan0 192.168.150.1
    # Start DHCP/DNS server
    sudo service dnsmasq restart
    # Enable routing
    sudo sysctl net.ipv4.ip_forward=1
    # Enable NAT
    sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
    # Run access point daemon
    sudo hostapd /etc/hostapd.conf
    # Stop
    # Disable NAT
    sudo iptables -D POSTROUTING -t nat -o ppp0 -j MASQUERADE
    # Disable routing
    sudo sysctl net.ipv4.ip_forward=0
    # Disable DHCP/DNS server
    sudo service dnsmasq stop
    sudo service hostapd stop

    You will probably need to change ppp0 in this to eth0 (or any other number which refers to your wired connection.

    7. Last step. Now you can start your hotspot by starting our script. just run it using sudo sh
    for me it looks like this sudo sh /home/ogyct/Desktop/start.sh because I have it on my desktop


    I am not sure who is the author of this guide, I only translated it to english. But anyway if this helped, hit the thanks button. Good day :)
    1
    I have an eth0 connection running behind an authenticated proxy server.
    I followed the steps and managed to create a hotspot which my google nexus 7 detects. However, it seems stuck at "obtaining an ip address" and is not able to connect to the internet.

    I initially received the following error message when running your script in the terminal:

    dnsmasq: failed to create listening socket for 127.0.0.1: Address already in use [fail]​

    I figured it is because of a conflict with the network manager, I uncommented "dns=dnsmasq" line in the nm configuration file. After a network-manager restart, the first error doesn't show up but I get the following:

    Configuration file: /etc/hostapd.conf
    Failed to create interface mon.wlan0: -23 (Too many open files in system)
    Try to remove and re-create mon.wlan0​

    In both cases, however, the hotspot is created and is detected by my android device. only that it cannot "obtain an ip address" and connect to it.
    Is it because my eth0 connects via a proxy server?
    Or could there be something wrong with the dnsmasq config? Any help would be appreciated.

    I've never worked with a proxy server, but from what I see, it seems like your problem has nothing to do with a proxy server. Something's wrong with configuration on wifi side. Try to disable network manager first, if it doesn't help, try to completely clean dnsmaq and hostapd configs and paste code from this thread again. Unfortunately I can not provide any further help, since I have a different configuration on my side.
    1
    My galaxy s2 is able to see the "myhotspot" network created following this guide. I set a static ip and gateway to make it obtain an ip address.
    Now it seems to be connected, but I have no internet access on my phone...
    Could anyone help me?

    I am using ubuntu 12.04 and I just figured out the instructions on ".../questions/180733/how-to-setup-a-wi-fi-hotspot-access-point-mode/" (askubuntu) thread worked like a charm for me. It uses the isc-dhcp-server instead of dnsmasq and a different dhcp range I guess. I really don't know enough to tell the difference but it worked. Maybe ogyct can explain it to us.