Зміст

Налаштування доступу користувачів за технологією DOCSIS

Починаючи з релізу 0.3.8 повністю ліквідовано стару модель роботи з DOCSIS і замість неї реалізовано максимально просту, без перезбірки конфігів модемів на льоту, під кожного користувача. Для того, щоб мати приблизне розуміння того, як це все працює - рекомендуємо ознайомитися з наступною статтям. У стислості схема наступна: “користувач” → “модем” → “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 генерує биті файли і може не зібратися з портів. У такому разі доведеться вдатися до ручного збирання. Забираємо останню версію з сайту розробників, і збираємо ручками:

# tar zxvf docsis-0.9.6.tar.gz
# cd docsis-0.9.6
# ./configure && make && make install

Після чого ми можемо спробувати зібрати найпростіший тестовий конфіг такого змісту з ключем “docsis123” (він же має бути сконфігурований на CMTS). Конфіг (/root/modems.s ) у нас матиме такий вигляд:

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.

Також можлива вказівка SNMP ком'юніті та шляху до встановленого snmpwalk. Це потрібно для оперативного зняття статистики про стан модему, рівні сигналу в прямому і зворотному каналах, модуляцію та інші важливі параметри.