Сегодня поговорим о том, как построить отказоустойчивую быструю защищенную корпоративную сеть передачи данных на OS Debian.
Итак: VxLAN ethernet-туннель поверх IP-туннеля WireGuard с динамическими маршрутами OSPF
WireGuard является туннелем третьего (сетевого) уровня.
Соответственно возможности канального уровня (логические мосты, широковещательные рассылки и т.д.) недоступны в данном туннеле.
Так же, пока, WireGuard не предоставляет возможностей автоматической передачи параметров сети (маршруты, динамические адреса) соседям.
Чтобы обойти данные ограничения можно прибегнуть к двум дополнительным решениям:
- VxLAN — технология виртуальной сети, использующая инкапсюляцию L2 Ethernet в UDP-пакеты.
- OSPF — не нуждающийся в представлении протокол динамической маршрутизации, основанный на технологии отслеживания состояния канала и использующий для нахождения кратчайшего пути алгоритм Дейкстры.
В примере будем предполагать, что у нас есть три площадки со своим маршрутизатором на Debian Linux:
- router01
- WAN IP: 123.124.125.1
- LAN: 10.1.1.0/24
- router02
- WAN IP: 124.125.126.2
- LAN: 10.2.2.0/24
- router03
- WAN IP: 125.126.127.3
- LAN: 10.3.3.0/24
Этап 1 — Установка шифрованного туннеля WireGuard
Для установки соответствующего ПО можно обратиться к официальной документации Debian.
В нашей конфигурации можно воспользоваться разными топологиями туннеля.
Например:
- Подключение многих к одному (клиенты-сервер или звезда)
- Подключение всех ко всем (ячеистая сеть или mesh)
- Смешанный тип подключений
В данной статье мы воспользуемся первым вариантом (хотя это и не принципиально).
Сеть туннеля WireGaurd назначим 10.10.10.0/24
Второй и третий маршрутизатор будут подключаться к первому.
На первом маршрутизаторе создадим конфигурацию с подключениями ко второму и третьему:
/etc/wireguard/wg0.conf
[Interface] ListenPort = 4444
PrivateKey = закрытый_ключ_первого_маршрутизатора
Второй маршрутизатор
[Peer] PublicKey = открытый_ключ_второго_маршрутизатора
AllowedIPs = 10.10.10.2/32
Endpoint = 124.125.126.2:4444
Третий маршрутизатор
[Peer] PublicKey = открытый_ключ_третьего_маршрутизатора
AllowedIPs = 10.10.10.3/32
Endpoint = 125.126.127.3:4444
На втором маршрутизаторе создадим конфигурацию с подключением к первому маршрутизатору:
/etc/wireguard/wg0.conf
[Interface] ListenPort = 4444
PrivateKey = закрытый_ключ_второго_маршрутизатора
Первый маршрутизатор
[Peer] PublicKey = открытый_ключ_первого_маршрутизатора
AllowedIPs = 10.10.10.0/24
Endpoint = 123.124.125.1:4444
На третьем маршрутизаторе, также, создадим конфигурацию с подключением к первому маршрутизатору:
/etc/wireguard/wg0.conf
[Interface] ListenPort = 4444
PrivateKey = закрытый_ключ_третьего_маршрутизатора
Первый маршрутизатор
[Peer] PublicKey = открытый_ключ_первого_маршрутизатора
AllowedIPs = 10.10.10.0/24
Endpoint = 123.124.125.1:4444
Далее на всех маршрутизаторах добавим конфигурацию сетевого интерфейса для WireGuard:
/etc/network/interfaces
auto wg0
iface wg0 inet static
address 10.10.10.1/24 # для второго и третьего — 10.10.10.2/24 и 10.10.10.3/24 соответственно
pre-up ip link add $IFACE type wireguard
pre-up wg setconf $IFACE /etc/wireguard/$IFACE.conf
post-down ip link del $IFACE
После этого поднимем интерфейсы туннеля на всех маршрутизаторах:
ifup wg0
На этом установка шифрованного туннеля WireGuard закончена.
Этап 2 — Установка виртуальной сети VxLAN поверх WireGuard
Определимся, что виртуальная сеть будет иметь адресацию — 10.20.20.0/24
Для начала создадим файл, в котором перечислим все пиры, которые будут участвовать в виртуальной сети.
Данный файл должен иметь одно и то же содержимое на всех маршрутизаторах (пирах).
Т.к. виртуальную сеть будем строить в туннеле WireGuard, то и адреса пиров будут в этой сети:
/etc/wireguard/vxpeers (расположение и имя файла не имеет значения)
10.10.10.1
10.10.10.2
10.10.10.3
Далее добавим конфигурацию сетевого интерфейса виртуальной сети VxLAN:
/etc/network/interfaces
auto vxlan0
iface vxlan0 inet static
address 10.20.20.1/24 # для второго и третьего — 10.20.20.2/24 и 10.20.20.3/24 соответственно
pre-up ip link add $IFACE type vxlan id 42 dev wg0 dstport 0
pre-up for peerip in $(cat /etc/wireguard/vxpeers); do \
ip a | egrep «$peerip\/» 2>&1 1> /dev/null || \
bridge fdb append to 00:00:00:00:00:00 dst $peerip dev $IFACE; done
post-down bridge fdb del 00:00:00:00:00:00 dev $IFACE
post-down ip link del $IFACE
И поднимем интерфейс:
ifup vxlan0
Этап 3 — Настройка динамической маршрутизации локальных сетей за маршрутизаторами
Для организации OSPF можно использовать Quagga или FRRouting.
Для FRRouting есть нюанс — после перезапуска конфигурация не применяется.
Чтобы решить эту проблему в файле /etc/frr/daemons надо переменную ospfd_options привести к виду:
ospfd_options=» -A 127.0.0.1 -f /etc/frr/ospfd.conf»
После установки выбранного пакета и активации ospfd подключимся к консоли OSPF:
telnet localhost ospfd
После ввода пароля вводим следующие команды:
enable
configure terminal
hostname router01 # для второго и третьего маршрутизаторов — router02 и router03 соответственно
access-list filter_connected_routes_alist permit 10.1.1.0/24 # для второго и третьего маршрутизаторов — 10.2.2.0/24 и 10.3.3.0/24 соответственно
access-list filter_connected_routes_alist deny any
route-map filter_connected_routes_rmap permit 10
match ip address filter_connected_routes_alist
interface vxlan0
ip ospf mtu-ignore
<Ctrl+D>
router ospf
ospf router-id 10.20.20.1 # для quagga — router-id 10.20.20.1 # для второго и третьего маршрутизаторов — 10.20.20.2 и 10.20.20.3 соответственно
redistribute connected metric 1 route-map filter_connected_routes_rmap
network 10.20.20.0/24 area 0
write memory
После этого выходим из консоли нажатиями Ctrl+D.
Через некоторое время (пол.минуты — минута) демоны ospfd обменяются конфигурацией и добавят динамические маршруты на всех маршрутизаторах.
Вот собственно и все — ваша корпоративная сеть готова. Осталось конечно добавить приоритезацию, мониторинг и многое другое, но об этом в следующих статьях.