Header Ads

Hotspot Mikrotik dengan Radius Server PHP

EasyHotspot merupakan software open source, jadi seharusnya tidak masalah, jika Anda membuat modifikasi. Dalam posting ini, saya akan mengubah EasyHotspot sedikit. Dan ini berkaitan dengan posting sebelumnya, Mikrotik dan EasyHotspot sebagai Hotspot , kita tidak bisa memutuskan pengguna   dari server radius / EasyHotspot. jadi apa yang harus kita lakukan?
 
Pertama, kita harus tahu bagaimana untuk memutuskan pengguna. Perintah umum untuk memutuskan pengguna, di server radius, termasuk easyhotpsot, menggunakan perintah radclient.

    echo "user-name = <username>" | radclient-x ipaddress: 3799   disconnect <password>
    Sebagai contoh:
    echo “User-Name=11” | radclient -x 192.168.11.1:3799 disconnect easyhotspot

Perintah di atas, hanya untuk FreeRadius dan Chillispot / CoovaChilli, dalam 1 mesin. Bagaimana jika kita memiliki server radius eksternal, dan Chillispot / CoovaChilli diganti dengan mikrotik?  

       echo "user-name = <username>, Framed-IP-Address = <ipaddressclient>" | radclient-x ipaddress: 3799 disconnect <password>
    Sebagai contoh:
    gema User-Name = 11, Framed-IP-Address = 10.5.50.254 | radclient-x 192.168.11.1:3799 disconnect testing123 


Hal ini juga bisa tanpa nama.
Perintah di atas berarti, server radius mengirimkan paket putuskan (POD) ke klien radius (mikrotik), untuk memutuskan pengguna. Selanjutnya, memodifikasi kode PHP di EasyHotspot, sehingga kode php ketika dijalankan, akan menghasilkan perintah untuk memutuskan pengguna, seperti di atas.

1.      Edit  /opt/EasyHotspot/htdocs/system/application/views/onlineusers_view.php. 
  <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); ?>
<?php $this->load->view('header') ?>

<h1><?=$action?></h1>

<table class="stripe">
<tbody>
        <tr>
                <th><?=$this->lang->line('username')?></th>
                <th>IP Address</th>
                <th>Start</th>
                <th>Duration</th>
                <th>Packet</th>
                <th>Force Disconnect</th>
        </tr>
        <?php foreach ($onlineusers->result() as $row): ?>
        <tr>
                <td><?=$row->username;?></td>
                <td><?=$row->ipaddress;?></td>
                <td><?=$row->start;?></td>
                <td><?=$row->time;?></td>
                <td><?=$row->packet;?></td>
                <td><?=anchor('onlineuser/disconnect/'.$row->ipaddress,'disconnect','class="disconnect" ')?></td>
        </tr>
        <?php endforeach;?>
</tbody>
</table>

<? $this->load->view('footer'); ?>


 
2.Edit /opt/EasyHotspot/htdocs/system/application/helpers/freeradius_helper.php.
 function freeradius_disconnectuser($ipaddress, $radiuscommand, $radiusserver, $radiussecret){
            $ci =& get_instance();
            $result = exec('echo Framed-IP-Address='.$ipaddress.' | '.$radiuscommand.' '.$radiusserver.' disconnect '.$radiussecret);
            $ci->db->query("UPDATE radacct SET acctstoptime=now(), acctterminatecause='Force Disconnect' WHERE username = '$username' and acctstoptime is NULL");
 }
3. Edit /opt/EasyHotspot/htdocs/system/application/models/onlineusermodel.php
  <?php

Class Onlineusermodel extends model {
            function onlineusermodel(){
                        parent::Model();
         
                        $this->_table_acct = 'radacct';
         
            }
         
            function get_onlineusers() {
            // this works no matter what ...I think !!!
                        // return $this->db->query('select username, MAX(acctstarttime) as start, MAX(acctstoptime) as stop, sum(acctsessiontime) as time,sum(acctoutputoctets)+sum(acctinputoctets) as packet from radacct group by username having (start > stop) or (stop IS NULL)');
                        return $this->db->query('select username, framedipaddress as ipaddress, MAX(acctstarttime) as start, (acctstoptime) as stop, sum(acctsessiontime) as time,sum(acctoutputoctets)+sum(acctinputoctets) as packet from radacct  where (acctstoptime IS NULL) group by username');
            }
}

?>
 4.At last, edit /opt/EasyHotspot/htdocs/system/application/config/config.php
Pastikan bagian freeradius, alamat ip dan rahasia radius benar, seperti dibawah ini :

    //Freeradius
    $config['radiusserver'] = 192.168.11.1:3799';
    $config['radiuscommand'] = 'radclient -x';
    $config['radiussecret'] = 'testing123';


Tambahan.
Pada EasyHotspot, kita tidak perlu bagian Chillispot. Ketika klik Chillispot, tampaknya kesalahan, dan itu tidak bagus dilihat. Untuk membuatnya terlihat lebih baik, kita dapat menghapus bagian Chillispot. Edit / opt / EasyHotspot / htdocs / system / application / views / admin / header.php. Pastikan garis tentang Chillispot, dihapus, atau diberikan tanda komentar.
<!--<li class="chillispot"><?=anchor('admin/chillispot','Chillispot')?></li>-->
<!--<li class="radius"><?=anchor('admin/freeradius','FreeRadius')?></li>-->
Semoga Bermanfaat dan Selamat Tahun Baru 2014 
Diberdayakan oleh Blogger.