Kusprayitna Blogs

Hidup untuk berbagi ilmu :: IT Linux Windows Database Oracle PHP OpenSource

Disain manajemen hotspot mikrotik menggunakan sistem voucher

Posted by kusprayitna on February 24th, 2010

Setelah berhasil melakukan instalasi mikrotik yang dihubungkan dengan eksternal radius, maka tahapan berikutnya adalah melakukan disain sistem voucher yang akan diterapkan.

Sistem voucher yang dimaksud disini termasuk didalamnya adalah manajemen bandwidth.

Fitur yang diinginkan yaitu :

  1. Periodisasi menggunakan semester
  2. Setiap user bisa dikelompokkan berdasar prodi atau fakultasnya (demikian juga badan, direktorat atau unit kerja) yang dikelola berdasarkan periode
  3. Ada profile yang berisi parameter akses ke jaringan, seperti besarnya bandwidth, quota data, dan quota waktu
  4. Ada voucher yang terbagi dalam tiga jenis, yaitu voucher bisa untuk menambah lebar bandwidth, menambah quota data dan menambah quota waktu (tanggal maupun jam akses).
  5. Voucher bisa digunakan untuk akun civitas akademika UII maupun akun tamu
  6. Seorang user bisa di suspend akses hotspotnya tanpa mempengaruhi sistem informasi lainnya
  7. Berdasarkan periode semesteran, profile setiap kelompok dapat diubah-ubah

Maka stuktur database yang dibuat yaitu :

Keterangan :

  1. radperiod -> tabel utama pembagian periode semesteran
  2. radcurrent -> berisi 1 barus periode sekarang
  3. radprofile -> tabel profile hotspot
    a. lebar bandwidth -> downrate dan uprate
    b. quota data -> limittraffic(logical) , uplimit dan downlimit
    c. quota waktu -> limitexpiration (logical), expiration (datetime) dan limituptime(logical), uptime
  4. radgroup -> tabel group yang berisi daftar fakultas/prodi dengan default profile hotspotnya
  5. radgroupperiode -> tabel assignment profile setiap periodenya
  6. radvoucher -> daftar voucher yang tersedia
  7. radpayment -> tabel pembelian voucher oleh user

Dalam tabel diatas , tabel default mysql yang dipakai di radius ditahap awal tetap digunakan dan difungsikan untuk menyimpan data akun tamu. Untuk akun UII disimpan di LDAP.

Kalau dibuat scriptnya menjadi :

-- phpMyAdmin SQL Dump
-- version 2.9.1.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Waktu pembuatan: 22. Februari 2010 jam 08:20
-- Versi Server: 5.0.45
-- Versi PHP: 5.1.6
--
-- Database: `radius_db`
--

-- --------------------------------------------------------

--
-- Struktur dari tabel `dictionary`
--

CREATE TABLE `dictionary` (
`id` int(10) NOT NULL auto_increment,
`Type` varchar(30) default NULL,
`Attribute` varchar(64) default NULL,
`Value` varchar(64) default NULL,
`Format` varchar(20) default NULL,
`Vendor` varchar(32) default NULL,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Dumping data untuk tabel `dictionary`
--

-- --------------------------------------------------------

--
-- Struktur dari tabel `nas`
--

CREATE TABLE `nas` (
`id` int(10) NOT NULL auto_increment,
`nasname` varchar(128) NOT NULL,
`shortname` varchar(32) default NULL,
`type` varchar(30) default 'other',
`ports` int(5) default NULL,
`secret` varchar(60) NOT NULL default 'secret',
`community` varchar(50) default NULL,
`description` varchar(200) default 'RADIUS Client',
PRIMARY KEY  (`id`),
KEY `nasname` (`nasname`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Dumping data untuk tabel `nas`
--

INSERT INTO `nas` VALUES (1, '192.168.0.1', 'hotspot', 'other', NULL, 'secret', NULL, 'RADIUS Client');

-- --------------------------------------------------------

--
-- Struktur dari tabel `radacct`
--

CREATE TABLE `radacct` (
`RadAcctId` bigint(21) NOT NULL auto_increment,
`AcctSessionId` varchar(32) NOT NULL default '',
`AcctUniqueId` varchar(32) NOT NULL default '',
`UserName` varchar(64) NOT NULL default '',
`Realm` varchar(64) default '',
`NASIPAddress` varchar(15) NOT NULL default '',
`NASPortId` varchar(15) default NULL,
`NASPortType` varchar(32) default NULL,
`AcctStartTime` datetime default '0000-00-00 00:00:00',
`AcctStopTime` datetime default '0000-00-00 00:00:00',
`AcctSessionTime` int(12) default NULL,
`AcctAuthentic` varchar(32) default NULL,
`ConnectInfo_start` varchar(50) default NULL,
`ConnectInfo_stop` varchar(50) default NULL,
`AcctInputOctets` bigint(12) default NULL,
`AcctOutputOctets` bigint(12) default NULL,
`CalledStationId` varchar(50) NOT NULL default '',
`CallingStationId` varchar(50) NOT NULL default '',
`AcctTerminateCause` varchar(32) NOT NULL default '',
`ServiceType` varchar(32) default NULL,
`FramedProtocol` varchar(32) default NULL,
`FramedIPAddress` varchar(15) NOT NULL default '',
`AcctStartDelay` int(12) default NULL,
`AcctStopDelay` int(12) default NULL,
PRIMARY KEY  (`RadAcctId`),
KEY `UserName` (`UserName`),
KEY `FramedIPAddress` (`FramedIPAddress`),
KEY `AcctSessionId` (`AcctSessionId`),
KEY `AcctUniqueId` (`AcctUniqueId`),
KEY `AcctStartTime` (`AcctStartTime`),
KEY `AcctStopTime` (`AcctStopTime`),
KEY `NASIPAddress` (`NASIPAddress`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=39 ;

-- --------------------------------------------------------

--
-- Struktur dari tabel `radcheck`
--

CREATE TABLE `radcheck` (
`id` int(11) unsigned NOT NULL auto_increment,
`UserName` varchar(64) NOT NULL default '',
`Attribute` varchar(32) NOT NULL default '',
`op` char(2) NOT NULL default '==',
`Value` varchar(253) NOT NULL default '',
PRIMARY KEY  (`id`),
KEY `UserName` (`UserName`(32))
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

--
-- Dumping data untuk tabel `radcheck`
--

INSERT INTO `radcheck` VALUES (1, 'prayitna', 'Password', '==', 'password1');
INSERT INTO `radcheck` VALUES (2, 'kuswidianta', 'Password', '==', 'password2');

-- --------------------------------------------------------

--
-- Struktur dari tabel `radcurrent`
--

CREATE TABLE `radcurrent` (
`periodid` varchar(6) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data untuk tabel `radcurrent`
--

INSERT INTO `radcurrent` VALUES ('20092');

-- --------------------------------------------------------

--
-- Struktur dari tabel `radgroup`
--

CREATE TABLE `radgroup` (
`groupid` int(5) NOT NULL,
`groupname` varchar(60) default NULL,
`profid` varchar(15) default NULL,
PRIMARY KEY  (`groupid`),
KEY `profid` (`profid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data untuk tabel `radgroup`
--

INSERT INTO `radgroup` VALUES (100, 'Rektoriat', 'default');
INSERT INTO `radgroup` VALUES (123, 'BSI', 'default');
INSERT INTO `radgroup` VALUES (510, 'FTSP', 'default');
INSERT INTO `radgroup` VALUES (520, 'FTI', 'default');
INSERT INTO `radgroup` VALUES (710, 'FK', 'default');
INSERT INTO `radgroup` VALUES (320, 'FPSB', 'default');
INSERT INTO `radgroup` VALUES (410, 'FH', 'default');
INSERT INTO `radgroup` VALUES (420, 'FIAI', 'default');
INSERT INTO `radgroup` VALUES (310, 'FE', 'default');

-- --------------------------------------------------------

--
-- Struktur dari tabel `radgroupcheck`
--

CREATE TABLE `radgroupcheck` (
`id` int(11) unsigned NOT NULL auto_increment,
`GroupName` varchar(64) NOT NULL default '',
`Attribute` varchar(32) NOT NULL default '',
`op` char(2) NOT NULL default '==',
`Value` varchar(253) NOT NULL default '',
PRIMARY KEY  (`id`),
KEY `GroupName` (`GroupName`(32))
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Dumping data untuk tabel `radgroupcheck`
--

INSERT INTO `radgroupcheck` VALUES (1, 'dynamic', 'Auth-Type', ':=', 'Local');
INSERT INTO `radgroupcheck` VALUES (2, 'tamu', 'Auth-Type', ':=', 'Local');

-- --------------------------------------------------------

--
-- Struktur dari tabel `radgroupperiode`
--

CREATE TABLE `radgroupperiode` (
`periodid` varchar(6) NOT NULL,
`groupid` int(5) NOT NULL,
`profid` varchar(15) default NULL,
PRIMARY KEY  (`periodid`,`groupid`),
KEY `profid` (`profid`),
KEY `groupid` (`groupid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data untuk tabel `radgroupperiode`
--

INSERT INTO `radgroupperiode` VALUES ('20092', 100, 'default');
INSERT INTO `radgroupperiode` VALUES ('20091', 100, '64k');
INSERT INTO `radgroupperiode` VALUES ('20092', 123, 'default');

-- --------------------------------------------------------

--
-- Struktur dari tabel `radgroupreply`
--

CREATE TABLE `radgroupreply` (
`id` int(11) unsigned NOT NULL auto_increment,
`GroupName` varchar(64) NOT NULL default '',
`Attribute` varchar(32) NOT NULL default '',
`op` char(2) NOT NULL default '=',
`Value` varchar(253) NOT NULL default '',
PRIMARY KEY  (`id`),
KEY `GroupName` (`GroupName`(32))
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

--
-- Dumping data untuk tabel `radgroupreply`
--

INSERT INTO `radgroupreply` VALUES (1, 'dynamic', 'Framed-Compression', '==', 'Van-Jacobsen-TCP-IP');
INSERT INTO `radgroupreply` VALUES (2, 'dynamic', 'Framed-Protocol', '==', 'PPP');
INSERT INTO `radgroupreply` VALUES (3, 'dynamic', 'Service-Type', '==', 'Framed-User');
INSERT INTO `radgroupreply` VALUES (4, 'dynamic', 'Framed-MTU', '==', '1500');
INSERT INTO `radgroupreply` VALUES (5, 'tamu', 'Framed-Protocol', ':=', 'PPP');
INSERT INTO `radgroupreply` VALUES (6, 'tamu', 'Service-Type', ':=', 'Framed-User');
INSERT INTO `radgroupreply` VALUES (7, 'tamu', 'Framed-Compression', ':=', 'Van-Jacobsen-TCP-IP');

-- --------------------------------------------------------

--
-- Struktur dari tabel `radpayment`
--

CREATE TABLE `radpayment` (
`username` varchar(15) NOT NULL,
`paymentid` varchar(25) NOT NULL,
`periodid` varchar(6) default NULL,
`bytesdown` bigint(20) NOT NULL default '0',
`voucherid` varchar(15) default NULL,
`bytesup` bigint(20) NOT NULL default '0',
`downlimit` bigint(20) NOT NULL default '0',
`uplimit` bigint(20) NOT NULL default '0',
`hours` int(11) NOT NULL default '0',
`expiration` datetime default '0000-00-00 00:00:00',
`comment` varchar(100) NOT NULL,
`price` decimal(20,2) default NULL,
`paymentdatetime` datetime default '0000-00-00 00:00:00',
`validated` varchar(1) NOT NULL default 'N',
`validateddate` datetime default '0000-00-00 00:00:00',
PRIMARY KEY  (`paymentid`),
KEY `voucherid` (`voucherid`),
KEY `periodid` (`periodid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Struktur dari tabel `radperiod`
--

CREATE TABLE `radperiod` (
`periodid` varchar(6) NOT NULL,
`periodname` varchar(25) default NULL,
`periodstart` datetime default NULL,
`periodend` datetime default NULL,
PRIMARY KEY  (`periodid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data untuk tabel `radperiod`
--

INSERT INTO `radperiod` VALUES ('20092', '2009 smt 2', '2009-08-01 00:00:00', '2010-07-31 23:59:59');
INSERT INTO `radperiod` VALUES ('20091', '2009 smt 1', '2008-07-01 00:00:00', '2009-07-31 23:59:59');
INSERT INTO `radperiod` VALUES ('20101', '2010 smt 1', '2010-08-01 00:00:00', '2011-02-28 23:59:59');

-- --------------------------------------------------------

--
-- Struktur dari tabel `radpostauth`
--

CREATE TABLE `radpostauth` (
`id` int(11) NOT NULL auto_increment,
`user` varchar(64) NOT NULL default '',
`pass` varchar(64) NOT NULL default '',
`reply` varchar(32) NOT NULL default '',
`date` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=35 ;

-- --------------------------------------------------------

--
-- Struktur dari tabel `radprofile`
--

CREATE TABLE `radprofile` (
`profid` varchar(15) NOT NULL,
`profname` varchar(25) default NULL,
`downrate` int(11) NOT NULL default '0',
`uprate` int(11) NOT NULL default '0',
`limittraffic` tinyint(1) NOT NULL default '0',
`uplimit` bigint(20) NOT NULL default '0',
`downlimit` bigint(20) NOT NULL default '0',
`limitexpiration` tinyint(1) NOT NULL default '0',
`expiration` datetime default '0000-00-00 00:00:00',
`limituptime` tinyint(1) NOT NULL default '0',
`uptime` bigint(20) NOT NULL default '0',
`poolname` varchar(25) default NULL,
PRIMARY KEY  (`profid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data untuk tabel `radprofile`
--

INSERT INTO `radprofile` VALUES ('default', '256 kbps 3Gb 1:1', 262144, 262144, 1, 3221225472, 3221225472, 0, '0000-00-00 00:00:00', 0, 0, NULL);
INSERT INTO `radprofile` VALUES ('default siswa', '128 k', 131072, 131072, 1, 3221225472, 3221225472, 0, '0000-00-00 00:00:00', 0, 0, NULL);
INSERT INTO `radprofile` VALUES ('64k', '64 kbps', 65536, 65536, 0, 0, 0, 1, '2010-02-25 00:00:00', 0, 0, NULL);
INSERT INTO `radprofile` VALUES ('dynamic', 'dynamic', 1024, 1024, 0, 0, 0, 0, '0000-00-00 00:00:00', 0, 0, NULL);
INSERT INTO `radprofile` VALUES ('static', 'static', 1024, 1024, 0, 0, 0, 0, '0000-00-00 00:00:00', 0, 0, NULL);

-- --------------------------------------------------------

--
-- Struktur dari tabel `radreply`
--

CREATE TABLE `radreply` (
`id` int(11) unsigned NOT NULL auto_increment,
`UserName` varchar(64) NOT NULL default '',
`Attribute` varchar(32) NOT NULL default '',
`op` char(2) NOT NULL default '=',
`Value` varchar(253) NOT NULL default '',
PRIMARY KEY  (`id`),
KEY `UserName` (`UserName`(32))
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Dumping data untuk tabel `radreply`
--

-- --------------------------------------------------------

--
-- Struktur dari tabel `radsuspend`
--

CREATE TABLE `radsuspend` (
`username` varchar(15) NOT NULL,
`alasan` varchar(100) NOT NULL,
`selesai` datetime default '0000-00-00 00:00:00',
PRIMARY KEY  (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data untuk tabel `radsuspend`
--

INSERT INTO `radsuspend` VALUES ('prayitna', 'tes', '2010-02-10 00:00:00');

-- --------------------------------------------------------

--
-- Struktur dari tabel `radvoucher`
--

CREATE TABLE `radvoucher` (
`voucherid` varchar(15) NOT NULL,
`vouchername` varchar(25) NOT NULL,
`price` decimal(20,2) NOT NULL default '0.00',
`bytesdown` bigint(20) NOT NULL default '0',
`bytesup` bigint(20) NOT NULL default '0',
`downlimit` bigint(20) NOT NULL default '0',
`uplimit` bigint(20) NOT NULL default '0',
`hours` int(11) NOT NULL default '0',
`expiration` datetime default '0000-00-00 00:00:00',
`comment` varchar(100) NOT NULL default '0',
`valid` tinyint(1) default '0',
PRIMARY KEY  (`voucherid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data untuk tabel `radvoucher`
--

INSERT INTO `radvoucher` VALUES ('1gb', '+1 Gb', 100000.00, 0, 0, 1073741824, 1073741824, 0, '0000-00-00 00:00:00', 'Voucher +1 Gb', 1);
INSERT INTO `radvoucher` VALUES ('3gb', '+3 Gb ', 200000.00, 0, 0, 3221225472, 3221225472, 0, '0000-00-00 00:00:00', 'Voucher +3 Gb', 1);
INSERT INTO `radvoucher` VALUES ('5jam', '5jam', 5000.00, 51200, 15360, 0, 0, 5, '0000-00-00 00:00:00', '0', 0);
INSERT INTO `radvoucher` VALUES ('1jam', '1jam', 5000.00, 51200, 15360, 0, 0, 1, '0000-00-00 00:00:00', '0', 0);

-- --------------------------------------------------------

--
-- Struktur dari tabel `usergroup`
--

CREATE TABLE `usergroup` (
`UserName` varchar(64) NOT NULL default '',
`GroupName` varchar(64) NOT NULL default '',
`priority` int(11) NOT NULL default '1',
KEY `UserName` (`UserName`(32))
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data untuk tabel `usergroup`
--

INSERT INTO `usergroup` VALUES ('prayitna', 'dynamic', 1);
INSERT INTO `usergroup` VALUES ('kuswidianta', 'dynamic', 1);

Untuk layar aplikasi berbasis desktop yang disiapkan screenshoot dapat dilihat dibawah ini

Dan untuk akun tamu, pembuatannya yaitu

Untuk akun tamu di layar diatas, ada dua tindakan yang dilakukan ketika akun dibuat, yaitu pertama membuat akun yang disimpan di radcheck dan membuat pemberian voucher yang disimpan di radpayment.

5 Responses to “Disain manajemen hotspot mikrotik menggunakan sistem voucher”

  1. Membuat jaringan hotspot dengan Mikrotik | Kusprayitna Blogs Says:

    [...] Buat disain manajemen (voucher) akses hotspot [...]

  2. rizki Says:

    http://3.bp.blogspot.com/_vo01fvmbZm8/Sec_ojD3mlI/AAAAAAAAAYw/2-f2t8C3kIc/s400/good-luck-bear.jpg

  3. adhi Says:

    wah keren gan, bagi source code delphinya donk....
    kirim email ya... please...

  4. sulapa Says:

    wah keren..bisa minta source code u phpx dong..soalx delphi blm bs buat....

  5. fadhilah Says:

    Mas boleh minta script coding delphinya gak mas
    buat referensi skripsi. soalnya judul saya berhubungan dengan voucher hotspot?????????
    thanks

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>