Настройка роутеров
В целом, в настройках роутеров ничего сложно нет, вот основные моменты:
Каждому роутеру был задан Loopback адрес с маской /32, каждый октет адреса равен номеру роутера, сделано это было просто для удобства, например, для R3 это 3.3.3.3/32.
На интерфейсах роутеров были назначены р2р сети, принцип назначения объяснялся в посте про TTL.
Маршрутизация использовалась динамическая, протокол OSPF.
Петля делалась за счет статического маршрута на R4.
Но, наверное, мне нужно было бы начать с напоминания топологии:
Топология сети, которую будем настраивать
IP настройки на интерфейсах
Вот так настраиваются Loopback интерфейсы на роутерах (на примере R5, фактически для этой лабы Lo адреса и не нужны):
R5#conf t
R5(config)#interface lo0
R5(config-if)#description system
R5(config-if)#ip address 5.5.5.5 255.255.255.255
На других роутерах меняется только IP-адрес. IP настройки на интерфейсах роутеров Cisco подробно рассматривались здесь. Но, если что, вот пример настроек на физических интерфейсах R5:
interface FastEthernet0/0
description to_Host_2
ip address 192.168.2.17 255.255.255.0
speed auto
full-duplex
interface FastEthernet0/1
description to_R4
ip address 10.4.5.5 255.255.255.0
speed auto
full-duplex
Настройки OSPF
Детально про настройку OSPF говорить не буду. Но его конфиг я покажу, вот так он выглядит на R5:
R5#conf t
R5(config)#router ospf 100
R5(config-router)#network 5.5.5.5 0.0.0.0 area 0
R5(config-router)#network 10.0.0.0 0.255.255.255 area 0
R5(config-router)#network 192.168.2.0 0.0.0.255 area 0
На R1 строку network 192.168.2.0 0.0.0.255 area 0 нужно будет заменить на network 192.168.1.0 0.0.0.255 area 0. На других роутерах третья команда network не нужна.
Краткое пояснение по командам OSPF
Командной router ospf 100 мы запускаем процесс OSPF на роутере и даем ему номер 100, как понимаете, на роутере может работать несколько разных процессов OSPF, при этом на двух соседних роутерах номера их OSPF процессов могут не совпадать, но обычно их делают одинаковыми для удобства.
Команда network довольно интересная, первое число, похожее на IP-адрес, это номер сети, второе число, похожее на маску сети, на самом деле wildcard mask, на русский язык ее переводят как обратная маска или инверсная маска, но сути ее работы это название не отражает. Когда-нибудь я про не напишу, сейчас отправлю в Яндекс или Гугл.
Можно сказать, что команда network это правило для маршрутизатора, роутер перебирает свои IP-интерфейсы и проверяет: попадают ли они под правило, заданные командой network или нет. Если интерфейс попадает под правило, то на нем включается OSPF процесс, интерфейс включается в регион, который указан после ключевого слова area, а информация о сети, которая настроена на этом интерфейсе, будет рассказана другим маршрутизаторам, с которыми установлено OSPF соседство.
Примечание:
Такая конфигурация OSPF подходит для лабы, но не подходит для реальных сетей. Как минимум, потому, что считается небезопасной, дело в том, что командой network 192.168.2.0 0.0.0.255 area 0 мы включаем OSPF на интерфейсе fa0/0, и роутер будет пытаться найти OSPF соседей за портом fa0/0. Fa0/0 это порт в сторону клиента, за которым на самом деле может оказаться злоумышленник.
Выход из такой ситуации у Cisco называется passive-interface, у Huawei такая же фича называется silent-interface. Вообще, хорошим тоном с точки зрения безопасности сети, является включение OSPF руками на тех сетевых линках, где он вам действительно нужен, а сети с клиентских интерфейсов, если это действительно требуется, вкидывать процессу OSPF через механизм редистрибьюции маршрутов.
Под правило network 5.5.5.5 0.0.0.0 area 0 попадает интерфейс Lo0, на нем включается OSPF процесс, сам интерфейс включается в нулевой регион, его адрес относится к сети 5.5.5.5/32, R5 начинает рассказывать всем своим OSPF соседям о том, что у него есть такая сеть.
Посмотреть OSPF интерфейсы на роутере можно так:
R5#show ip ospf int br
Interface PID Area IP Address/Mask Cost State Nbrs F/C
Fa0/0 100 0 192.168.2.17/24 10 DR 0/0
Fa0/1 100 0 10.4.5.5/24 10 DR 1/1
Lo0 100 0 5.5.5.5/32 1 LOOP 0/0
Если нужна какая-то более детальная информация по интерфейсу:
R5#show ip ospf int fa0/1
FastEthernet0/1 is up, line protocol is up
Internet Address 10.4.5.5/24, Area 0
Process ID 100, Router ID 5.5.5.5, Network Type BROADCAST, Cost: 10
Transmit Delay is 1 sec, State DR, Priority 1
Designated Router (ID) 5.5.5.5, Interface address 10.4.5.5
Backup Designated router (ID) 4.4.4.4, Interface address 10.4.5.4
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
oob-resync timeout 40
Hello due in 00:00:01
Supports Link-local Signaling (LLS)
Cisco NSF helper support enabled
IETF NSF helper support enabled
Index 2/2, flood queue length 0
Next 0x0(0)/0x0(0)
Last flood scan length is 1, maximum is 2
Last flood scan time is 0 msec, maximum is 0 msec
Neighbor Count is 1, Adjacent neighbor count is 1
Adjacent with neighbor 4.4.4.4 (Backup Designated Router)
Suppress hello for 0 neighbor(s)
Для создания петли маршрутизации на роутере R4 прописывался вот такой статический маршрут:
R4#sh run | in ip ro
ip route 192.168.2.12 255.255.255.255 10.3.4.3
R4#
На статиках сейчас останавливаться не буду, скоро будет отдельный пост.
Настройка и подготовка хостов
Теперь о подготовке и настройке хостов. Я не сисадмин Linux, поэтому, возможно, действия, описанные ниже, можно сделать более оптимально и просто, но тут уж как смог.
Для начала разберемся, где взять образы дистрибутивов Linux для EVE-NG, во-первых, на официальном сайте, там же есть гайд: текст + видео. На Ютуб канале, который был обозначен в начале поста есть видео о том, как подготовить свой дистрибутив для эмуляции в EVE-NG.
Настройки EVE-NG для хостов
Теперь о некоторых настройках в EVE-NG, которые я использовал для хостов. При первом запуске образа Linux в EVE-NG для подключения к хосту придется использовать VNC. Мне через VNC с отдельными окнами для каждого хоста работать было неудобно, поэтому я решил проблему так: на эмулируемом образе создал два порта, один из которых был подключен в лабу, второй был подключен в мою домашнюю сеть. На порт, который смотрит в домашнюю сеть, IP-адрес прилетает по DHCP от домашнего роутера, по этому адресу я и подключался к машине в дальнейшем.
Вот первичные настройки виртуальной машины в EVE:
Первичные настройки в EVE-NG для хостов
Чтобы эмулируемые в лабе устройства могли получать адреса от физического роутера, в сетевых настройках VMWare для виртуалки EVE-NG должен быть включен bridge. Настройка производится вот здесь, вот так:
Нужно поставить чекрыжик на Bridged... и галку на Replicate physical...
На топологию лабы нужно добавить интерфейс/устройство, через которое виртуальные хосты, могли бы подключаться к реальной физической сети, надо сделать так: по рабочей области жмем ПКМ, в меню выбираем Network, в появившемся окне в списке Type выбираем как на скрине ниже.
Добавляем устройство для организации связности между виртуальной сетью и физической
Образ Linux одним линком нужно будет подключить к появившемуся облаку, это облако свяжет его с физической сетью.
На официальном сайте EVE образ Debian идут с графическим интерфейсом, но все примеры настроек сделаны в эмуляторе терминала, во-первых, это быстрее, во-вторых, я не знаю как делать сетевые настройки в Linux через графику.
Если вы скачали образ Debian с официального сайта EVE (а я так и сделал), то там уже будет создан пользователь с логином user и паролем Test123.
Настройка sudo на хостах
Мне удобнее работать через sudo, в Debian sudo нужно включить, вот перечень команд для этого:
su
#ввести пароль Test123
apt install sudo
exit
Установка sudo в Debian 10
Для пользователя с логином user правка файла /etc/sudoers не требуется, но если хотите создать нового пользователя и работать из-под него, то не забудьте отредактировать файл sudoers, добавив запись аналогичную той, что сделана для user.
Сетевые настройки хостов
Теперь к сетевым настройкам на хостах. Командой ip a смотрим сетевые интерфейсы, которые сейчас есть.
Интерфейс ens3 соответствует интерфейсу e0 на топологии EVE-NG, интерфейс ens4 это e1, этот мануал я пишу уже после того, как собрал изначальную схему и записал видео, т.е. ниже буду рассказать как добавить третий образ на схему (для исходных двух хостов отличаться будут только настраиваемые IP-адреса и прописываемые статики), физически я его подключил так:
Настраиваем узел с именем Linux
Перед тем как продолжать докладываю, этих ваших команд в Linux вагон и маленькая тележка, список команд можно увеличивать за счет установки новых программ и утилит, но базовые команды по работе с сетью и интерфейсами можно найти в этой шпаргалке на сайте Red Hat.
Я хочу чтобы на ens3 мне приходили настройки из моей реальной сети по DHCP, давайте это организуем, пишем команду:
sudo nano /etc/network/interfaces
В данном файле можно делать различные сетевые настройки, VIM не использую, потому что не хочу писать гайд о том, как из него выйти. В этом файле пишем настройки для интерфейса ens3, пишем их так:
# to_local_network
allow-hotplug ens3
iface ens3 inet dhcp
Строка с решеткой это просто комментарий, вторая строка говорит том, что ens3 надо включать сразу как включится образ, третья строка заставляет машину начинать слать DHCP запросы через ens3, чтобы получить свои сетевые настройки. В файле это выглядит так:
Настройка получения IP-адресов по DHCP в Debian 10
Далее нажимаем Ctrl+O чтобы сохранить, Ctrl+X закрыть файл. Если вы после редактирования напишите ip a, то увидите, что сетевые настройки на ens3 по DHCP не прилетают, на самом деле они и не запрашиваются, значит нужно передернуть, передергивать интерфейс будем такой командой:
Смотрим настройки сетевых интерфейсов после передергивания
После этого мы видим, что адрес был выдан и это 192.168.0.130. Всё, по этому адресу мы можем подключаться при помощи SSH клиента, который установлен на основной операционной системе, плюс образ Linux теперь имеет доступ к интернету.
Настройки SSH на клиенте, через который мы будем подключаться к Debian, стандартные, в SecureCRT они находятся здесь:
Для того чтобы была возможность подключаться по SSH на виртуальной машине должен быть запущен SSH сервер, который должен слушать 22 порт на предмет входящих подключений, сам порт должен быть открыть, включен ли сервер и какой порт он слушает можно проверить так:
user@debian:~$ sudo systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Sat ... CDT; 39min ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 471 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 491 (sshd)
Tasks: 1 (limit: 4689)
Memory: 5.7M
CGroup: /system.slice/ssh.service
└─491 /usr/sbin/sshd -D
debian systemd[1]: Starting OpenBSD Secure Shell server...
debian sshd[491]: Server listening on 0.0.0.0 port 22.
debian sshd[491]: Server listening on :: port 22.
Строка Active: active (running) означаете, что сервер включен, по портам, полагаю, не нужно пояснять. Посмотреть открытые tcp/udp порты можно еще и так:
ss -lnput #UDP+TCP
ss -lu #только UDP
ss -tl #только TCP
Если не установлен ssh сервер его надо установить, в Debian и ему подобных дистрибутивах это делается так:
sudo apt update
sudo apt install openssh-server
Если 22 порт закрыт, его надо открыть, вариантов почему порт закрыт, может быть много, например, у вас установлен фаервол ufw и он не разрешает подключение к 22 порту, открыть порт можно будет так:
С вопросом подключения по SSH мы разобрались, нам надо теперь разобраться с интеграцией образа Linux в лабу, для этого на ens4 нужно назначить IP-адрес:
sudo nano /etc/network/interfaces
# to_lan_network
allow-hotplug ens4
iface ens4 inet static
address 192.168.3.25/24
# gateway 192.168.3.1
up ip route add 192.168.1.0/24 via 192.168.3.1 #первый статик
up ip route add 192.168.2.0/24 via 192.168.3.1 #второй статик
up ip route add 10.0.0.0/8 via 192.168.3.1 #третий статик
Строка iface ens3 inet static говорит о том, что адрес на интерфейс надо назначить руками, строка address 192.168.3.25/24 сообщает операционной системе какой IP-адрес и маску мы хотим использовать на этом интерфейсе. Строка # gateway 192.168.3.1 закомментирована, если убрать решетку, то машина будет считать, что за портом ens4 находится шлюз по умолчанию. Эту строку я закомментировал, потому что мой домашний роутер по DHCP сообщил, что именно он является шлюзом по умолчанию для данного хоста(а через домашний роутер осуществляется выход в интернет, а обычным домашним компьютерам и роутерам живется проще, когда они дорогу в интрнет знают не как full view, а как маршрут по умолчанию).
В связи с тем, что домашний роутер является шлюзом по умолчанию, но третий хост все-таки должен знать как добраться до других устройств лабы, пришлось писать и три статических маршрута: первый нужен чтобы был доступен узел Host_1, второй нужен чтобы был доступен Host_2, третий нужен чтобы были доступны p2p сети, настроенные между роутерами между роутерами. Если нужно чтобы были доступны Loopback интерфейсы роутеров, статики до них нужно тоже прописать.
Посмотрим применились ли настройки на ens4:
user@debian:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:00:00:08:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.130/24 brd 192.168.0.255 scope global dynamic ens3
valid_lft 4963sec preferred_lft 4963sec
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:00:00:08:01 brd ff:ff:ff:ff:ff:ff
inet6 fe80::250:ff:fe00:801/64 scope link noprefixroute
valid_lft forever preferred_lft forever
user@debian:~$
Наших настроек на ens4 не видим, статических маршрутов, которые мы добавили, тоже не увидим:
user@debian:~$ ip route show
default via 192.168.0.1 dev ens3
192.168.0.0/24 dev ens3 proto kernel scope link src 192.168.0.130
user@debian:~$
Надо передернуть, скажете вы:
user@debian:~$ sudo ifup ens4
user@debian:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:00:00:08:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.130/24 brd 192.168.0.255 scope global dynamic ens3
valid_lft 4476sec preferred_lft 4476sec
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:00:00:08:01 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.25/24 brd 192.168.3.255 scope global ens4
valid_lft forever preferred_lft forever
user@debian:~$
И будете правы, получилось! Сразу после этого в таблице маршрутизации должны будут появиться маршруты, которые мы задавали статикой:
user@debian:~$ ip route show
default via 192.168.0.1 dev ens3
10.0.0.0/8 via 192.168.3.1 dev ens4
192.168.0.0/24 dev ens3 proto kernel scope link src 192.168.0.130
192.168.1.0/24 via 192.168.3.1 dev ens4
192.168.2.0/24 via 192.168.3.1 dev ens4
192.168.3.0/24 dev ens4 proto kernel scope link src 192.168.3.25
user@debian:~$
Если не появились, надо будет напечатать в эмуляторе терминала три команды из файла interfaces, но уже без ключевого слова up, вот так:
ip route add 192.168.1.0/24 via 192.168.3.1
ip route add 192.168.2.0/24 via 192.168.3.1
ip route add 10.0.0.0/8 via 192.168.3.1
Чтобы новый хост получил связность с другими узлами сети, нужно не забыть выполнить настройки на R3(донастроить OSPF + настроить интерфейс в сторону хоста), показывать я это уже не буду.
Для просмотра базовой информации о сетевых и канальных параметрах есть четыре команды:
ПОСМОТРЕТЬ СЕТЕВЫЕ НАСТРОЙКИ:
user@debian:~$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:00:00:08:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.130/24 brd 192.168.0.255 scope global dynamic ens3
valid_lft 4166sec preferred_lft 4166sec
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:00:00:08:01 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.25/24 brd 192.168.3.255 scope global ens4
valid_lft forever preferred_lft forever
ПОСМОТРЕТЬ КАНАЛЬНЫЕ ПАРАМЕТРЫ:
user@debian:~$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:50:00:00:08:00 brd ff:ff:ff:ff:ff:ff
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:50:00:00:08:01 brd ff:ff:ff:ff:ff:ff
user@debian:~$ ip neigh show
192.168.0.101 dev ens3 lladdr 8c:55:4a:a9:b9:dd REACHABLE
192.168.0.1 dev ens3 lladdr b#:#0:24:#0:#f:#0 STALE
user@debian:~$ ip route show
default via 192.168.0.1 dev ens3
10.0.0.0/8 via 192.168.3.1 dev ens4
192.168.0.0/24 dev ens3 proto kernel scope link src 192.168.0.130
192.168.1.0/24 via 192.168.3.1 dev ens4
192.168.2.0/24 via 192.168.3.1 dev ens4
192.168.3.0/24 dev ens4 proto kernel scope link src 192.168.3.25
user@debian:~$
Давайте проверим доступность R3:
user@debian:~$ ping 192.168.3.1
PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.
64 bytes from 192.168.3.1: icmp_seq=1 ttl=255 time=9.88 ms
64 bytes from 192.168.3.1: icmp_seq=2 ttl=255 time=11.1 ms
64 bytes from 192.168.3.1: icmp_seq=3 ttl=255 time=2.07 ms
^C
--- 192.168.3.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 2.074/7.673/11.067/3.988 ms
user@debian:~$
Успех, а теперь попингуем Host_1 и Host_2:
PING 192.168.1.15 (192.168.1.15) 56(84) bytes of data.
^C
--- 192.168.1.15 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 75ms
user@debian:~$
user@debian:~$ ping 192.168.2.12
PING 192.168.2.12 (192.168.2.12) 56(84) bytes of data.
^C
--- 192.168.2.12 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 68ms
user@debian:~$
А вот хосты не доступны. Вопрос: почему? На роутерах настройки корректные. Что надо сделать, чтобы эти узлы стали доступны?
Напоследок дам еще некотрые пояснения. Сетевые настройки мы выполняли в файле /etc/network/interfaces для того, чтобы после перезагрузки виртуальной машины они сохранились. Но адреса можно настраивать временно без сохранения в настроек в файл.
В примере ниже адрес 192.168.3.44/24 добавляется на интерфейс ens4 как secondary, поскольку основной адрес у нас уже задан, а add означает добавить. Вторичный адрес будет активен до перезагрузки.
user@debian:~$ sudo ip address add 192.168.3.44/24 dev ens4
user@debian:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:00:00:08:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.130/24 brd 192.168.0.255 scope global dynamic ens3
valid_lft 6906sec preferred_lft 6906sec
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:00:00:08:01 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.25/24 brd 192.168.3.255 scope global ens4
valid_lft forever preferred_lft forever
inet 192.168.3.44/24 scope global secondary ens4
valid_lft forever preferred_lft forever
user@debian:~$
На этом, собственно, всё. Видео к данном посту нет и не планировалось.