====== Налаштування доступу користувачів за технологією DOCSIS ======
{{:motorola_bsr2000.jpg?|}}
Починаючи з релізу 0.3.8 повністю ліквідовано стару модель роботи з DOCSIS і замість неї реалізовано максимально просту, без перезбірки конфігів модемів на льоту, під кожного користувача. Для того, щоб мати приблизне розуміння того, як це все працює - рекомендуємо ознайомитися з наступною [[http://habrahabr.ru/post/102429/|статтям]]. У стислості схема наступна: "користувач" -> "модем" -> "CMTS" -> "сервер". При "вставанні" модем спочатку здійснює пошук DS і US, після чого намагається отримати по tftp валідний конфіг і якщо це вдалося передає DHCP запити від користувача крізь DHCP Relay на CMTS до нашого сервера. Для забезпечення хоч якоїсь авторизації, з урахуванням того, що CMTS не вміють бріджинг, використовується заборона на проходження трафіку від IP, які не були отримані за допомогою нашого DHCP сервера. 
======  Угоди: ====== 
 **CMTS** - валідно налаштована Motorola BSR 2000, Motorola BSR1000, Cisco UBR або Arris Cadant\\
 **інтерфейс em1** - дивиться на налаштовану CMTS\\
 **10.10.100.0/24** - мережа DOCSIS модемів\\
 **10.10.200.0/24** - мережа користувачів\\
 **10.10.10.10.10/24** - адреса нашого сервера, висить аліасом на em1\\
 **10.10.10.9/24** - адреса CMTS ethernet 0/0\\
 **10.10.100.1/24** - адреса CMTS cable 0/0\\
 **10.10.200.1/24** - адреса CMTS cable 0/0 secondary\\
====== Авторизація на CMTS ======
Заборона для проходження трафіку від IP отриманих не крізь наш DHCP-сервер (для вписаних вручну, припустимо) здійснюється в режимі конфігурації кабельного інтерфейсу:
Motorola: **host authorization on** \\
Cisco: **cable source-verify dhcp** \\
Arris: **ip verify-ip-address-filter** \\ 
====== Налаштування tftpd ======
  # mkdir /tftpboot
 
далі 
  # vim /etc/inetd.conf
розкоментуємо наступний рядок:
  tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot
і перезапустимо inetd
  # /etc/rc.d/inetd restart
  
перевіримо працездатність tftp
  # touch /tftpboot/testme  
  # tftp 127.0.0.1           
  tftp> get testme
  tftp> q
  # ls -la testme 
  -rw-r--r---- 1 root wheel 0 Feb 4 13:55 testme
  # rm testme /tftpboot/testme
====== Збірка початкового конфіга ======
Для складання файлу конфігурації модему нам знадобиться утиліта docsis, встановлюємо:
  # cd /usr/ports/net-mgmt/docsis/ && make install
На 64 бітних системах docsis 0.9.5 генерує биті файли і може не зібратися з портів. У такому разі доведеться вдатися до ручного збирання. Забираємо останню версію з [[http://sourceforge.net/projects/docsis/files/docsis/|сайту розробників]], і збираємо ручками:
  # tar zxvf docsis-0.9.6.tar.gz
  # cd docsis-0.9.6
  # ./configure && make && make install
Після чого ми можемо спробувати зібрати найпростіший тестовий конфіг такого змісту з ключем "docsis123" (він же має бути сконфігурований на CMTS). Конфіг (**/root/modems.s** ) у нас матиме такий вигляд:
 Main {
 NetworkAccess      1;
     GlobalPrivacyEnable 0;
     UsServiceFlow
     {
     UsServiceFlowRef 200;
     QosParamSetType 7;
     MaxRateSustained 0;
     SchedulingType 2;
     }
     DsServiceFlow
     {
     DsServiceFlowRef 100;
     QosParamSetType 7;
     TrafficPriority 3;
     MaxRateSustained 0;
     }
  MaxCPE 16;
 }
 
  # echo "docsis123" > /root/keyfile
  # docsis -e /root/modems.s /root/keyfile /tftpboot/modems.b
Перевірити чого ми назбирали в бінарний конфіг можна так:
  # docsis -d /tftpboot/modems.b
  
====== Конфігурація CMTS на прикладі BSR2000 ======
  enable password 0 changeme
!
hostname bsr2000
!
!
!
no service password-encryption
!
!
ip ftp username admin
ip ftp password 0 docsis123
!
ip name-server 10.10.10.10
!
logging buffered 51200
no logging control docsis
logging admin-status unconstrained
logging rate-limit 100 1
logging buffered notifications
logging console errors
!
!
cable cmts type domestic
!
!
interface ethernet 0/0
 ip address 10.10.10.9 255.255.255.0 
 no shutdown
!
interface ethernet 0/1
 shutdown
!
interface ethernet 0/2
 shutdown
!
interface ethernet 0/3
 shutdown
!
interface gigaether 0/0
 shutdown
!
interface gigaether 0/1
 shutdown
!
interface cable 0/0
 ip address 10.10.100.1 255.255.255.0 
 ip address 10.10.200.1 255.255.255.0 secondary 
 ip helper-address 10.10.10.10
 cable helper-address 10.10.10.10 cable-modem
 cable helper-address 10.10.10.10 host
 no shutdown
 cable downstream 0 frequency 455250000
 cable downstream 0 interleave-depth 128
 cable downstream 0 power-level 450
 no cable downstream 0 shutdown
 cable upstream 0 frequency 34000000
 cable upstream 0 power-level 260
 cable upstream 0/0 modulation-profile 2
 no cable upstream 0 shutdown
 no cable upstream 0/0 shutdown
 no cable upstream 0/1 shutdown
 no cable upstream 0/2 shutdown
 no cable upstream 0/3 shutdown
 cable upstream 1 frequency 34000000
 cable upstream 1 power-level 260
 cable upstream 1/0 modulation-profile 2
 no cable upstream 1 shutdown
 no cable upstream 1/0 shutdown
 no cable upstream 1/1 shutdown
 no cable upstream 1/2 shutdown
 no cable upstream 1/3 shutdown
 cable upstream 2 frequency 34000000
 cable upstream 2 power-level 260
 cable upstream 2/0 modulation-profile 2
 no cable upstream 2 shutdown
 no cable upstream 2/0 shutdown
 no cable upstream 2/1 shutdown
 no cable upstream 2/2 shutdown
 no cable upstream 2/3 shutdown
 cable upstream 3 frequency 34000000
 cable upstream 3 power-level 260
 cable upstream 3/0 modulation-profile 2
 no cable upstream 3 shutdown
 no cable upstream 3/0 shutdown
 no cable upstream 3/1 shutdown
 no cable upstream 3/2 shutdown
 no cable upstream 3/3 shutdown
 cable dynamic-service authorization-mode disable
 ip dhcp relay information option
 cable downstream schedule priority-wfq
 no cable wireless downstream modulation qpsk
!
!
!
!
!
!
! 
 ip route 0.0.0.0 0.0.0.0 10.10.10.10
!
!
!
 snmp-server engineid local 80001375030030b880f46100
 snmp-server context 
 snmp-server community changeme2 ro view changeme2
 snmp-server chassis-id Serial Number: XXX-YY-ZZZZ
 snmp-server contact Docsis Admin (docsis@isp.ua)
 snmp-server sysname bsr2000
 snmp-server enable traps snmp
 snmp-server enable traps ospf
 snmp-server enable traps bgp
 snmp-server enable traps entity
 snmp-server enable traps docsdevcmts
snmp-server enable traps flap
snmp-server location Somewhere
snmp-server view changeme2 iso included
snmp-server view changeme2 org included
snmp-server view changeme2 dod included
snmp-server view changeme2 internet included
snmp-server view changeme2 directory included
snmp-server view changeme2 mgmt included
snmp-server view changeme2 experimental included
snmp-server view changeme2 private included
snmp-server view changeme2 security included
snmp-server view changeme2 snmpv2 included
snmp-server view changeme2 mib-2 included
snmp-server view changeme2 system included
snmp-server view changeme2 interfaces included
snmp-server view changeme2 at included
snmp-server view changeme2 ip included
snmp-server view changeme2 icmp included
snmp-server view changeme2 tcp included
snmp-server view changeme2 udp included
snmp-server view changeme2 egp included
snmp-server view changeme2 transmission included
snmp-server view changeme2 snmp included
snmp-server view changeme2 ospf included
snmp-server view changeme2 rip2 included
snmp-server view changeme2 ifmib included
snmp-server view changeme2 riverdelta included
snmp-server trap rate-limit 100 1
!
!
packet-cable
 dqos shutdown
 no em shutdown
 no es shutdown
ipsec
 ipsec shutdown
password telnet 0 changeme
!
session-timeout console 0
session-timeout telnet 5
!
telnet session-limit 8
!
!
!
!
!
!
!
ssh enable
!
!
logging on
logging trap notifications
no logging snmp-trap
logging facility local7
!
!
!
!
!
!
cable shared-secret 0 "docsis123"
enable rdn-process
!
!
!
!
cable service-class
 mab DefBEDown 1
!
 mab DefRRDown 1
!
 mab DefBEUp 1
!
 mab DefRRUp 1
!
 mab DefUGS 1
!
 mab DefUGSAD 1
!
 mab DefRTPS 1
!
 mab DefNRTPS 1
!
!
====== Конфігурація CMTS на прикладі BSR1000 ======
!
hostname rdelta
!
!
boot system nvram:appImage.bin.r.01.00.09.PRR
!
!
ip name-server 10.10.10.10
!
logging buffered 262144
logging rate-limit auto-restart
logging rate-limit 100 1
logging buffered warnings
logging console warnings
!
!
interface ethernet 0/0
 ip address 10.10.10.9 255.255.255.0
!
interface cable 0/0
 ip address 10.10.100.1 255.255.255.0
 ip address 10.10.200.1 255.255.255.0 secondary
 ip helper-address 10.10.10.10
 cable helper-address 10.10.10.10 cable-modem
 cable helper-address 10.10.10.10 host
 cable downstream 0 frequency 455250000
 cable downstream 0 power-level 450
 no cable downstream 0 shutdown
 cable upstream 0 frequency 34000000
 cable upstream 0 power-level 260
 no cable upstream 0 shutdown
 cable upstream 1 frequency 34000000
 cable upstream 1 power-level 260
 no cable upstream 1 shutdown
 cable upstream 2 frequency 34000000
 cable upstream 2 power-level 260
 no cable upstream 2 shutdown
 cable upstream 3 frequency 34000000
 cable upstream 3 power-level 260
 no cable upstream 3 shutdown
 ip dhcp relay information option
!
!
!
!
!
!
ip route 0.0.0.0 0.0.0.0 10.10.10.10
!
!
!
snmp-server context 
snmp-server community changeme2 ro view changeme2
snmp-server contact Docsis docsis@isp.ua
snmp-server sysname bsr1000
snmp-server enable traps
snmp-server location Somewhere
snmp-server view changeme2 iso included
snmp-server view changeme2 org included
snmp-server view changeme2 dod included
snmp-server view changeme2 internet included
snmp-server view changeme2 directory included
snmp-server view changeme2 mgmt included
snmp-server view changeme2 experimental included
snmp-server view changeme2 private included
snmp-server view changeme2 security included
snmp-server view changeme2 snmpv2 included
snmp-server view changeme2 mib-2 included
snmp-server view changeme2 system included
snmp-server view changeme2 interfaces included
snmp-server view changeme2 at included
snmp-server view changeme2 ip included
snmp-server view changeme2 icmp included
snmp-server view changeme2 tcp included
snmp-server view changeme2 udp included
snmp-server view changeme2 egp included
snmp-server view changeme2 transmission included
snmp-server view changeme2 snmp included
snmp-server view changeme2 ospf included
snmp-server view changeme2 rip2 included
snmp-server view changeme2 ifmib included
snmp-server view changeme2 riverdelta included
snmp-server trap rate-limit 100 1
no snmp-server trap rate-limit auto-restart
!
!
!
!
logging on
logging trap notifications
!
clock timezone EET 2 0
!
!
cable shared-secret "docsis123"
!
!
====== Налаштування Ubilling ======
1. Слід додати таке до **config/global.template** на початку секції в shared-network 
subnet 10.10.10.0 netmask 255.255.255.0 {
}
2. Додати підмережу модемів 
Початкова ІР: 10.10.100.0
Остання ІР: 10.10.100.255
Тип мережі: DHCP static hosts
Мережа/CIDR: 10.10.100.0/24
3. Добавити підмережу DOCSIS користувачів
Початкова ІР: 10.10.200.0
Остання ІР: 10.10.200.255
Тип мережі: DHCP static hosts
Мережа/CIDR: 10.10.200.0/24
4. Додати обробник DHCP для підмережі модемів, використовуючи такий "персональний шаблон":
subnet 10.10.100.0 netmask 255.255.255.0 {
 default-lease-time 3600;
 option subnet-mask 255.255.255.0;
 option routers 10.10.100.1;
 server-name "10.10.10.10";
 option tftp-server-name "10.10.10.10";
 option bootfile-name "modems.b";
 next-server 10.10.10.10;
 filename "modems.b";
 option time-servers 10.10.10.10;
 option time-offset 2;
include "/usr/local/etc/multinet/{HOSTS}";
}
5. додати обробник DHCP для підмережі DOCSIS користувачів\\
6. переконатися в тому, що підмережі користувачів і модемів доступні за відповідними маршрутами через нашу CMTS
# route add 10.10.100.0/24 10.10.10.9
# route add 10.10.200.0/24 10.10.10.9
ну і додати ці маршрути на майбутнє у rc.conf
static_routes="cable modems"
route_cable="10.10.200.0/24 10.10.10.9"
route_modems="10.10.100.0/24 10.10.10.9"
====== Реєстрація модемів і контроль рівнів сигналу  ======
Під час додавання модему слід вказати тільки його MAC-адресу, за якою надалі видаватиметься IP. Усе. Більше нічого.\\
Під час реєстрації модему йому буде видано першу-ліпшу вільну IP з підмережі з ID, зазначеним в опції DOCSIS_MODEM_NETID.
{{ :docsismodemadd.png?|}}
Також можлива вказівка SNMP ком'юніті та шляху до встановленого snmpwalk. 
{{ :docsissnmp.png?|}}
Це потрібно для оперативного зняття статистики про стан модему, рівні сигналу в прямому і зворотному каналах, модуляцію та інші важливі параметри. 
{{ :docsisstats.png? |}}