Привет, меня зовут Никита Рукавков и я автор канала DevOps Brain. В первой части мы разобрались как заставить работать GNS3 под MacOS.
Ну а в этой мы пройдем путь от создания простейшей сети до построения сегментированной инфраструктуры с политиками безопасности. Вы освоите не только базу, но и будете понимать логику построения безопасных и масштабируемых сетевых решений.
На кого расчитан данный материал:
Студентов IT-специальностей, которые прошли теорию сетей, но не работали с реальным оборудованием.
Начинающих администраторов и энтузиастов, которые хотят начать практиковаться в настройке сетей в безопасной виртуальной среде.
Специалистов смежных областей (сисадмины, DevOps), которым необходимо базовое понимание сетевой инфраструктуры и навыки конфигурирования.
Подготовленных новичков, которые уже знакомы с понятиями IP-адресации, подсетей и маршрутизации, но не знают, как применить эти знания на практике.
Будущих сетевых инженеров, делающих первые шаги в профессии и ищущих структурированное практическое руководство.
Что вы изучите:
Работу с GNS3 для моделирования сетей.
Настройку MikroTik RouterOS через консоль (CLI).
Конфигурацию статических и динамических IP-адресов.
Настройку DHCP-серверов с разными пулами адресов.
Реализацию NAT для доступа в интернет.
Создание и применение Firewall правил.
Использование адресных списков для упрощения управления.
Сегментацию сети и реализацию политик безопасности.
Мы начнем с простой схемы из одного роутера и постепенно будем ее усложнять, добавляя новые функции и компоненты. Каждый шаг будет сопровождаться подробными объяснениями, скриншотами и готовыми командами для копирования. Давайте начнем!
Создаем простейшую сеть
Давайте реализуем самую простейшую сеть, которую можно только представить: один роутер, пара свитчей и несколько клиентов. Это будут разные подсетки, связанные между собой.

Первая проблема с который вы можете столкнуться - ограниченный список устройств, который можно добавить на схему.
Для того чтобы у нас они появились их надо создать. Нажимаем New Template и там выбираем Install and appliance from GNS3 Server. Далее выбираем для нашего примера Mikrotik RB450G. В GNS3 мы используем виртуальный образ MikroTik CHR, который полностью повторяет функциональность RouterOS и идеально подходит для обучения.

Жмем кнопку Install и выбираем Install the appliance on the main server. После чего нужно будет выбрать прошивку и скачать ее образ. Перед импортом обязательно распакуйте скаченный образ.

После успешного импорта в списке устройств появится ваш Mikrotik.

Осталось перенести всё что мы хотели на нашу схему: у нас будет 2 изолированные подсети (192.168.10.0/24, 192.168.20.0/24). В каждом из сетей будет неуправляемый коммутатор и пара VPCS (это очень простой виртуальный ПК в GNS3).
Мы хотим добиться связности между нашими сетями. Но для начала давайте составим списки IP адресов, а уже потом будем конфигурировать устройства и ставить эксперименты. Итак, мы имеем:
device | ip | gw |
|---|---|---|
PC1 | 192.168.10.2 | 192.168.10.1 |
PC2 | 192.168.10.3 | 192.168.10.1 |
PC3 | 192.168.20.2 | 192.168.20.1 |
PC4 | 192.168.20.3 | 192.168.20.1 |
Router1 (Mikrotik) | 192.168.10.1 (ether2), 192.168.20.1 (ether3) |
Поскольку в дальнейшем я планирую эту схему расширять, то ether1 оставим зарезервированным под интернет.
Реализуйте схему как на скриншоте ниже - все элементы которые нужны для реализации, включая L2-соединения отмечены стрелочками. В конце не забудьте запустить свой проект и вы должны увидеть что всё стало зеленое.

Давайте подключимся к консоли Mikrotik и настроим его ( по-умолчанию логин admin и пустой пароль). Для этого можно кликнуть ПКМ на роутере и выбрать Console.
# Прописываем на интерфейсы IP адреса [admin@MikroTik] > /ip address add address=192.168.10.1/24 interface=ether2 [admin@MikroTik] > /ip address add address=192.168.20.1/24 interface=ether3 # Проверяем что в��е ОК или НЕ ОК. [admin@MikroTik] > /interface ethernet print Flags: R - RUNNING Columns: NAME, MTU, MAC-ADDRESS, ARP # NAME MTU MAC-ADDRESS ARP 0 ether1 1500 0C:15:54:66:00:00 enabled 1 R ether2 1500 0C:15:54:66:00:01 enabled 2 R ether3 1500 0C:15:54:66:00:02 enabled 3 ether4 1500 0C:15:54:66:00:03 enabled 4 ether5 1500 0C:15:54:66:00:04 enabled # Смотрим линк ( в рамках обучения ) [admin@MikroTik] > /interface ethernet monitor ether2,ether3 once name: ether2 ether3 status: link-ok link-ok rate: 10Gbps 10Gbps full-duplex: yes yes default-cable-setting: standard standard # Проверяем, что IP прописались [admin@MikroTik] > /ip address print Columns: ADDRESS, NETWORK, INTERFACE # ADDRESS NETWORK INTERFACE 0 192.168.10.1/24 192.168.10.0 ether2 1 192.168.20.1/24 192.168.20.0 ether3 # Проверим маршруты [admin@MikroTik] > /ip route print Flags: D - DYNAMIC; A - ACTIVE; c, y - COPY Columns: DST-ADDRESS, GATEWAY, DISTANCE DST-ADDRESS GATEWAY DISTANCE DAc 192.168.10.0/24 ether2 0 DAc 192.168.20.0/24 ether3 0
К счастью, нам не нужно никаких танцев в MikroTik с бубнами, что бы связность появилась сразу и мы можем сразу перейти к настройке наших VPCS. Таким же образом, через консоль, подключаемся и каждой из VPCS пропишем статичный IP и соотвествующий gateway.
PC1> ip 192.168.10.2/24 192.168.10.1 PC2> ip 192.168.10.3/24 192.168.10.1 PC3> ip 192.168.20.2/24 192.168.20.1 PC4> ip 192.168.20.3/24 192.168.20.1
После этого мы уже можем проверять связность. Давайте зайдем на PC1 и пропингуем PC3:
PC1> ping 192.168.20.2 84 bytes from 192.168.20.2 icmp_seq=1 ttl=63 time=11.863 ms 84 bytes from 192.168.20.2 icmp_seq=2 ttl=63 time=5.874 ms 84 bytes from 192.168.20.2 icmp_seq=3 ttl=63 time=5.809 ms
К сожалению после того как мы остановим VPCS изменения по IP адресам не будут сохранены. Поэтому, чтобы нам дальше не думать о ручном прописывании IP адресов давайте включим DHCP на Mikrotik.
# ether2 (192.168.10.0/24) /ip pool add name=pool_lan1 ranges=192.168.10.100-192.168.10.200 /ip dhcp-server add name=dhcp_lan1 interface=ether2 address-pool=pool_lan1 lease-time=1h /ip dhcp-server enable dhcp_lan1 /ip dhcp-server network add address=192.168.10.0/24 gateway=192.168.10.1 dns-server=1.1.1.1,8.8.8.8 # ether3 (192.168.20.0/24) /ip pool add name=pool_lan2 ranges=192.168.20.100-192.168.20.200 /ip dhcp-server add name=dhcp_lan2 interface=ether3 address-pool=pool_lan2 lease-time=1h /ip dhcp-server enable dhcp_lan2 /ip dhcp-server network add address=192.168.20.0/24 gateway=192.168.20.1 dns-server=1.1.1.1,8.8.8.8
DHCP серверы настроены на портах. Давайте подключимся к PC1 и попробуем получить адрес.
PC1> ip dhcp DORA IP 192.168.10.200/24 GW 192.168.10.1 PC1> show ip NAME : PC1[1] IP/MASK : 192.168.10.200/24 GATEWAY : 192.168.10.1 DNS : 8.8.8.8 DHCP SERVER : 192.168.10.1 DHCP LEASE : 3510, 3600/1800/3150 MAC : 00:50:79:66:68:00 LPORT : 20012 RHOST:PORT : 127.0.0.1:20013 MTU : 1500
Ну и в конце в целях обучения также посмотрим какой IP и кому был выдан на самом Mikrotik.
[admin@MikroTik] > /ip dhcp-server lease print Flags: D, B - BLOCKED Columns: ADDRESS, MAC-ADDRESS, HOST-NAME, SERVER, STATUS, LAST-SEEN # ADDRESS MAC-ADDRESS HOST-NAME SERVER STATUS LAST-SEEN 0 D 192.168.10.200 00:50:79:66:68:00 PC1 dhcp_lan1 bound 1m6s
Улучшение сети
Прежде чем что то делать дальше хочется чтобы мы могли иметь доступ в Интернет. Для этого давайте добавим на схему NAT и соединим его интерфейс с Mikrotik.

На всякий случай включим получение IP адреса на ether1 по dhcp от NAT.
[admin@MikroTik] > /ip dhcp-client add interface=ether1 disabled=no failure: dhcp-client on that interface already exists [admin@MikroTik] > /ip address print Flags: D - DYNAMIC Columns: ADDRESS, NETWORK, INTERFACE # ADDRESS NETWORK INTERFACE 0 192.168.10.1/24 192.168.10.0 ether2 1 192.168.20.1/24 192.168.20.0 ether3 2 D 192.168.122.154/24 192.168.122.0 ether1 [admin@MikroTik] > /ip route print Flags: D - DYNAMIC; A - ACTIVE; c, d, y - COPY Columns: DST-ADDRESS, GATEWAY, DISTANCE DST-ADDRESS GATEWAY DISTANCE DAd 0.0.0.0/0 192.168.122.1 1 DAc 192.168.10.0/24 ether2 0 DAc 192.168.20.0/24 ether3 0 DAc 192.168.122.0/24 ether1 0 [admin@MikroTik] > /tool ping 8.8.8.8 SEQ HOST SIZE TTL TIME STATUS 0 8.8.8.8 56 110 10ms898us 1 8.8.8.8 56 110 13ms254us 2 8.8.8.8 56 110 12ms425us sent=3 received=3 packet-loss=0% min-rtt=10ms898us avg-rtt=12ms192us max-rtt=13ms254us
Теперь нужно включить маскарадинг, чтобы другие наши клиентские устройства также могли выйти в интернет.
/ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade
Проверим на PC1
PC1> /ip dhcp DORA IP 192.168.10.200/24 GW 192.168.10.1 PC1> show ip NAME : PC1[1] IP/MASK : 192.168.10.200/24 GATEWAY : 192.168.10.1 DNS : 1.1.1.1 8.8.8.8 DHCP SERVER : 192.168.10.1 DHCP LEASE : 3599, 3600/1800/3150 MAC : 00:50:79:66:68:00 LPORT : 20012 RHOST:PORT : 127.0.0.1:20013 MTU : 1500 PC1> ping 192.168.20.1 84 bytes from 192.168.20.1 icmp_seq=1 ttl=64 time=16.495 ms 84 bytes from 192.168.20.1 icmp_seq=2 ttl=64 time=6.239 ms PC1> ping ya.ru ya.ru resolved to 77.88.44.242 84 bytes from 77.88.44.242 icmp_seq=1 ttl=52 time=20.905 ms 84 bytes from 77.88.44.242 icmp_seq=2 ttl=52 time=27.412 ms
Отказ от VPCS в пользу Alpine
Теперь давайте все таки откажемся от VPCS в пользу Alpine Linux Virt для того чтобы мы приблизиться к максимально боевым условиям. Давайте добавим Alpine через New Template.

На шаге где будут запрашиваться файлы - нажимаем Download. Скачиваем образ, если нужно распаковываем и делаем Import. И далее, по шагам, со всем соглашаемся.

Теперь добавим Alpine Linux Virt на нашу схему и соединим с Switch1.

Включим нашу новую виртуалку и настроим сеть на получение адреса по dhcp. После чего сразу перезагрузим и проверим что интернет появился.
alpine:~# setup-interfaces Available interfaces are: eth0. Enter '?' for help on bridges, bonding and vlans. Which one do you want to initialize? (or '?' or 'done') [eth0] Ip address for eth0? (or 'dhcp', 'none', '?') [192.168.20.200] dhcp Do you want to do any manual network configuration? (y/n) [n] n alpine:~# /etc/init.d/networking restart * WARNING: you are stopping a boot service * Stopping networking ... * lo ... [ ok ] * eth0 ...cat: can't open '/var/run/udhcpc.eth0.pid': No such file or directory sh: you need to specify whom to kill [ ok ] * Starting networking ... * lo ... [ ok ] * eth0 ...udhcpc: started, v1.36.1 udhcpc: broadcasting discover udhcpc: broadcasting select for 192.168.10.199, server 192.168.10.1 udhcpc: lease of 192.168.10.199 obtained from 192.168.10.1, lease time 3600 [ ok ] alpine:~# ping ya.ru PING ya.ru (5.255.255.242): 56 data bytes 64 bytes from 5.255.255.242: seq=0 ttl=243 time=19.885 ms
Теперь удалим все VPCS, выключим Alpine Linux Virt, сделаем копии через Duplicate в меню, чтобы постоянно не делать одно и то же для настройки сети.

После этого у нас будет такая схема.

Теперь на Mikrotik проверим какие IP выданы DHCP сервером.
[admin@MikroTik] > /ip dhcp-server lease print Flags: D, B - BLOCKED Columns: ADDRESS, MAC-ADDRESS, HOST-NAME, SERVER, STATUS, LAST-SEEN # ADDRESS MAC-ADDRESS HOST-NAME SERVER STATUS LAST-SEEN 0 D 192.168.10.200 00:50:79:66:68:00 PC1 dhcp_lan1 bound 50m39s 1 D 192.168.10.199 0C:DD:51:48:00:00 alpine dhcp_lan1 bound 24m57s 2 D 192.168.20.200 0C:8A:11:AE:00:00 alpine dhcp_lan2 bound 24m57s 3 D 192.168.10.198 0C:64:80:56:00:00 alpine dhcp_lan1 bound 24m57s 4 D 192.168.20.199 0C:43:F1:88:00:00 alpine dhcp_lan2 bound 24m56s
Подключимся к любому новому Alpine и проверим что есть интернет.
alpine:~# ping ya.ru PING ya.ru (77.88.55.242): 56 data bytes 64 bytes from 77.88.55.242: seq=0 ttl=52 time=21.013 ms 64 bytes from 77.88.55.242: seq=1 ttl=52 time=28.526 ms 64 bytes from 77.88.55.242: seq=2 ttl=52 time=34.983 ms
Настройка Firewall
Теперь немного причешем безопасность. Ведь ее много не бывает.
# Разрешаем ответы /ip firewall filter add chain=forward connection-state=established,related action=accept # Дропаем мусор /ip firewall filter add chain=forward connection-state=invalid action=drop # Разрешаем LAN → Internet /ip firewall filter add chain=forward in-interface=ether2 out-interface=ether1 action=accept /ip firewall filter add chain=forward in-interface=ether3 out-interface=ether1 action=accept # Запрещаем Internet → LAN /ip firewall filter add chain=forward in-interface=ether1 action=drop
Добавляем серверную
Чуть усложним нашу схему и добавим туда LAN3(в порт ether4) с подсетью 192.168.30.0/24 для серверов. Также предложим, что в LAN1 (users) находятся сотрудники, которые должны иметь доступ к серверам. А в LAN2(guests) - они могут ходить только в интернет. Также из LAN3 будет доступ в интернет.

Настроим DHCP для LAN3.
/ip address add address=192.168.30.1/24 interface=ether4 /ip pool add name=pool_lan3 ranges=192.168.30.100-192.168.30.200 /ip dhcp-server add name=dhcp_lan3 interface=ether4 address-pool=pool_lan3 lease-time=1h /ip dhcp-server enable dhcp_lan3 /ip dhcp-server network add address=192.168.30.0/24 gateway=192.168.30.1 dns-server=1.1.1.1,8.8.8.8 # Заодно зафиксируем привязку MAC адреса сервера к выдаваемому IP. # В проде вам нужно использовать статичный IP конечно. /ip dhcp-server lease add mac-address=0C:34:7C:77:00:00 address=192.168.30.200 comment="server01"
DNS Forwarder
Для управляемости удобнее раздавать клиентам DNS роутера/локального резолвера, а уже он будет форвардить наружу. Давайте это исправим и используем MikroTik как DNS forwarder.
/ip dns set servers=1.1.1.1,8.8.8.8 allow-remote-requests=yes [admin@MikroTik] /ip/dhcp-server> /ip dhcp-server network print Columns: ADDRESS, GATEWAY, DNS-SERVER # ADDRESS GATEWAY DNS-SERVER 0 192.168.10.0/24 192.168.10.1 1.1.1.1 8.8.8.8 1 192.168.20.0/24 192.168.20.1 1.1.1.1 8.8.8.8 2 192.168.30.0/24 192.168.30.1 8.8.8.8 1.1.1.1 /ip dhcp-server network set 0 dns-server=192.168.10.1 /ip dhcp-server network set 1 dns-server=192.168.20.1 /ip dhcp-server network set 2 dns-server=192.168.30.1
Настроим Firewall
Прежде чем двигаться дальше - нам надо причесать Firewall. Давайте посмотрим что там есть
[admin@MikroTik] /ip/firewall/address-list> /ip firewall filter print Flags: X - disabled, I - invalid; D - dynamic 0 chain=forward action=accept connection-state=established,related 1 chain=forward action=drop connection-state=invalid 2 chain=forward action=accept in-interface=ether2 out-interface=ether1 3 chain=forward action=accept in-interface=ether3 out-interface=ether1 4 chain=forward action=drop in-interface=ether1
Наши текущие правила используют интерфейсы. Поскольку количество подсетей будет расти - давайте перейдем на адресные списки, чтобы каждый раз не прописывать сети.
# Добавим адресные списки /ip firewall address-list add list=LAN1 address=192.168.10.0/24 add list=LAN2 address=192.168.20.0/24 add list=LAN3 address=192.168.30.0/24
Следующим шагом мы удалим лишние правила и создадим по новой.
# Удалим все правила /ip firewall filter remove [find] # 1. Базовые правила для любой сети add chain=forward action=accept connection-state=established,related comment="Allow established" add chain=forward action=drop connection-state=invalid comment="Drop invalid" add chain=input action=accept connection-state=established,related add chain=input action=drop connection-state=invalid # 2. DNS правила в forward (для клиентов во внешний DNS) add chain=forward action=accept protocol=udp dst-port=53 comment="Allow DNS UDP" add chain=forward action=accept protocol=tcp dst-port=53 comment="Allow DNS TCP" # 3. Межсетевые правила add chain=forward action=accept src-address-list=LAN1 dst-address-list=LAN3 comment="LAN1->LAN3" add chain=forward action=drop src-address-list=LAN2 dst-address-list=LAN1 comment="Block LAN2->LAN1" add chain=forward action=drop src-address-list=LAN2 dst-address-list=LAN3 comment="Block LAN2->LAN3" add chain=forward action=drop src-address-list=LAN3 dst-address-list=LAN1 comment="Block LAN3->LAN1" add chain=forward action=drop src-address-list=LAN3 dst-address-list=LAN2 comment="Block LAN3->LAN2" # 4. Правила для выхода в интернет add chain=forward action=accept src-address-list=LAN1 out-interface=ether1 comment="LAN1->Internet" add chain=forward action=accept src-address-list=LAN2 out-interface=ether1 comment="LAN2->Internet" add chain=forward action=accept src-address-list=LAN3 out-interface=ether1 comment="LAN3->Internet" # 5. Блокировка интернета внутрь add chain=forward action=drop in-interface=ether1 comment="Block Internet->LAN"
Ну и добьем эту историю настройка Input правил к нашему Mikrotik. Закроем доступ из гостевой сети ( LAN2 ), но оставим открытым ping (icmp). А также оставим доступ к управляющем порту 8291 (winbox) из юзерской сети (LAN1).
/ip firewall filter # INPUT правила (доступ к роутеру) add chain=input action=accept protocol=icmp src-address-list=LAN1 comment="Ping from LAN1" add chain=input action=accept protocol=icmp src-address-list=LAN2 comment="Ping from LAN2" add chain=input action=accept protocol=icmp src-address-list=LAN3 comment="Ping from LAN3" add chain=input action=accept protocol=tcp src-address-list=LAN1 port=8291 comment="Winbox from LAN1" add chain=input action=accept protocol=udp src-address-list=LAN1 dst-port=53 comment="DNS from LAN1" add chain=input action=accept protocol=tcp src-address-list=LAN1 dst-port=53 comment="DNS TCP from LAN1" add chain=input action=accept protocol=udp src-address-list=LAN2 dst-port=53 comment="DNS from LAN2" add chain=input action=accept protocol=tcp src-address-list=LAN2 dst-port=53 comment="DNS TCP from LAN2" add chain=input action=accept protocol=udp src-address-list=LAN3 dst-port=53 comment="DNS from LAN3" add chain=input action=accept protocol=tcp src-address-list=LAN3 dst-port=53 comment="DNS TCP from LAN3" add chain=input action=drop in-interface=ether1 comment="Block Internet->Router" add chain=input action=drop src-address-list=LAN2 comment="Block LAN2->Router" add chain=input action=drop src-address-list=LAN3 comment="Block LAN3->Router"
Вы, могли заметить что мы зачем то создали правила DROP и они избыточны. Но на самом деле явные drop правила нам более детально диагностировать и если необходимо даже включить логирование.
Например, давайте отправим несколько icmp-пакетов в сторону сервера из гостевой сети.
[admin@MikroTik] /ip/firewall/filter> /ip firewall filter print stats where packets>0 Columns: CHAIN, ACTION, BYTES, PACKETS # CHAIN ACTION BYTES PACKETS ;;; Allow established 0 forward accept 252 3 2 input accept 506 3 **;;; Block LAN2->LAN3 8 forward drop 420 5** ;;; LAN2->Internet 12 forward accept 84 1 ;;; DNS from LAN2 21 input accept 102 2 ;;; Block LAN2->Router 26 input drop 656 2 ;;; Block LAN3->Router 27 input drop 328 1
Здесь явно видно что правило отработало и это очень полезно, особенно на начальных этапах настройки сетей. Но вам в приципе ничего не мешает упростить конфигурацию.
Заключение
В этой части мы изучили, как из простейшей сети вырастает полноценная сегментированная инфраструктура с продуманной безопасностью. Освоенные принципы работы с RouterOS и GNS3 станут фундаментом для проектирования сетей любой сложности.
Ну а в следующей части мы пересоберем сеть, задействуем Cisco L2-коммутатор и VLAN-ы. И самое главное разберемся почему это важно в контексте масштабирования сети.
Хватит читать DevOps-статьи от людей без продакшена. Я рассказываю про свой реальный опыт в своем Telegram-канале DevOps Brain 🧠 ↩
