5

My laptop is connected with internet using built-in WiFi card. I have another WiFi USB adapter. I want to create an Access point/WiFi hotspot on WiFi USB adapter.

I would like to connect multiple devices on WiFi USB adapter to access internet on those connected devices.

How can I route internet from built-in WiFi card to WiFi USB adapter. My laptop is using Ubuntu 14.04 LTS 64-bit

Here is the output of lsusb

Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 011: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

My WiFi USB adapter is from Edimax Technology Co., Ltd

Output of ifconfig

eth0      Link encap:Ethernet  HWaddr e0:3f:49:xx:xx:xx  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:19 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:229592 errors:0 dropped:0 overruns:0 frame:0
          TX packets:229592 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:233583875 (233.5 MB)  TX bytes:233583875 (233.5 MB)

wlan0     Link encap:Ethernet  HWaddr 54:35:30:xx:xx:xx  
          inet addr:192.168.1.6  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::5635:30ff:xxxx:xxxx/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:281992 errors:0 dropped:3 overruns:0 frame:0
          TX packets:181674 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:252008655 (252.0 MB)  TX bytes:40751981 (40.7 MB)

If you need output of any other terminal command, please mention the command OR mention how to get those information.

1
  • Please, put output from ifconfig when wless is enabled on wifi card and usb wifi card.
    – 2707974
    Jul 24, 2015 at 8:07

2 Answers 2

2
+50

So you want to make a wifi repeater ?

Assuming you have the needed driver for your EW-7811Un dongle; if not try to use the PPA at ppa:hanipouspilot/rtlwifi and the rtl8192cu-dkms package.

TL;DR

If you can't bear to read it all and want to be spoon feed instead, run this script, close your eyes and cross your fingers.

How to do it

  1. You need hostapd but a specially crafted version because of the subpar realtek driver. You will need to uninstall the ubuntu version (if it is installed) and install a patched version.

    You can download the original file from realtek.com.tw (but I use here the same file from a github user repo):

    sudo apt-get remove hostapd
    cd /tmp
    wget https://github.com/XiaoxiaoPu/hostapd-8192cu/raw/master/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip
    unzip RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip
    cd RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911
    cd wpa_supplicant_hostapd
    tar -zxf wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz
    cd wpa_supplicant_hostapd-0.8_rtw_r7475.20130812
    cd hostapd
    

    You can (must ?) use this file and save it as .config

    # Example hostapd build time configuration
    #
    # This file lists the configuration options that are used when building the
    # hostapd binary. All lines starting with # are ignored. Configuration option
    # lines must be commented out complete, if they are not to be included, i.e.,
    # just setting VARIABLE=n is not disabling that variable.
    #
    # This file is included in Makefile, so variables like CFLAGS and LIBS can also
    # be modified from here. In most cass, these lines should use += in order not
    # to override previous values of the variables.
    
    # Driver interface for Host AP driver
    #CONFIG_DRIVER_HOSTAP=y
    CONFIG_DRIVER_RTW=y
    
    # Driver interface for wired authenticator
    #CONFIG_DRIVER_WIRED=y
    
    # Driver interface for madwifi driver
    #CONFIG_DRIVER_MADWIFI=y
    #CFLAGS += -I../../madwifi # change to the madwifi source directory
    
    # Driver interface for drivers using the nl80211 kernel interface
    #CONFIG_DRIVER_NL80211=y
    
    # Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
    #CONFIG_DRIVER_BSD=y
    #CONFIG_SUPPORT_RTW_DRIVER=y
    #CFLAGS += -I/usr/local/include
    #LIBS += -L/usr/local/lib
    #LIBS_p += -L/usr/local/lib
    #LIBS_c += -L/usr/local/lib
    
    # Driver interface for no driver (e.g., RADIUS server only)
    #CONFIG_DRIVER_NONE=y
    
    # IEEE 802.11F/IAPP
    #CONFIG_IAPP=y
    
    # WPA2/IEEE 802.11i RSN pre-authentication
    CONFIG_RSN_PREAUTH=y
    
    # PeerKey handshake for Station to Station Link (IEEE 802.11e DLS)
    CONFIG_PEERKEY=y
    
    # IEEE 802.11w (management frame protection)
    # This version is an experimental implementation based on IEEE 802.11w/D1.0
    # draft and is subject to change since the standard has not yet been finalized.
    # Driver support is also needed for IEEE 802.11w.
    #CONFIG_IEEE80211W=y
    
    # Integrated EAP server
    CONFIG_EAP=y
    
    # EAP-MD5 for the integrated EAP server
    CONFIG_EAP_MD5=y
    
    # EAP-TLS for the integrated EAP server
    CONFIG_EAP_TLS=y
    
    # EAP-MSCHAPv2 for the integrated EAP server
    CONFIG_EAP_MSCHAPV2=y
    
    # EAP-PEAP for the integrated EAP server
    CONFIG_EAP_PEAP=y
    
    # EAP-GTC for the integrated EAP server
    CONFIG_EAP_GTC=y
    
    # EAP-TTLS for the integrated EAP server
    CONFIG_EAP_TTLS=y
    
    # EAP-SIM for the integrated EAP server
    CONFIG_EAP_SIM=y
    
    # EAP-AKA for the integrated EAP server
    CONFIG_EAP_AKA=y
    
    # EAP-AKA' for the integrated EAP server
    # This requires CONFIG_EAP_AKA to be enabled, too.
    #CONFIG_EAP_AKA_PRIME=y
    
    # EAP-PAX for the integrated EAP server
    #CONFIG_EAP_PAX=y
    
    # EAP-PSK for the integrated EAP server (this is _not_ needed for WPA-PSK)
    CONFIG_EAP_PSK=y
    
    # EAP-SAKE for the integrated EAP server
    CONFIG_EAP_SAKE=y
    
    # EAP-GPSK for the integrated EAP server
    CONFIG_EAP_GPSK=y
    # Include support for optional SHA256 cipher suite in EAP-GPSK
    CONFIG_EAP_GPSK_SHA256=y
    
    # EAP-FAST for the integrated EAP server
    # Note: Default OpenSSL package does not include support for all the
    # functionality needed for EAP-FAST. If EAP-FAST is enabled with OpenSSL,
    # the OpenSSL library must be patched (openssl-0.9.9-session-ticket.patch)
    # to add the needed functions.
    #CONFIG_EAP_FAST=y
    
    # Wi-Fi Protected Setup (WPS)
    CONFIG_WPS=y
    # Enable WSC 2.0 support
    #CONFIG_WPS2=y
    # Enable UPnP support for external WPS Registrars
    #CONFIG_WPS_UPNP=y
    
    CONFIG_TLS=internal
    CONFIG_INTERNAL_LIBTOMMATH=y
    
    # EAP-IKEv2
    #CONFIG_EAP_IKEV2=y
    
    # Trusted Network Connect (EAP-TNC)
    #CONFIG_EAP_TNC=y
    
    # PKCS#12 (PFX) support (used to read private key and certificate file from
    # a file that usually has extension .p12 or .pfx)
    #CONFIG_PKCS12=y
    
    # RADIUS authentication server. This provides access to the integrated EAP
    # server from external hosts using RADIUS.
    CONFIG_RADIUS_SERVER=y
    
    # Build IPv6 support for RADIUS operations
    CONFIG_IPV6=y
    
    # IEEE Std 802.11r-2008 (Fast BSS Transition)
    CONFIG_IEEE80211R=y
    
    # Use the hostapd's IEEE 802.11 authentication (ACL), but without
    # the IEEE 802.11 Management capability (e.g., madwifi or FreeBSD/net80211)
    #CONFIG_DRIVER_RADIUS_ACL=y
    
    # IEEE 802.11n (High Throughput) support
    CONFIG_IEEE80211N=y
    
    # Remove debugging code that is printing out debug messages to stdout.
    # This can be used to reduce the size of the hostapd considerably if debugging
    # code is not needed.
    #CONFIG_NO_STDOUT_DEBUG=y
    
    # Add support for writing debug log to a file: -f /tmp/hostapd.log
    # Disabled by default.
    #CONFIG_DEBUG_FILE=y
    
    # Remove support for RADIUS accounting
    #CONFIG_NO_ACCOUNTING=y
    
    # Remove support for RADIUS
    #CONFIG_NO_RADIUS=y
    
    # Remove support for VLANs
    #CONFIG_NO_VLAN=y
    
    # Enable support for fully dynamic VLANs. This enables hostapd to
    # automatically create bridge and VLAN interfaces if necessary.
    #CONFIG_FULL_DYNAMIC_VLAN=y
    
    # Remove support for dumping state into a file on SIGUSR1 signal
    # This can be used to reduce binary size at the cost of disabling a debugging
    # option.
    #CONFIG_NO_DUMP_STATE=y
    
    # Enable tracing code for developer debugging
    # This tracks use of memory allocations and other registrations and reports
    # incorrect use with a backtrace of call (or allocation) location.
    #CONFIG_WPA_TRACE=y
    # For BSD, comment out these.
    #LIBS += -lexecinfo
    #LIBS_p += -lexecinfo
    #LIBS_c += -lexecinfo
    
    # Use libbfd to get more details for developer debugging
    # This enables use of libbfd to get more detailed symbols for the backtraces
    # generated by CONFIG_WPA_TRACE=y.
    #CONFIG_WPA_TRACE_BFD=y
    # For BSD, comment out these.
    #LIBS += -lbfd -liberty -lz
    #LIBS_p += -lbfd -liberty -lz
    #LIBS_c += -lbfd -liberty -lz
    
    # hostapd depends on strong random number generation being available from the
    # operating system. os_get_random() function is used to fetch random data when
    # needed, e.g., for key generation. On Linux and BSD systems, this works by
    # reading /dev/urandom. It should be noted that the OS entropy pool needs to be
    # properly initialized before hostapd is started. This is important especially
    # on embedded devices that do not have a hardware random number generator and
    # may by default start up with minimal entropy available for random number
    # generation.
    #
    # As a safety net, hostapd is by default trying to internally collect
    # additional entropy for generating random data to mix in with the data
    # fetched from the OS. This by itself is not considered to be very strong, but
    # it may help in cases where the system pool is not initialized properly.
    # However, it is very strongly recommended that the system pool is initialized
    # with enough entropy either by using hardware assisted random number
    # generatior or by storing state over device reboots.
    #
    # If the os_get_random() is known to provide strong ramdom data (e.g., on
    # Linux/BSD, the board in question is known to have reliable source of random
    # data from /dev/urandom), the internal hostapd random pool can be disabled.
    # This will save some in binary size and CPU use. However, this should only be
    # considered for builds that are known to be used on devices that meet the
    # requirements described above.
    #CONFIG_NO_RANDOM_POOL=y
    

    Then

    make
    sudo make install
    
  2. One can use create_ap which a little helper script to setup the wifi AP. It takes care of setting up hostapd, iptables if needed (when using NAT). It is a replacement for the old ap-hostspot.

    cd /tmp
    git clone [email protected]:oblique/create_ap.git
    sudo cp create_ap/create_ap /usr/local/bin/create_ap
    sudo apt-get install dnsmasq-base iptables # if you don't have them already
    
  3. You then create the hotspot with create_ap

    sudo create_ap -w 2 -c 6 --driver rtl871xdrv wlan1 wlan0 MyHotspot mysecretpassword
    

    You have to use the default method (NAT) because you can't bridge 2 wifi interfaces.

    Assuming the USB dongle is wlan1 and the built-in card wlan0. Use a different channel (at least with a +/-3 channels gap) that the channel that wlan0 use.

Done! You should have you AP setup and client should access the net via your built-in wifi card.

From multiple sources but mainly using script from hostapd-8192cu AUR package

Uninstallation

sudo rm /usr/local/bin/hostapd /usr/local/bin/hostapd_cli /usr/local/bin/create_ap
6
  • Aside from the special version of apd required for a Realtek dongle, this matches the method I used for several months to share wired internet via a wireless dongle, before my wired router failed and I bought a wireless router. The instructions I found at that time weren't specific to Ubuntu, though.
    – Zeiss Ikon
    Jul 24, 2015 at 17:03
  • @solsTiCe I haven't performed above steps yet. If above steps will not work for me then how to undo these steps? Jul 25, 2015 at 7:32
  • Run sudo make uninstall where in /tmp/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd and delete /usr/local/bin/create_ap. It would be better to tell us why it failed for you with the error message.
    – solsTiCe
    Jul 25, 2015 at 9:24
  • @solsTiCe I tried above mentioned steps. Step 1 & 2 performed correctly. Step 3 gave me this error ERROR: 'wlan1' is not a WiFi interface. Even after installing above mentioned driver & connecting my USB WiFi adapter, I can't see it in output of ifconfig. It seems my laptop is not detecting USB WiFi adapter Jul 25, 2015 at 20:43
  • @solsTiCe I'm still unable to set it up. The main problem is my USB WiFi adapter is not detected. The possible reason could be incompatibility of its driver with my Linux Kernel. I hope once I'll get compatible driver, it'll be detected, then I can perform your step again to setup access point. I'll submit the result here, in comments section. Congratulations, on bounty! Jul 30, 2015 at 7:04
2

I was able to do this entirely via network manager by creating a new "Wireless (shared)" connection which defaulted to Ad-Hoc mode. This should probably suffice if you're trying to use your laptop as a repeater for other devices.

Don't forget to set your WiFi security to "WPA/WPA2 Personal" and set a secure key.

You might see two different versions of the connection with the respective adapters in parentheses, in my case wlan0 was the internal adapter and wlan1 the USB dongle.

Edit: There is another question with excellent answers on how to install the driver. Apparently there are two different ports (https://github.com/dz0ny/rt8192cu and https://github.com/pvaret/rtl8192cu-fixes) of the driver, both having been updated this month.
In case one does not work for you, remove the kernel module and try the other.

2
  • But the main problem is, my USB WiFi adapter is not detected at all. I can't see wlan1 in output of ifconfig (see the output in question area) Jul 27, 2015 at 3:44
  • @Ratnakar-StoreApps I added some information on drivers, does that work for you?
    – Leo Verto
    Jul 29, 2015 at 15:27

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .