[Из песочницы] Использование Cisco 800 серии (на примере Cisco 857) в качестве маршрутизатора для дома

habr.png

Всем привет. Некоторое время назад я мучился с подключенем домашней сети к интернету и решил свой вопрос довольно сложным, но надежным образом. Пока информация не сильно устарела, считаю, что целесообразное ею поделиться, т.к. я потратил много времени на поиск и анализ данных по всему интернету, чтобы достичь цели.

Проблема была такова. Провайдер предоставляет PPPoE-подключение, я купил белый IP, активно использую интернет в том числе для поднятия своих сервисов под так называемые «pet projects». Первый мой маршрутизатор Zyxel работал несколько лет и приказал долго жить. Купленный взамен аналогичный умер быстрее. Затем я пробвал другие разные китайские поделки из ближайшего магазина, последним стал TP-Link TD-W8151N. Он работал неплохо до тех пор, пока не начиналась приличная входящая активность через NAT, после чего он постепенно вешался и переставал отвечать на запросы. Мне это надоело, и я купил через eBay списанный где-то в Америке маршрутизатор Cisco 857.
Смысл использования Cisco 800 в том, что это все-таки полупромышленное оборудование, оно вполне надежно и имеет большой ресурс. Так оно и получилось. Устройство заработало и за 3 года не показало ни единой проблемы, оно просто работало и не требовало никакого вмешательства.

Характеристики Cisco 857 такие:

  • 1 порт POTS (ADSL)
  • 4 порта Ethernet 100 Mbps FD
  • Wi-Fi 2.4 GHz 802.11g
  • COM-порт для консоли
  • Нормальная поддержка Telnet, SNMP и т.д.
  • Приличный корпус, внешний блок питания и надежда на долгую жизнь без сбоев


Конкретно мой маршрутизатор предназначен для линий ADSL, которые все еще живут в России, но, полагаю, будет актуально и для Ethernet, там даже проще (не надо поднимать ATM-интерфейс). Есть также версия без Wi-Fi. Современные модификации 800й серии поддерживают сети 802.11 более новые, чем убогий 802.11g, хотя мне хватало и его.

Ниже приведен протокол настройки с пояснениями. Вообще, устройство Cisco это своеобразная вещь, и теперь не так популярная, как когда-то. Настройка может вызвать замешательство у неподготовленного пользователя. Мне повезло, в юности удалось 3 месяца поадминить сеть доступа мобильного оператора, поэтому пару комиксов про сиськи я все же изучил и кое-что запомнил.

Об обновлении прошивки

Текущая версия IOS для Cisco 800 серии на момент составления мануала — 12.4. Крайне рекомендуется перепрошить с более старой, так как некоторые вещи могут не поддерживаться или работать неправильно. Процесс перепрошивки описан в мануале на роутер, в процессе потребуется TFTP-сервер в локальной сети и настроенный LAN-интерфейс.


Прежде всего надо подключиться к маршрутизатору. Он должен быть сброшен [продавцом] на дефолтные настройки и не иметь пароля. Подключаемся через консоль при помощи COM-порта через прилагаемый кабель: 9600 бод, 8 бит данных, 1 стоп бит, без проверки четности.

При заводской настройке устройсто именовано как Router, что видно в командной строке:

Router>


Переходим в привилегированный режим командой enable:

Router>enable


Приглашение изменится на

Router#


Удаляем имеющуюся конфигурацию, находящуюся во флэш-памяти:

Router#erase startup-config


Перезагружаем маршрутизатор:

Router#reload


Ждем пока роутер перезагрузится, наблюдая за процессом загрузки в окне консоли.

Отказываемся от предложения произвести первоначальную настройку:

Would you like to enter the initial configuration dialog? [yes/no]: no


Переходим в привилегированный режим.

Router>enable


Можно посмотреть версию:

Router#show version


Можно посмотреть текущую конфигурацию:

Router#show run


Заходим в режим конфигурирования:

Router#configure terminal


Даем свое имя роутеру:

Router(config)#hostname 


Устанавливаем шифрование паролей:

my_hostname(config)#service password-encryption


Задаем пароль на вход в привилигированный режим (без этого не будет работать конфигурирование через терминал):

my_hostname(config)#enable secret 


Создаем админа (не особо нужен, но пусть будет для порядка):

my_hostname(config)#username admin privilege 15 password 0 


Разрешаем доступ через telnet.

Сначала создадим список доступа (назовем его terminal), который разрешит доступ только из локальной сети:

my_hostname(config)#ip access-list standard terminal
my_hostname(config-std-nacl)#permit 192.168.0.0 0.0.0.255
my_hostname(config-std-nacl)#exit


Теперь смотрим, сколько есть линий терминала:

my_hostname(config)#line vty ?


Cколько он там сказал доступно? 0–4? значит

my_hostname(config)#line vty 0 4
my_hostname(config)#access-class terminal in
my_hostname(config-line)#password 
my_hostname(config-line)#login
my_hostname(config-line)#exit


Также за ненадобностью отключаем возможность управления роутером через SDM, а так же протокол CDP:

my_hostname(config)#no ip http server
my_hostname(config)#no ip http secure-server
my_hostname(config)#no cdp run


Включаем Eth0 порт:

my_hostname(config)#interface fastethernet 0
my_hostname(config-if)#no shutdown
my_hostname(config-if)#exit


Eth0 это не полноценный интерфейс, это лишь коммутатор, который висит на vlan 1, зайдем в него:

my_hostname(config)#interface vlan 1


Задаем ему описание:

my_hostname(config-if)#description LAN


Теперь можно просто задать ему адрес и включить (попутно подняв NAT), например так:

my_hostname(config-if)#ip address 192.168.0.1 255.255.255.0
my_hostname(config-if)#ip nat inside
my_hostname(config-if)#no shutdown


Но это не даст возможности работать с сетью через Wi-Fi.

Поэтому, если требуется Wi-Fi, так делать не будем — вместо этого требуется делать мост, поместив в него свой vlan.

Продолжаем настраивать vlan:

my_hostname(config-if)#no ip address
my_hostname(config-if)#ip virtual-reassembly


Сконструируем мост (нумерация начинается с 1, как и в случае с vlan)

my_hostname(config-if)#bridge-group 1
my_hostname(config-if)#bridge-group 1 spanning-disabled


Настроим мост, в частности, сразу укажем, что нужен NAT:

my_hostname(config-if)#interface BVI1
my_hostname(config-if)#ip address 192.168.0.1 255.255.255.0
my_hostname(config-if)#ip nat inside
my_hostname(config-if)#ip virtual-reassembly


Завершаем настройку LAN-интерфейса:

my_hostname(config-if)#exit


Сохраняем сделанные настройки и перезагружаем:

my_hostname#write
my_hostname#reload


Теперь консоль можно отсоединить. Роутер доступен через telnet (21й порт) по указанному IP из локальной сети, воткнутой в Eth0 порт. Этот же адрес будет адресом шлюза по умолчанию в локальной сети. Теперь переходим к настройке подключения к провайдеру. Подключаемся через терминал по LAN, вводим пароль , переходим в режим конфигурирования.

my_hostname>enable
my_hostname#configure terminal

Смотрим на ATM-интерфейс:
my_hostname(config)#interface atm 0


Задаем ему описание:

my_hostname(config-if)#description ADSL line


Задаем параметры работы:

my_hostname(config-if)#no ip address


Нужно узнать у провайдера значения VPI/VCI и указать их:

my_hostname(config-if)#pvc 0/35


Если нужно, указываем инкапсуляцию (обычно подходит по-умолчанию, уточнить у провайдера), например:

my_hostname(config-if-atm-vc)#encapsulation aal5snap


Указываем, что выбранный pvc будет использоваться для PPPoE-соединения:

my_hostname(config-if-atm-vc)#pppoe-client dial-pool-number 1


Завершаем настройку выбранной линии ATM:

my_hostname(config-if-atm-vc)#exit


Так как необходимо поднять PPPoE-клиент, то настраивается интерфейс dialer (нумерация с 0), на котором будет интернет:

my_hostname(config-if)#interface dialer 0
my_hostname(config-if)#description Internet


IP-адрес выберем автоматический, включим NAT:

my_hostname(config-if)#ip address negotiated
my_hostname(config-if)#ip nat outside


Надо внимательно задать размер пакетов, это важно (иначе нас ждут тормоза и глюки):

my_hostname(config-if)#ip mtu 1492
my_hostname(config-if)#ip tcp adjust-mss 1452


Указываем протокол PPP и помещаем в пул дозвонщика:

my_hostname(config-if)#encapsulation ppp
my_hostname(config-if)#dialer pool 1


Задаем ему режим аутентификации и учетные данные (все это нужно узнать у провайдера):

my_hostname(config-if)#ppp authentication pap callin
my_hostname(config-if)#ppp pap sent-username  password 


Включаем интернет:

my_hostname(config-if)#interface atm 0
my_hostname(config-if)#no shutdown


Через некоторое время должны загореться индикаторы DSL-линии и чуть позже него индикатор PPP.

Завершаем настройку внешнего интерфейса:

my_hostname(config-if)#exit


Не забыть указать маршрут по-умолчанию на интерфейс dialer 0:

my_hostname(config)#ip route 0.0.0.0 0.0.0.0 dialer 0


Теперь настроим NAT, прежде всего создадим список доступа к интернету (назовем его internet):

my_hostname(config)#ip access-list standard internet
my_hostname(config-std-nacl)#permit 192.168.0.0 0.0.0.255
my_hostname(config-std-nacl)#exit


Натравливаем NAT на интерфейс dialer 0 (LAN ранее пометили как inside, а Internet как outside):

my_hostname(config)#ip nat inside source list internet interface dialer 0 overload


Интернет из LAN теперь должен работать.
Если нужно пробросить порт из Internet в LAN, то это делается примерно так:

my_hostname(config)#ip nat inside source static tcp 192.168.0.2 80 interface dialer 0 80


Переходим к Wi-Fi.

Нужно включить его и создать подинтерфейс (без этого не получится), который поместить в настроенный ранее vlan с мостом:

my_hostname(config)#interface dot11radio 0
my_hostname(config-if)#description WLAN


Параметры шифрования соединения (надо отметить, что железяка довольно старая и новые методы не поддерживает):

my_hostname(config-if)#encryption vlan 1 mode ciphers tkip


Задаем свой SSID и ключ доступа:

my_hostname(config-if)#ssid 
my_hostname(config-if-ssid)#authentication open
my_hostname(config-if-ssid)#authentication key-management wpa
my_hostname(config-if-ssid)#guest-mode
my_hostname(config-if-ssid)#wpa-psk ascii 0 
my_hostname(config-if-ssid)#exit


Включаем Wi-Fi и создаем подинтерфейс, который войдет в мост:

my_hostname(config-if)#no shutdown
my_hostname(config-if)#interface dot11radio 0.1
my_hostname(config-subif)#encapsulation dot1q 1 native
my_hostname(config-subif)#no cdp enable
my_hostname(config-subif)#bridge-group 1
my_hostname(config-subif)#exit
my_hostname(config-if)#exit


На этом этапе должен подняться WLAN-интерфейс, доступ через него будет аналогичен доступу через LAN.
Если нужно, настраиваем DHCP (иногда полезно, если нет выделенного сервера).

Для начала (если нужно) исключаем адреса, зарезервированные для других целей.

Например, для получения адресов динамически из диапазона [192.168.0.129 — 192.168.0.192] будет так:

my_hostname(config)ip dhcp excluded-address 192.168.0.1 192.168.0.128
my_hostname(config)ip dhcp excluded-address 192.168.0.193 192.168.0.254


Далее создаем пул DHCP:

my_hostname(config)ip dhcp pool dhcp
my_hostname(dhcp-config)#import all
my_hostname(dhcp-config)#network 192.168.0.0 255.255.255.0
my_hostname(dhcp-config)#default-router 192.168.0.1
my_hostname(dhcp-config)#dns-server 
my_hostname(dhcp-config)#lease infinite
my_hostname(dhcp-config)#exit


Можно еще включить SNMP для сбора диагностических данных с устройства.

Прежде всего, как обычно, нужен список доступа:

my_hostname(config)#ip access-list standard snmp-public
my_hostname(config-std-nacl)#permit 192.168.0.0 0.0.0.255
my_hostname(config-std-nacl)#exit


Собственно настройка самого SNMP:

my_hostname(config)#snmp-server community public RO snmp-public


Полезно задать какой-нибудь сервер времени, чтобы часы на роутере шли правильно:

my_hostname(config)#sntp server 78.140.251.2


Наконец, зададим DNS-сервер, чтобы с роутера можно было делать ping по имени, а не только по IP:

my_hostname(config)#ip name-server 77.88.8.1


Выходим из режима конфигурирования, cохраняем настройки, перезагружаем:

my_hostname(config)#exit
my_hostname#write
my_hostname#reload


Для сбора данных через SNMP есть следующие метрики:

  • 1.3.6.1.4.1.9.2.1.56.0 (CPU Load)
  • 1.3.6.1.2.1.2.2.1.10.18 (PPP InOctets)
  • 1.3.6.1.2.1.2.2.1.16.18 (PPP OutOctets)


Для визуализации я обычно использую программу snmpmon.exe.

© Habrahabr.ru