What I need for provisioning in CentOS | docsis.org

You are here

What I need for provisioning in CentOS

7 posts / 0 new
Last post
MESCANO1
What I need for provisioning in CentOS

Goodnight. The reason for my message is to ask for help for my aproving, I want to do it in CentOs. the question is what programs will you use for example the version of Centos? the DHCP version? the TFTP version. How would I do my NAT? Could it be on Shoreline? considering this, my network diagram would be as follows. CMTS Network: 172.17.0.2/24 Server Network: 172.17.0.1/24 CM Network: 10.50.0.1/16 CPE Network: 172.16.0.1/16 having as CMTS an Arris C3 maybe you could help me with an example configuration. I'm desperate please tell me what to do, I'm almost out of time. !! this is my email misael_software@hotmail.com I always wait for the mail. !!

kamien
CentOS 7

I'm using CentOS 7 in my lab. My provisioning server is also my NAT gateway, but typically that would be a dedicated hardware router depending on the size of your subscriber base.

yum update -y
yum install dhcpd tftpd tftp-server xinetd ntp -y

I have an Arris C3 on another network but I'm using that in bridge mode ... so all of my modems, CPEs, and provisioning server are on the same subnet.

MESCANO1
Answer

Hello Kamien

regards
You could help me with the same implementation that you have in your server, Centos 7 since I need to implement it in my NETWORK. As it would be the procedure I already have installed the Centos7 + DHCP + tftpd + tftp-server and the xinetd, you could somehow help me through TeamViewer would be that easy, since I am somewhat confused.

kamien
If you have specific

If you have specific questions I will be happy to give you hints, but I can't do your job for you!

MESCANO1
res

Thank you very much for your help.
I clarify that it is not that I ask to do the work for myself, it is in my interest to learn for that reason I ask why I am experimenting. in the same way I appreciate the support of darkng for the detailed explanation right now I am working on all the ingredients.

slds.

darkng
Hello

Hello MESCANO1,

First of all get any CentOS Version like for example: CentOS 6.7, CentOS 6.8, CentOS 6.9.
You can do nat behind the CentOS Linux router like getting any cheap Mikrotik Router for example:
https://www.google.at/search?q=hex+router+mikrotik&oq=hex+router+mikroti...

About the CentOS you can download this version:
http://archive.kernel.org/centos-vault/6.7/isos/i386/CentOS-6.7-i386-bin...

You can install it as a webserver and in that way you can program any php script for monitoring.
Some packages that you can install/use even for latter configurations are:
yum install mc wget crontabs vixie-cron make gcc libtool-ltdl curl mysql-server mysql-devel net-snmp net-snmp-utils php php-mysql php-mcrypt php-gd php-snmp php-process ntp sendmail sendmail-cf alpine mutt vsftpd ftp sudo tftp-server glibc.i686 bison net-snmp-devel flex flex-devel

For the dhcpd configuration you can use this basic script.
Please add this script to /etc/dhcp/dhcpd.conf by using any editor like : nano or vim.

# DHCP Server Configuration file for route mode CMTS
authoritative;
option domain-name "localdomain";
option domain-name-servers 8.8.8.8,8.8.4.4;
option time-servers 192.53.103.108;
ddns-update-style none;
min-lease-time 2592000;
default-lease-time 2592000;
max-lease-time 2592000;
log-facility local6;
option space PacketCable;
option PacketCable.pri-dhcp code 1 = ip-address;
option PacketCable.sec-dhcp code 2 = ip-address;
option PacketCable.kerberos-realm-name code 6 = text;
option packet-cable code 122 = encapsulate PacketCable;
option PacketCable.pri-dhcp 172.33.55.10;
# interface eth0
subnet 172.33.55.0 netmask 255.255.255.0 {
}
# cm on cmts 2 (arris)
subnet 10.0.0.0 netmask 255.255.0.0 {
option routers 10.0.0.1;
}
# cpe
subnet 10.15.0.0 netmask 255.255.0.0 {
option routers 10.15.0.1;
range dynamic-bootp 10.15.0.0 10.15.31.255;
}

host cm-host1 {
hardware ethernet 00:26:24:A1:07:5A;
fixed-address 10.3.1.121;
filename "15mbps-2.cfg";
}

Also as above you need to add the hosts/modems to your dhcp server configuration all the time.
If you want to give the cable modem.

For tftp service you can use the xinetd service.
You can edit the configuration file like below

GNU nano 2.0.9 File: /etc/xinetd.d/tftp

# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/user/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}

For docsis config file you can use the DOCSIS generator or find any example on internet.

Don't forget to add the services to boon on every restart.
chmod 755 /etc/init.d/dhcpd
chkconfig --add dhcpd
chkconfig --add httpd
chkconfig --add mysqld
chkconfig --add vsftpd
chkconfig --add xinetd

chkconfig --levels 2345 dhcpd on
chkconfig --levels 2345 httpd on
chkconfig --levels 2345 mysqld on
chkconfig --levels 2345 vsftpd on
chkconfig --levels 2345 xinetd on

Otherwise for the dhcpd.conf you can use even this advanced configuration file for your dhcpd server.

# DHCP Server Configuration file for route mode CMTS
#
authoritative;
option domain-name "localdomain";
option domain-name-servers 8.8.8.8,8.8.4.4;
option time-servers 192.53.103.108;
ddns-update-style none;
min-lease-time 600;
default-lease-time 600;
max-lease-time 600;
log-facility local6;
option wpad code 252 = text;
deny client-updates;

option space PacketCable;
option PacketCable.pri-dhcp code 1 = ip-address;
option PacketCable.sec-dhcp code 2 = ip-address;
option PacketCable.kerberos-realm-name code 6 = text;
option packet-cable code 122 = encapsulate PacketCable;
option PacketCable.pri-dhcp 0.0.0.0;

option space vsi;
option vsi.version code 6 = string;
option vsi.model code 9 = string;
option vsi.model_other code 201 = string;
option vsi.version_other code 202 = string;
option vsi-pkt code 43 = encapsulate vsi;

# Define option 122
option space docsis-mta;
option docsis-mta.dhcp-server-1 code 1 = ip-address;
option docsis-mta.dhcp-server-2 code 2 = ip-address;
option docsis-mta.provision-server code 3 = { integer 8, string };
option docsis-mta.as-req-as-rep-1 code 4 = { integer 32, integer 32, integer 32 };
option docsis-mta.as-req-as-rep-2 code 5 = { integer 32, integer 32, integer 32 };
option docsis-mta.krb-realm-name code 6 = string;
option docsis-mta.tgs-util code 7 = integer 8;
option docsis-mta.timer code 8 = integer 8;
option docsis-mta.ticket-ctrl-mask code 9 = integer 16;
option docsis-mta-pkt code 122 = encapsulate docsis-mta;

# Globally set option 122 settings just in case
option docsis-mta.dhcp-server-1 172.22.0.13;
option docsis-mta.provision-server 0 "\003lab\007albinet\003net\000";
option docsis-mta.krb-realm-name "\005BASIC\0011\000";

#Define option 43
option space vendorOptions;
option vendorOptions.deviceType code 2 = string;
option vendorOptions.serialNumber code 4 = string;
option vendorOptions.hardwareVersion code 5 = string;
option vendorOptions.softwareVersion code 6 = string;
option vendorOptions.bootRomVersion code 7 = string;
option vendorOptions.oui code 8 = string;
option vendorOptions.modelNumber code 9 = string;
option vendorOptions.docsisVendor code 10 = string;
#option vendorOptions.docsisVendor.version_other code 202 = string;
option vendorOptions-pkt code 43 = encapsulate vendorOptions;

stash-agent-options true;

option space myagent;
option myagent.circuit-id code 1 = text;
option myagent.remote-id code 2 = text;
option myagent.agent-id code 3 = text;
option myagent.DOCSIS-device-class code 4 = unsigned integer 32;
option myagent.link-selection code 5 = ip-address;
option myagent.subscriber-id code 6 = text;
option myagent.encapsulation code 82 = encapsulate myagent;

log( info,concat("@@DEBUG myagent.circuit-id ",substring(option myagent.circuit-id,0,6)));
log( info,concat("@@DEBUG myagent.remote-id ",option myagent.remote-id));
log( info,concat("@@DEBUG myagent.agent-id ",substring(option myagent.agent-id,0,6)));
log( info,concat("@@DEBUG myagent.DOCSIS-device-class ",substring(option myagent.DOCSIS-device-class,0,6)));
log( info,concat("@@DEBUG myagent.link-selection ",substring(option myagent.link-selection,0,6)));
log( info,concat("@@DEBUG myagent.subscriber-id ",substring(option myagent.subscriber-id,0,6)));
log( info,concat("@@DEBUG myagent.encapsulation ",substring(option myagent.encapsulation,0,6)));
#log( info,concat("@@DEBUG Vendor ID ",substring(option vendor-class-identifier,0,6)));
#log( info,concat("@@DEBUG Vendor ID ",substring(option vendor-class-identifier,0,5)));
#log( info,concat("@@DEBUG Vendor ID ",substring(option vendor-class-identifier,0,4)));
log( info,concat("@@DEBUG Vendor ID ",option vendor-class-identifier));
log( info,concat("@@DEBUG BOOTP_IP ", binary-to-ascii(10, 8, ".", packet(24,4))));
log( info,concat("@@DEBUG Remote-ID: ",binary-to-ascii(16,8,":",option agent.remote-id)) );
log( info,"@@DEBUG ");

# CheckingClass
class "CMs"
{
match if substring(option vendor-class-identifier,0,6)="docsis";
log(info,"");
log(info,"");
log(info,"");
log(info,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
log(info,"@@ We have a CM!!! ");
log(info, concat("@@ MAC Address ", binary-to-ascii(16,8,":",substring(hardware,1,6))));
log(info,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
log(info,"");
log(info,"");
log(info,"");

log(info,"********************************************");
log(info,"@@ Option 43 values:");
log(info, concat("@@ Device Type: ", option vendorOptions.deviceType));
log(info, concat("@@ Serial Number: ", option vendorOptions.serialNumber));
log(info, concat("@@ Hardware Version: ", option vendorOptions.hardwareVersion));
log(info, concat("@@ Software Version: ", option vendorOptions.softwareVersion));
log(info, concat("@@ Boot Rom Version: ", option vendorOptions.bootRomVersion));
log(info, concat("@@ OUI: ", option vendorOptions.oui));
log(info, concat("@@ Model Number: ", option vendorOptions.modelNumber));
log(info, concat("@@ Docsis Vendor: ", option vendorOptions.docsisVendor));
log(info, concat("@@ MAC Address ", binary-to-ascii(16,8,":",substring(hardware,1,6))));
log(info,"********************************************");
log(info,"");
log(info,"");
on commit {
set CIP = binary-to-ascii(10, 8, ".", leased-address);
set CMac = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
set LeaseTime = binary-to-ascii(10,32,"",encode-int(lease-time,32));

execute("php /home/albismart/reset_albismart.php", "commit", CIP, CMac, LeaseTime) ;
}
log(info,"");
}

class "MTAs"
{
match if substring(option vendor-class-identifier,0,4)="pktc";
if(exists myagent.remote-id )
{
log(info," ");
log(info," ");
log(info,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
log(info,"@@ We have an MTA!!! ");
log(info, concat("@@ MAC Address ", binary-to-ascii(16,8,":",substring(hardware,1,6))));
log(info,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
log(info," ");
log(info," ");
}
}

class "CPEs"
{
match if not (substring(option vendor-class-identifier,0,6)="docsis" or substring(option vendor-class-identifier,0,4)="pktc");
log(info," ");
log(info," ");
log(info,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
log(info,concat("@@ We have an authorized CPE :) MAC Address ", binary-to-ascii(16,8,":",substring(hardware,1,6))));
log(info,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
log(info," ");
log(info," ");

}

class "EPC3208"
{
match if option vendorOptions.modelNumber = "EPC3208";
#filename "up.epc3208.reset.cfg";
next-server 172.22.0.13;
}

class "EPC3925"
{
match if option vendorOptions.modelNumber = "EPC3925";
log(info, concat("@@ EPC3925 Class - Updating to the latest version", option vendorOptions.modelNumber));
filename "epc3925.reset.cfg";
#filename "epc3925.access.cfg";
next-server 172.22.0.13;
}

shared-network CentOSProvisioningDhcpServer
{
subnet 172.22.0.0 netmask 255.255.255.0 {}
}

shared-network ArrisC4
{
subnet 172.22.8.0 netmask 255.255.255.0
{
ping-check true;
option time-offset 3600;
option subnet-mask 255.255.255.0;
option broadcast-address 172.22.8.255;
option routers 172.22.8.1;
option time-servers 172.22.0.13;
option log-servers 172.22.0.13;
next-server 172.22.0.13;
filename "basic.config.cfg";
pool
{
range 172.22.8.2 172.22.8.254;
deny members of "MTAs";
deny members of "CPEs";
allow members of "CMs";

}
}
subnet 172.22.9.0 netmask 255.255.255.0
{
ping-check true;
option time-offset 3600;
option subnet-mask 255.255.255.0;
option broadcast-address 172.22.9.255;
option routers 172.22.9.1;
option time-servers 172.22.0.13;
option log-servers 172.22.0.13;
option domain-name-servers 172.22.0.13;
next-server 172.22.0.13;
filename "tc7200.pktc.cfg";
pool
{
range 172.22.9.2 172.22.9.254;
deny members of "CMs";
deny members of "CPEs";
allow members of "MTAs";
}
}
subnet 172.22.10.0 netmask 255.255.255.0
{
ping-check true;
option subnet-mask 255.255.255.0;
option broadcast-address 172.22.10.255;
option routers 172.22.10.1;
option domain-name-servers 8.8.8.8,8.8.4.4;
pool
{
range 172.22.10.2 172.22.10.254;
deny members of "CMs";
deny members of "MTAs";
allow members of "CPEs";
}
}
}

MESCANO1
Question

Dear darkng
this part of the configuration I paste a continuation that is the advanced DHCp as I would use it. or it is necessary taking into account that you already use the other basic configuration !!

ask how the red part of the CMTS would be structured knowing that it is a C3 ARRIS would be in router mode or bridge mode?

and my server of provisioning would have to ip. taking into account the configuration you are giving me.

Thanks for the support.

_____________________________________________________________________________________________
Otherwise for the dhcpd.conf you can use even this advanced configuration file for your dhcpd server.

# DHCP Server Configuration file for route mode CMTS
#
authoritative;
option domain-name "localdomain";
option domain-name-servers 8.8.8.8,8.8.4.4;
option time-servers 192.53.103.108;
ddns-update-style none;
min-lease-time 600;
default-lease-time 600;
max-lease-time 600;
log-facility local6;
option wpad code 252 = text;
deny client-updates;

option space PacketCable;
option PacketCable.pri-dhcp code 1 = ip-address;
option PacketCable.sec-dhcp code 2 = ip-address;
option PacketCable.kerberos-realm-name code 6 = text;
option packet-cable code 122 = encapsulate PacketCable;
option PacketCable.pri-dhcp 0.0.0.0;

option space vsi;
option vsi.version code 6 = string;
option vsi.model code 9 = string;
option vsi.model_other code 201 = string;
option vsi.version_other code 202 = string;
option vsi-pkt code 43 = encapsulate vsi;

# Define option 122
option space docsis-mta;
option docsis-mta.dhcp-server-1 code 1 = ip-address;
option docsis-mta.dhcp-server-2 code 2 = ip-address;
option docsis-mta.provision-server code 3 = { integer 8, string };
option docsis-mta.as-req-as-rep-1 code 4 = { integer 32, integer 32, integer 32 };
option docsis-mta.as-req-as-rep-2 code 5 = { integer 32, integer 32, integer 32 };
option docsis-mta.krb-realm-name code 6 = string;
option docsis-mta.tgs-util code 7 = integer 8;
option docsis-mta.timer code 8 = integer 8;
option docsis-mta.ticket-ctrl-mask code 9 = integer 16;
option docsis-mta-pkt code 122 = encapsulate docsis-mta;

# Globally set option 122 settings just in case
option docsis-mta.dhcp-server-1 172.22.0.13;
option docsis-mta.provision-server 0 "\003lab\007albinet\003net\000";
option docsis-mta.krb-realm-name "\005BASIC\0011\000";

#Define option 43
option space vendorOptions;
option vendorOptions.deviceType code 2 = string;
option vendorOptions.serialNumber code 4 = string;
option vendorOptions.hardwareVersion code 5 = string;
option vendorOptions.softwareVersion code 6 = string;
option vendorOptions.bootRomVersion code 7 = string;
option vendorOptions.oui code 8 = string;
option vendorOptions.modelNumber code 9 = string;
option vendorOptions.docsisVendor code 10 = string;
#option vendorOptions.docsisVendor.version_other code 202 = string;
option vendorOptions-pkt code 43 = encapsulate vendorOptions;

stash-agent-options true;

option space myagent;
option myagent.circuit-id code 1 = text;
option myagent.remote-id code 2 = text;
option myagent.agent-id code 3 = text;
option myagent.DOCSIS-device-class code 4 = unsigned integer 32;
option myagent.link-selection code 5 = ip-address;
option myagent.subscriber-id code 6 = text;
option myagent.encapsulation code 82 = encapsulate myagent;

log( info,concat("@@DEBUG myagent.circuit-id ",substring(option myagent.circuit-id,0,6)));
log( info,concat("@@DEBUG myagent.remote-id ",option myagent.remote-id));
log( info,concat("@@DEBUG myagent.agent-id ",substring(option myagent.agent-id,0,6)));
log( info,concat("@@DEBUG myagent.DOCSIS-device-class ",substring(option myagent.DOCSIS-device-class,0,6)));
log( info,concat("@@DEBUG myagent.link-selection ",substring(option myagent.link-selection,0,6)));
log( info,concat("@@DEBUG myagent.subscriber-id ",substring(option myagent.subscriber-id,0,6)));
log( info,concat("@@DEBUG myagent.encapsulation ",substring(option myagent.encapsulation,0,6)));
#log( info,concat("@@DEBUG Vendor ID ",substring(option vendor-class-identifier,0,6)));
#log( info,concat("@@DEBUG Vendor ID ",substring(option vendor-class-identifier,0,5)));
#log( info,concat("@@DEBUG Vendor ID ",substring(option vendor-class-identifier,0,4)));
log( info,concat("@@DEBUG Vendor ID ",option vendor-class-identifier));
log( info,concat("@@DEBUG BOOTP_IP ", binary-to-ascii(10, 8, ".", packet(24,4))));
log( info,concat("@@DEBUG Remote-ID: ",binary-to-ascii(16,8,":",option agent.remote-id)) );
log( info,"@@DEBUG ");

# CheckingClass
class "CMs"
{
match if substring(option vendor-class-identifier,0,6)="docsis";
log(info,"");
log(info,"");
log(info,"");
log(info,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
log(info,"@@ We have a CM!!! ");
log(info, concat("@@ MAC Address ", binary-to-ascii(16,8,":",substring(hardware,1,6))));
log(info,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
log(info,"");
log(info,"");
log(info,"");

log(info,"********************************************");
log(info,"@@ Option 43 values:");
log(info, concat("@@ Device Type: ", option vendorOptions.deviceType));
log(info, concat("@@ Serial Number: ", option vendorOptions.serialNumber));
log(info, concat("@@ Hardware Version: ", option vendorOptions.hardwareVersion));
log(info, concat("@@ Software Version: ", option vendorOptions.softwareVersion));
log(info, concat("@@ Boot Rom Version: ", option vendorOptions.bootRomVersion));
log(info, concat("@@ OUI: ", option vendorOptions.oui));
log(info, concat("@@ Model Number: ", option vendorOptions.modelNumber));
log(info, concat("@@ Docsis Vendor: ", option vendorOptions.docsisVendor));
log(info, concat("@@ MAC Address ", binary-to-ascii(16,8,":",substring(hardware,1,6))));
log(info,"********************************************");
log(info,"");
log(info,"");
on commit {
set CIP = binary-to-ascii(10, 8, ".", leased-address);
set CMac = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
set LeaseTime = binary-to-ascii(10,32,"",encode-int(lease-time,32));

execute("php /home/albismart/reset_albismart.php", "commit", CIP, CMac, LeaseTime) ;
}
log(info,"");
}

class "MTAs"
{
match if substring(option vendor-class-identifier,0,4)="pktc";
if(exists myagent.remote-id )
{
log(info," ");
log(info," ");
log(info,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
log(info,"@@ We have an MTA!!! ");
log(info, concat("@@ MAC Address ", binary-to-ascii(16,8,":",substring(hardware,1,6))));
log(info,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
log(info," ");
log(info," ");
}
}

class "CPEs"
{
match if not (substring(option vendor-class-identifier,0,6)="docsis" or substring(option vendor-class-identifier,0,4)="pktc");
log(info," ");
log(info," ");
log(info,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
log(info,concat("@@ We have an authorized CPE :) MAC Address ", binary-to-ascii(16,8,":",substring(hardware,1,6))));
log(info,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
log(info," ");
log(info," ");

}

class "EPC3208"
{
match if option vendorOptions.modelNumber = "EPC3208";
#filename "up.epc3208.reset.cfg";
next-server 172.22.0.13;
}

class "EPC3925"
{
match if option vendorOptions.modelNumber = "EPC3925";
log(info, concat("@@ EPC3925 Class - Updating to the latest version", option vendorOptions.modelNumber));
filename "epc3925.reset.cfg";
#filename "epc3925.access.cfg";
next-server 172.22.0.13;
}

shared-network CentOSProvisioningDhcpServer
{
subnet 172.22.0.0 netmask 255.255.255.0 {}
}

shared-network ArrisC4
{
subnet 172.22.8.0 netmask 255.255.255.0
{
ping-check true;
option time-offset 3600;
option subnet-mask 255.255.255.0;
option broadcast-address 172.22.8.255;
option routers 172.22.8.1;
option time-servers 172.22.0.13;
option log-servers 172.22.0.13;
next-server 172.22.0.13;
filename "basic.config.cfg";
pool
{
range 172.22.8.2 172.22.8.254;
deny members of "MTAs";
deny members of "CPEs";
allow members of "CMs";

}
}
subnet 172.22.9.0 netmask 255.255.255.0
{
ping-check true;
option time-offset 3600;
option subnet-mask 255.255.255.0;
option broadcast-address 172.22.9.255;
option routers 172.22.9.1;
option time-servers 172.22.0.13;
option log-servers 172.22.0.13;
option domain-name-servers 172.22.0.13;
next-server 172.22.0.13;
filename "tc7200.pktc.cfg";
pool
{
range 172.22.9.2 172.22.9.254;
deny members of "CMs";
deny members of "CPEs";
allow members of "MTAs";
}
}
subnet 172.22.10.0 netmask 255.255.255.0
{
ping-check true;
option subnet-mask 255.255.255.0;
option broadcast-address 172.22.10.255;
option routers 172.22.10.1;
option domain-name-servers 8.8.8.8,8.8.4.4;
pool
{
range 172.22.10.2 172.22.10.254;
deny members of "CMs";
deny members of "MTAs";
allow members of "CPEs";
}
}
}