Sejak pertama kali pegang ponsel Android, memang seolah ada perbedaan gaya hidup. Apa yang sebelumnya hanya dapat dilakukan menggunakan laptop/komputer beberapa dapat dilakukan dalam genggaman, seperti membaca & mengirim surel, membaca buku elektronik, bahkan menulis berita. Namun tak jarang, beberapa hal tersebut tidak dapat dilakukan di ponsel karena terkendala koneksi internet.

Ketika kartu SIM di ponsel masih ada paket internet, mungkin akan mudah. Ponsel Android sudah memfasilitasi, sudah tersedia fitur hotspot tethering maupun maupun via USB. Ini sangat memudahkan terutama ketika saya perlu melakukan pertukaran data dari ponsel ke laptop atau sebaliknya. Ya, bukan lagi menggunakan bluetooth tapi WiFi. Selain itu, ponsel Android dapat pula digunakan sebagai remote baik untuk menggerakkan kursor maupun sebagai papan-tik. Namun bukan ini yang akan saya tuliskan di sini.

Belakangan saya rasakan, menggunakan ponsel (saya) sebagai modem koneksinya sangat tidak stabil. Kalau dilihat di indikator, sinyalnya sering hilang. Sistem Operasi (laptop; Ubuntu Studio 14.04 LTS) yang saya gunakan juga telah memfasilitasi untuk berbagi koneksi internet. Istilahnya Internet Conection Sharing (Berbagi Sambungan Internet), misalnya laptop sudah terkoneksi melalui jaringan kabel atau modem, saya dapat berbagai koneksi internet ke komputer/laptop melalui WiFi. Atau sebaliknya misalnya jika mendapat koneksi dari WiFi, LAN dapat digunakan untuk berbagi ke komputer lain.

Secara default, Desktop Ubuntu dapat dibuat AP (Access Point; WiFi) dengan bantuan NetworkManager. Komputer/laptop lain pun dapat terhubung dengannya sebagai sumber koneksi internet maupun hanya untuk bertukar data. Permasalahannya adalah, AP yang dibuat tersebut bertipe Ad-Hoc. Ketika saya ubah menjadi Managed/Infrastructure, penerima (klien) tidak dapat terhubung (ke internet). sedangkan ponsel android standarnya memang tidak mendukung AP dengan tipe Ad-Hoc.

Nah setelah sekian waktu lamanya saya mencari (atau menunggu; karena saya tidak terlalu serius mencarinya), akhirnya saya menemukan skrip karya Dashamir Hoxha berikut ini :

Skrip tersebut mengotomatisasi apa yang saya harapkan : membuat akses point yang dapat dijangkau oleh ponsel andoid (saya).

Cara Menggunakan?

Untuk menggunakan skrip ini caranya cukup sederhana, salin seluruh isi skrip di atas ke dalam teks editor misalnya diberi nama install_wifi_access_point.sh, lalu beri akses eksekusi ke berkas/skrip tersebut :

[samsul@studio Source]$ sudo chmod +x install_wifi_access_point.sh

Jalankan skrip tersebut dengan mengetikkan perintah :

[samsul@studio Source]$ sudo bash install_wifi_access_point.sh

Nah, berikut log terminal saya ketika mengeksekusi perintah tersebut :

#!/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
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
cat <<EOF > /etc/hostapd/hostapd.conf
interface=$wifi_interface
driver=nl80211
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
### restart network manager to takeover wifi management
service network-manager restart
}
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
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
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
### 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 "
======================================
Wifi Access Point installed.
You can start and stop it with:
service wifi_access_point start
service wifi_access_point stop
"

Hanya perlu satu kali menjalankan skrip tadi, karena fungsinya memang hanya untuk menginstall. Setelah terinstall, kita bisa menjalankan perintah seperti yang nampak di akhir log di atas. Pengalaman saya di Ubuntu Studio 14.04, saya berhasil mengoneksikan ponsel Andoid saya ke laptop. Namun seringkali, karena koneksinya kadang kurang stabil saya perlu menjalankan perintah-perintah berikut secara manual :

[samsul@studio Source]$ sudo rfkill unblock wlan  
[samsul@studio Source]$ sudo ip link set dev wlan0 up  
[samsul@studio Source]$ sudo ip address add 10.10.0.1/24 dev wlan0  
[samsul@studio Source]$ sudo iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -o ppp0 -j MASQUERADE  
[samsul@studio Source]$ sudo service isc-dhcp-server start  
isc-dhcp-server start/running, process 4221  
[samsul@studio Source]$ sudo service hostapd start  
 * Starting advanced IEEE 802.11 management hostapd                                             [ OK ]   
[samsul@studio Source]$ ifconfig  
eth0      Link encap:Ethernet  HWaddr dc:0e:a1:5b:de:fe    
          UP BROADCAST MULTICAST  MTU:1500  Metric:1  
          RX packets:5514732 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:4572095 errors:0 dropped:0 overruns:0 carrier:28  
          collisions:0 txqueuelen:1000   
          RX bytes:6218221124 (6.2 GB)  TX bytes:2292538309 (2.2 GB)  

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:1149443 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:1149443 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0   
          RX bytes:251284768 (251.2 MB)  TX bytes:251284768 (251.2 MB)  

ppp0      Link encap:Point-to-Point Protocol    
          inet addr:10.90.39.178  P-t-P:10.64.64.64  Mask:255.255.255.255  
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1  
          RX packets:37 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:835 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:3   
          RX bytes:4439 (4.4 KB)  TX bytes:54573 (54.5 KB)  

wlan0     Link encap:Ethernet  HWaddr c0:18:85:5a:94:6f    
          inet addr:10.10.0.1  Bcast:0.0.0.0  Mask:255.255.255.0  
          inet6 addr: fe80::c218:85ff:fe5a:946f/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:91732 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:114252 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1000   
          RX bytes:41297838 (41.2 MB)  TX bytes:53259798 (53.2 MB)  

[samsul@studio Source]$ 

Buat Anda, selamat mencoba…. :-P