ติดตั้ง coovachilli บน ubuntu

ทดสอบกับ 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