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