ทดสอบกับ ubuntu 10.04, coovachilli 1.2.5, haserl 0.9.27
ระบบ authen ด้วย coovachilli หรือ chillispot เดิม
ต้นฉบับจาก http://www.coova.org/
ต้องมี 2 network interface โดย eth0 เป็นด้าน uplink ออกอินเทอร์เนต ส่ว eth1 เป็นด้าน PC ที่ต้องผ่านการ authen
ตรวจสอบดูว่าด้าน eth0 สามารถใช้งานออกอินเทอร์เนตได้เรียบร้อยสมบูรณ์ดีแล้วจริงๆ
ตรวจสอบและแก้ไขแฟ้ม /etc/network/interfaces ให้เป็นประมาณดังนี้
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto eth1
ตัวอย่างนี้บรรทัดข้อความว่า iface eth0 inet dhcp หมายถึง eth0 ได้เลข ip จาก dhcp server
หากต้องการตั้งค่า ip ของ eth0 ให้เป็นแบบ static ก็แก้ไขเป็นประมาณตัวอย่างว่า
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.0.100.2
netmask 255.255.255.0
gateway 10.0.100.1
auto eth1
อย่าลืมตรวจสอบแฟ้ม /etc/resolv.conf ว่าตั้งค่า dns server ถูกต้องแล้ว
หากถูกต้องดีแล้ว ให้ reboot เครื่องนี้ แล้วทดสอบใช้อินเทอร์เนตได้ดี จึงค่อยทำขั้นตอนอื่นถัดไป
ระบบ authen ต้องใช้บริการจาก radius server ด้วย ซึ่งจะเป็น radius server ภายนอกหรือภายในเครื่องเดียวกัน
การตรวจสอบ radius server ที่จะใช้บริการ ทำดังนี้
ติดตั้งโปรแกรมตรวจสอบ radius ด้วยคำสั่ง sudo apt-get install freeradius-utils
ทดสอบบริการ radius server ด้วยคำสั่งประมาณว่า
sudo radtest R_user R_password R_server 0 R_key
โดยให้แทนที่ R_user ด้วย username, R_password ด้วย รหัสผ่าน, R_server ด้วย radius server, R_key ด้วย radius secret key
ตัวอย่างนี้สมมติใช้คำสั่งว่า sudo radtest baba 1234 10.100.0.2 0 mykey
หากได้รับคำตอบกลับมาประมาณว่า
Sending Access-Request of id 78 to 10.100.0.2 port 1812
User-Name = "baba"
User-Password = "1234"
NAS-IP-Address = 127.0.1.1
NAS-Port = 0
rad_recv: Access-Accept packet from host 10.100.0.2 port 1812, id=78, length=20
แสดงว่าติดต่อกับ radius server ได้อย่างถูกต้องแล้ว
หากต้องการสร้าง radius server ภายในเครื่อง server นี้เอง ก็ให้ติดตั้งดังนี้
sudo apt-get install freeradius
แล้วทดสอบด้วยคำสั่งประมาณว่า sudo radtest Username Password 127.0.0.1 0 testing123
โดยที่ Username และ Password เป็น user และ password ของ server นี้
ติดตั้งโปรแกรมต่างๆที่จำเป็นต้องใช้เพิ่มเติม ด้วยคำสั่ง
sudo apt-get install gcc
ติดตั้งโปรแกรม coovachilli ทำดังนี้ ให้ดาวน์โหลดโปรแกรม coovachilli มาไว้ก่อน
ด้วยคำสั่งว่า wget ftp://ftp.psu.ac.th/pub/coova/coova-chilli_1.2.5_i386.deb -P /tmp
แล้วทำงานต่อด้วยคำสั่งว่า
sudo dpkg -i /tmp/coova-chilli_1.2.5_i386.deb
sudo cp /etc/chilli/defaults /etc/chilli/config
ต่อไปติดตั้ง captive portal ทำดังนี้ ให้ดาวน์โหลดโปรแกม haserl มาไว้ก่อน
ด้วยคำสั่งว่า wget ftp://ftp.psu.ac.th/pub/coova/haserl-0.9.27.tar.gz -P /tmp
แล้วทำงานต่อด้วยคำสั่งว่า
tar -zxvf /tmp/haserl-0.9.27.tar.gz -C /tmp
cd /tmp/haserl-0.9.27
./configure
make
sudo make install
ปรับแต่ง coovachilli ทำดังนี้
แก้ไขแฟ้ม /etc/default/chilli
ให้เปลี่ยนบรรทัดข้อความจากเดิมว่า START_CHILLI=0 กลายเป็น START_CHILLI=1
แก้ไขแฟ้ม /etc/chilli/config
ให้เพิ่มต่อหลังบรรทัดท้ายสุดด้วยข้อความว่า HS_RAD_PROTO=pap
แล้วแก้ไขบรรทัดอื่นๆที่เกี่ยวข้องเช่น
ไปที่ประมาณบรรทัดที่ 28 ปรับปรุงค่า
HS_DNS1=10.100.77.5 #เลข dns server ชุดที่ 1 ที่ปล่อยให้ PC ลูกข่าย
HS_DNS2=10.100.77.2 #เลข dns server ชุดที่ 2 (ถ้ามี) ที่ปล่อยให้ PC ลูกข่าย
ไปที่ประมาณบรรทัดที่ 35 ปรับปรุงค่า
HS_RADIUS=10.100.0.2 #เลข radius server ชุดที่ 1 ที่ใช้บริการ authen, ถ้าเป็น server นี้เองก็ใช้ว่า localhost
HS_RADIUS2=localhost #เลข radius server ชุดที่ 2(ถ้ามี) ที่ใช้บริการ authen
HS_UAMALLOW=10.100.77.0/24,yourhost.domain #รายชื่อ network ที่ได้รับอนุญาติให้วิ่งโดยไม่ต้อง authen
HS_RADSECRET=testing123 # ค่าของ radius shared secret
HS_UAMSECRET=uamsecret # Set to be your UAM secret
ไปที่ประมาณบรรทัดที่ 78 ปรับปรุงค่าให้เป็น
HS_UAMHOMEPAGE=http://\$HS_UAMLISTEN:\$HS_UAMPORT/www/coova.html
แก้ไขแฟ้ม /etc/chilli/up.sh
ให้เพิ่มต่อหลังบรรทัดท้ายสุดข้อความว่า iptables -I POSTROUTING -t nat -o $HS_WANIF -j MASQUERADE
แก้ไขแฟ้ม /etc/chilli/wwwsh
ไปที่ประมาณบรรทัดที่ 9 แก้ไขข้อความจากเดิม haserl=$(which haserl 2>/dev/null)
เปลี่ยนใหม่เป็นว่า haserl=/usr/local/bin/haserl
ตรวจสอบความพร้อม interface ด้าน eth1 ให้เรียบร้อย
แล้วสั่งให้ coovachilli ทำงานด้วยคำสั่งว่า sudo /etc/init.d/chilli start
ลองให้ PC ลูกข่ายด้าน eth1 เปิด browser ไปยังเวบบนอินเทอร์เนต
จะถูก redirect ไปหน้าเวบ coova redirecting... สักครู่ประมาณ 5 วินาที
แล้วเปลี่ยนไปเป็นหน้าเวบ My HotSpot ให้ป้อน Username และ Password
เมื่อป้อนข้อมูลถูกต้อง ระบบก็จะ redirect ไม่ยังเวบบนอินเทอร์เนต และจะได้รับอนุญาติให้ใช้อินเทอร์เนตได้
หากต้องการ logout ให้ใช้ browser ป้อนว่า logout ก็จะทำให้ใช้อินเทอร์เนตไม่ได้
หากต้องการให้ coovachilli ทำงานทุกครั้งที่บูท server ทำดังนี้
ใช้คำสั่ง sudo update-rc.d chilli defaults
และให้เพิ่มบรรทัดคำสั่งว่า /etc/init.d/chilli restart ไว้ในแฟ้ม /etc/rc.local ด้วย
ยังไม่ทราบสาเหตุ เข้าใจว่าเป็น bug ของ iptables
หากต้องการใช้การ authen ผ่าน apache + ssl ทำดังนี้
ติดตั้ง apache ด้วยคำสั่งดังต่อไปนี้
sudo apt-get install apache2 ssl-cert
sudo mkdir -p /etc/apache2/ssl
sudo mkdir -p /var/www/hotspot
sudo mkdir -p /var/www/hotspot/cgi-bin
sudo mkdir -p /var/www/hotspot/images
sudo cp -v /etc/chilli/www/* /var/www/hotspot
sudo cp -v /var/www/hotspot/coova.jpg /var/www/hotspot/images
โปรแกรม captive portal ต้นฉบับมีปัญหาไม่ redirect ต้องใช้ฉบับที่ปรับปรุง ทำดังนี้
wget http://ftp.psu.ac.th/pub/coova/hotspotlogin.cgi -O /var/www/hotspot/cgi-bin/hotspotlogin.cgi
sudo chmod a+x /var/www/hotspot/cgi-bin/hotspotlogin.cgi
ตรวจสอบชื่อ host ของ server นี้ด้วยคำสั่ง hostname -f
ตัวอย่างนี้สมมติว่าชื่อ ubuntu ทำงานต่อด้วยคำสั่ง
sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
เมื่อได้หน้าต่างคำถามให้ใส่ Host name: เป็นชื่อของ host ในตัวอย่างนี้คือ ubuntu
สร้างแฟ้ม /etc/apache2/sites-available/hotspot มีข้อมูลดังนี้
NameVirtualHost 10.1.0.1:443
<virtualhost 10.1.0.1:443="">
ServerAdmin webmaster@domain.org
DocumentRoot "/var/www/hotspot"
ServerName "10.1.0.1"
<directory hotspot="" var="" www="">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</directory>
Alias "/dialupadmin/" "/usr/share/freeradius-dialupadmin/htdocs/"
<directory freeradius-dialupadmin="" htdocs="" share="" usr="">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</directory>
ScriptAlias /cgi-bin/ /var/www/hotspot/cgi-bin/
<directory cgi-bin="" hotspot="" var="" www="">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</directory>
ErrorLog /var/log/apache2/hotspot-error.log
LogLevel warn
CustomLog /var/log/apache2/hotspot-access.log combined
ServerSignature On
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
</virtualhost>
แก้ไขแฟ้ม /etc/apache2/apache2.conf
เพิ่มบรรทัดข้อความว่า ServerName 10.1.0.1
แก้ไขแฟ้ม /etc/hosts
เพิ่มเลข ip และชื่อ host ตัวอย่างนี้คือ 10.1.0.1 ubuntu
ทำงานต่อด้วยคำสั่ง
sudo a2enmod ssl
sudo a2ensite hotspot
sudo /etc/init.d/apache2 restart
แก้ไขแฟ้ม /etc/chilli/config
ไปที่ประมาณบรรทัดที่ 74 ปรับปรุงค่า
HS_UAMFORMAT=https://\$HS_UAMSERVER/cgi-bin/hotspotlogin.cgi
ไปที่ประมาณบรรทัดที่ 152 ปรับปรุงค่า
HS_TCP_PORTS="80 443"
แล้วทำงานต่อด้วยคำสั่ง
sudo /etc/init.d/chilli restart