ติดตั้ง coovachilli บน ubuntu

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 20-12-2553

ดูแลโดย WIPAT


  • ทดสอบกับ ubuntu 10.04, coovachilli 1.2.5, haserl 0.9.27
  • ระบบ authen ด้วย coovachilli หรือ chillispot เดิม
  • ต้นฉบับจาก http://www.coova.org/


  1. ต้องมี 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 เครื่องนี้ แล้วทดสอบใช้อินเทอร์เนตได้ดี จึงค่อยทำขั้นตอนอื่นถัดไป

  2. ระบบ 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 นี้

  3. ติดตั้งโปรแกรมต่างๆที่จำเป็นต้องใช้เพิ่มเติม ด้วยคำสั่ง
    sudo apt-get install gcc

  4. ติดตั้งโปรแกรม 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

  5. ปรับแต่ง 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

  6. ตรวจสอบความพร้อม interface ด้าน eth1 ให้เรียบร้อย
    แล้วสั่งให้ coovachilli ทำงานด้วยคำสั่งว่า sudo /etc/init.d/chilli start

    ลองให้ PC ลูกข่ายด้าน eth1 เปิด browser ไปยังเวบบนอินเทอร์เนต
    จะถูก redirect ไปหน้าเวบ coova redirecting... สักครู่ประมาณ 5 วินาที
    แล้วเปลี่ยนไปเป็นหน้าเวบ My HotSpot ให้ป้อน Username และ Password
    เมื่อป้อนข้อมูลถูกต้อง ระบบก็จะ redirect ไม่ยังเวบบนอินเทอร์เนต และจะได้รับอนุญาติให้ใช้อินเทอร์เนตได้

    หากต้องการ logout ให้ใช้ browser ป้อนว่า logout  ก็จะทำให้ใช้อินเทอร์เนตไม่ได้

  7. หากต้องการให้ coovachilli ทำงานทุกครั้งที่บูท server ทำดังนี้
    ใช้คำสั่ง  sudo update-rc.d chilli defaults

    และให้เพิ่มบรรทัดคำสั่งว่า /etc/init.d/chilli restart ไว้ในแฟ้ม /etc/rc.local ด้วย
    ยังไม่ทราบสาเหตุ เข้าใจว่าเป็น bug ของ iptables

  8. หากต้องการใช้การ 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 "/var/www/hotspot/">
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride None
                    Order allow,deny
                    allow from all
            </Directory>
            Alias "/dialupadmin/" "/usr/share/freeradius-dialupadmin/htdocs/"
            <Directory "/usr/share/freeradius-dialupadmin/htdocs/">
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride None
                    Order allow,deny
                    allow from all
            </Directory>
            ScriptAlias /cgi-bin/ /var/www/hotspot/cgi-bin/
            <Directory "/var/www/hotspot/cgi-bin/">
                    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