Raspberry Pi Wifi Hotspot + CoovaChilli + Freeradius + Captive portal
โปเจคนี้เป็นการนำเอา Raspberry Pi และ ตัวรับ USB WIFI ที่สนับสนุนกับ Raspberry Pi เพื่อนำมาประยุกต์ใช้งานในการทำระบบ WIFI Hotspot โดยรับ Internet มาจากพอร์ตแลนของ Raspberry Pi ให้เป็นขา WAN ส่วน Wireless USB ให้เป็นขา LAN Hotspot หากนำอุปกรณ์ไปเชื่อมต่อสัญญาณ Access Point ที่ปล่อยออกมาจาก USB Wireless จะได้รับ IP ในวงของ Hotspot และเมื่อเปิดโปรแกรมพวกเว็บบราวเซอร์ ระบบ Hotspot ก็จะวิ่งไปหน้า Login เพื่อจะให้ผู้ใช้งานนำ User และ Password มาใส่เพื่อเข้าใช้งานระบบ โดย User นั้นจะต้องมีอยู่ใน Database ของระบบถึงจะเข้าใช้งานได้ และยังมีหน้าจัดการระบบของผู้ดูแลระบบในการจัดการ User ใช้งานและข้อมูลระบบอื่นๆ
สรุป
## Wiresless USB ต้องสนับสนุนกับ Raspberry Pi และต้องมี Driver ด้วยเพื่อให้ Raspberry Pi มองเห็น## CoovaChilli Coova Chilli เป็น DHCP Server ทำหน้าที่ในการจัดการเรื่องของ IP และแจก IP ให้กับเครื่อง Client ที่เชื่อมต่อกับ WIFI
## RADIUS (Common Remote Authentication Dial In User Server) ระบบจัดการและตรวจสอบการพิสูจน์สิทธิ์การใช้งานระบบ แพคเกจโปรแกรมที่ต้องติดตั้งคือ freeradius
##daloRADIUS เป็นเว็บแอพพลิเคชันในการบริหารจัดการะบบ hotspots, การจัดการผู้ใช้, การรายงานกราฟฟิก, การจัดทำบัญชี และ billing engine ด้วย daloRADIUS พัฒนาด้วยภาษา PHP และ JavaScript พร้อมทั้งสนับสนุนการใช้งานร่วมกับฐานข้อมูลต่างๆ เช่น MySQL และ PostgreSQl
##Captive Portal คือ การบังคับเปลี่ยนทิศทางให้ผู้ใช้งาน HTTP เข้าใช้งานหน้าเวปไซต์เพื่อบังคับให้ผู้ใช้ต้องพิสูจน์ตัวตนของผู้ใช้งานก่อนเข้าใช้ทรัพยากรในระบบ
ปิด turbo mode
bash -c "echo options smsc95xx turbo_mode=N > /etc/modprobe.d/smscnonturbo.conf"
sudo nano /etc/network/interfacesเพิ่มไปยังไฟล์ดังนี้
auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.10.1
netmask 255.255.255.0
network 192.168.10.0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
เปิดการ Forwarding interface ในบรรทัดที่ 29 ไฟล์ /etc/sysctl.conf ลบ # ข้างหน้าออก
sudo nano /etc/sysctl.conf
รีสตาร์ network
/etc/init.d/networking restart
Freeradius
ติดตั้ง mysql และ กำหนดค่าให้กับ databasesapt-get install -y debconf-utils
debconf-set-selections <<< 'mysql-server mysql-server/root_password password raspbian'
debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password raspbian'
apt-get install -y debhelper libssl-dev libcurl4-gnutls-dev mysql-server freeradius freeradius-mysql gcc make libnl1 libnl-dev pkg-config iptables
สร้าง database ใน MySQL ไปยัง FreeRadius
echo "create database radius;" | mysql -u root -praspbian
ติดตั้ง database schema radius และ directors และติดตั้ง tables สำหรับ NAS
mysql -u root -praspbian radius < /etc/freeradius/sql/mysql/schema.sql
mysql -u root -praspbian radius < /etc/freeradius/sql/mysql/admin.sql
mysql -u root -praspbian radius < /etc/freeradius/sql/mysql/nas.sql
แก้ไขไฟล์ /etc/freeradius/radiusd.conf โดยลบ # ออกในบรรทัดที่ 700
sudo nano /etc/freeradius/radiusd.conf
เปิด authentication MySQL Database ในไฟล์ /etc/freeradius/sites-enabled/default โดยการลบ # ออกในบรรทัดเหล่านี้ 177, 406, 454
sudo nano /etc/freeradius/sites-enabled/default
หยุด service freeradius และทดสอบ freeradius
service freeradius stop
freeradius -X
ทดสอบสร้าง ชื่อผู้ใช้งาน usertest และรหัส passwd เพื่อใช้ในการทดสอบการเชื่อมต่อ
echo "insert into radcheck (username, attribute, op, value) values ('usertest', 'Cleartext-Password', ':=', 'passwd');" | mysql -u root -praspbian radius
radtest usertest passwd localhost 0 testing123
CoovaChilli
Compilation and installation of CoovaChilli
ดาวน์โหลดและติดตั้ง CoovaChilli
cd /usr/src
wget http://ap.coova.org/chilli/coova-chilli-1.3.0.tar.gz
tar zxvf coova-chilli-1.3.0.tar.gz
cd coova-chilli-1.3.0
เริ่มการตั้งค่า CoovaChilli
./configure --prefix=/usr --mandir=$${prefix}/share/man \
--infodir = \ $${prefix}/share/info \
--sysconfdir=/etc --localstatedir=/var --enable-largelimits \
--enable-binstatusfile --enable-statusfile --enable-chilliproxy \
--enable-chilliradsec --enable-chilliredir --with-openssl --with-curl \
--with-poll --enable-dhcpopt --enable-sessgarden --enable-dnslog \
--enable-ipwhitelist --enable-redirdnsreq --enable-miniconfig \
--enable-libjson --enable-layer3 --enable-proxyvsa --enable-miniportal \
--enable-chilliscript --enable-eapol --enable-uamdomainfile \
--enable-modules --enable-multiroute
echo 9 > debian/compat
เปลี่ยน directory ในไฟล์ /usr/src/coova-chilli-1.3.0/debian/rules บรรทัดที่ 54 ให้เป็น
sudo nano /usr/src/coova-chilli-1.3.0/debian/rules
$(MAKE) DESTDIR=/ install
เริ่มการ compilation ใช้เวลาประมาณ 20 นาที
dpkg-buildpackage -us -uc
ติดตั้ง package และเลือก N
cd ..
dpkg -i coova-chilli_1.3.0_armhf.deb
Compilation and installation of Haserl
ดาวน์โหลด คอมไฟลและติดตั้ง Haserl สำหรับ UNIX scripts หรือ LUA scripts และ จะ generate CGI
cd /usr/src
wget http://downloads.sourceforge.net/project/haserl/haserl-devel/haserl-0.9.35.tar.gz
tar zxvf haserl-0.9.35.tar.gz
cd haserl-0.9.35
./configure && make && make install
./configure && make && make install
ตั้งค่า CoovaChilli ในไฟล์ /etc/chilli/up.sh
sudo nano /etc/chilli/up.sh
Configure CoovaChilli
เพิ่มข้อความด้านล่างไว้ล่างสุด
iptables -I POSTROUTING -t nat -o $HS_WANIF -j MASQUERADE
แก้ไขไฟล์ /etc/default/chilli โดยเปลียนค่าจาก 0 เป็น 1 แทน
sudo nano /etc/default/chilli
START_CHILLI=0 แก้เป็น START_CHILLI=1
แก้ไขข้อมูลไฟล์ /etc/chilli/wwwsh ของบรรทัดที่ 9 เป็น haserl=/usr/local/bin/haserl
sudo nano /etc/chilli/wwwsh
แก้เป็น haserl=/usr/local/bin/haserl
แก้ไขไฟล์ sudo nano /etc/chilli/defaults โดยการกำหนดค่า interfaces used passwd network, etc. ดังค่าต่อไปนี้ โดยลบ # ออกด้วยหลังแก้ไขบบรทันนั้นแล้ว
sudo nano /etc/chilli/defaultsแก้ไขให้เป็นดังนี้
HS_WANIF=eth0
HS_LANIF=wlan0
HS_NETWORK=192.168.10.0
HS_UAMLISTEN=192.168.10.1
HS_UAMALLOW=192.168.10.0/24
HS_SSID=PiHomeServerAP
อัพเดทค่า chilli และ เริ่มเปิดการใช้งาน chilli
update-rc.d chilli start 99 2 3 4 5 . stop 20 0 1 6 .
service chilli start
ตรวจสอบ interface tun0 ที่ใช้สำหรับ chilli ด้วยคำสั่ง
ifconfig
Hostapd
ติดตั้ง hostapd เพื่อให้มองเห็นสัญญาณ WIFIsudo apt-get install -y hostapd
แก้ไขไฟล์ /etc/default/hostapd โดยเพิ่มไปยังท้ายบรรทัด
DAEMON_CONF="/etc/hostapd/hostapd.conf"
สร้างไฟล์ /etc/hostapd/hostapd.conf
sudo nano /etc/hostapd/hostapd.conf
และเพิ่มไปยังไฟล์ดังนี้
# interface wlan Wi-Fi
interface=wlan0
# nl80211 avec tous les drivers Linux mac80211
driver=nl80211
# Nom du spot Wi-Fi
ssid=PiHomeServerAP
# mode Wi-Fi (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.1g)
hw_mode=g
# canal de fréquence Wi-Fi (1-14)
channel=6
# Wi-Fi ouvert, pas d'authentification !
auth_algs=1
# Beacon interval in kus (1.024 ms)
beacon_int=100
# DTIM (delivery traffic information message)
dtim_period=2
# Maximum number of stations allowed in station table max_num_sta=255
# RTS/CTS threshold; 2347 = disabled (default)
rts_threshold=2347
# Fragmentation threshold; 2346 = disabled (default)
fragm_threshold=2346
เริ่มการใช้งาน service
service hostapd start
Test Connection WiFi
ทดสอบการเชื่อมต่อ wifi จาก raspberry pi โดยใช้คอมพิวเตอร์ 9ล9 เมื่อเปิด web browser ระบบจะวิ่งไปหน้า Loginให้ login ด้วย
user = usertest
password = passwd
ถ้ารหัสถูกต้องสามารถเชื่อมต่อ internet ได้
daloRADIUS
ติดตั้ง web server และ Nginx.apt-get install -y php5-mysql php-pear php5-gd php-db php5-fpm libgd2-xpm libpcrecpp0 libxpm4 nginx php5-xcache
apt-get remove -y apache2.2-bin apache2-utils apache2.2-common
ดาวน์โหลด daloRadius
cd /usr/src
wget http://downloads.sourceforge.net/project/daloradius/daloradius/daloradius0.9-9/daloradius-0.9-9.tar.gz
tar zxvf daloradius-0.9-9.tar.gz -C /usr/share/nginx/www/
mv /usr/share/nginx/www/daloradius-0.9-9 /usr/share/nginx/www/daloradius
cd /usr/share/nginx/www/daloradius
เพิ่มข้อมูลที่ใช้ daloRadius ใน FreeRadius database
mysql -u root -praspbian radius < /usr/share/nginx/www/daloradius/contrib/db/fr2-mysql-daloradius-and-freeradius.sql
mysql -u root -praspbian
GRANT ALL ON radius.* to 'radius'@'localhost';
GRANT ALL ON radius.* to 'radius'@'127.0.01';
exit;
ในไฟล์ /usr/share/nginx/www/daloradius/library/daloradius.conf.php กำหนดค่า database ให้ถูกต้องดังนี้
sudo nano /usr/share/nginx/www/daloradius/library/daloradius.conf.php
$configValues['CONFIG_DB_USER'] = 'radius';
$configValues['CONFIG_DB_PASS'] = 'radpass';
$configValues['CONFIG_DB_NAME'] = 'radius';
แก้ไขไฟล์ /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-enabled/default
เพิ่มคำสั่งข้างล่างไปในไฟล์ตั้งแต่บรรทัดที่ 25
index index.php index.html index.htm;
จากนั้นลบ # ออกจากไฟล์ /etc/nginx/sites-enabled/default
location ~ .php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/PHP5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
รีสตาร์ service nginx
service nginx restart
how to create a user
ทดสอบเข้าไปหน้าจัดการ daloRADIUS โดยเปิด webbrowser http://<ip de votre raspberry>/daloradiusLogin : administrator / Password : radius
สร้าง user ในการใช้งาน
List User
user online
Status System
VIDEO
RF : http://www.pihomeserver.fr/en/2015/08/05/raspberry-pi-coovachilli-et-freeradius-pour-un-hotspot-wifi-avec-portail-captif/
ขอบคุณครับ เป็น tutorial ที่ดีมากครับ :-)
ตอบลบเป็นประโยชน์ ดีมากครับ ให้กำลังใจเขียนเรื่องอื่นต่อๆ ไปครับ
ตอบลบขอสอบถามหน่อยนะครับว่า สามารถรองรับ ให้เข้าได้พร้อมกันกี่ user ครับ
ตอบลบ