Wireguard, Keenetic и объединение сетей
Сделал вчера наверно пятую за последние три года попытку донастроить свою сеть. Маленькая сеточка из 4 подсетей, топология звезда, построена на Keenetic и wireguard. За выбор оборудования не ругать - сеть домашняя) А вообще - кинетики вполне рулят: настройка простая, работают быстро, с надежностью проблем тоже еще не было. А c появлением wireguard так вообще стало всё замечательно - можно за минуту, например, настроить выход в инет любого устройства из любой подсети через любой роутер. Полезная фича в наш век блокировок.
Вернее - почти любого через почти любой) Об этом и пойдет речь
Итак, условия задачи: есть сеть С (от слова Central, 10.220.60.0/24), в ней находится роутер Keenetic Giant - центральный узел нашей большой сети. Белый ip, резервный канал, все дела. Есть сети L и R (Left 10.220.14.0/24 и Right 10.220.19.0/24). Тоже кинетики, но попроще, и тоннели wireguard до сети C. Всё работает отлично, с любого устройства в сетях L и R можно зайти на любое устройство в сети C, а с любого устройства сети C - вообще на любое устройство всей нашей сети. Но вот из сети L в R, и наоборот - нельзя.
Сначала грешил на косяки маршрутизации, сетевого экрана, на гребанный ip_forward... Но вчера стал копать в направлении политик доступа, анализировать конфиг... В общем - залез достаточно глубоко, и вот что получается:
Чисто теоретически работать это всё должно без особых проблем
Нужно только сделать наши сети L и R приватными, на роутере C командой
interface <имя интерфейса> security-level private
Имена интерфейсов, а также их свойства смотрим командой show interface. Да, чтобы добраться до CLI - просто в адресной строке браузера допишите /a к ip адресу роутера.
Затем, руководствуясь этим "доступ закрыт, но может быть разрешен", делаем
no isolate-private
Казалось бы всё, должно работать! Но нееет))) Роем дальше, командой show ip nat в таблице маршрутизации видим, что кинетик C делает с пакета на входящем интерфейсе с сетей L и R SNAT, т.е. подменяет исходный адрес адресом интерфейса wireguard
Роемся в документации, делаем на роутере C
no ip nat <имя интерфейса>
Казалось бы теперь точно всё! Но снова нет. show ip nat говорит нам, что nat на интерфейсах сетей L и R по-прежнему включен! Соответственно, передачи пакетов между сетями L и R нет
Копаем дальше, находим пару интересных обсуждений про работу ip nat и ip static, в которых уже лет как 10 поднимается этот вопрос к инженерам кинетика... Суть следующая: если на роутер приходит пакет, адрес назначения находится вне известных кинетику приватных сетей, то он делает SNAT независимо от того, установлен или ip nat для исходного интерфейса или нет. И удалить эту конфигурационную запись вроде нельзя. Или можно? Точного ответа пока не нашел(
В общем - несмотря на то, что подсеть L и подсеть R прописаны в таблице статической маршрутизации роутера C, прописаны в настройках wireguard - для целей nat роутер считает эти сети неизвестными публичными (ну правильно, адрес интерфейса wireguard 10.220.100.1, а сеть за ним - 10.220.19.0/24) В итоге ip форвардинг не пашет.
Внимание, вопрос: кто-то сумел настроить сеть в такой конфигурации на кинетиках? Смену оборудования просьба не предлагать)
Разберусь сам - естественно напишу решение. Но как всегда хочется немного упростить задачу)))
Решение: всего час, и от пользователя stranneek получен совет, решивший проблему: на роутерах L и R нужно прописать в маршруты не только удаленные сети, но и подсети туннелей wireguard, ведущие к удаленным подсетям. Т.е. Не только 10.220.14.0/24, но и 10.220.100.0/24, в которой находятся два интерфейса wireguard 10.220.100.1 (на роутере C) и 10.220.100.2 (на роутере удаленной подсети). Спасибо огромное! Думаю, эта инфа кому-нибудь да сэкономит несколько часов)
З.Ы. Проверил - эти подсети должны быть и в настройках тоннеля wireguard, и в маршрутах. Всё со стороны удаленных сетей, в центре ничего прописывать не нужно
З.З.Ы. Да, все эти security-level и no isolate-private тоже не нужны. Достаточно в межсетевом экране на всех роутерах открыть нужные протоколы/порты на всех wireguard интерфейсах)
З.З.З.Ы. Еще полчаса экспериментов показали, что связь начинает работать, когда на роутере в подсети-получателе (т.е. не в той, из которой пингуем, а в той, которую пингуем) прописан маршрут до подсети wireguard отправителя. Ну и тогда вся логика сразу встала на свои места. nat никуда не делся, ip адрес отправителя путем SNAT поменялся на ip интерфейса wireguard, ну а роутер сети-получателя вообще не в курсе, что это за сеть и куда посылать к ней пакеты. И пока не пропишешь эту подсеть в настройках тоннеля и в маршрутизации - ничего не работает. Проверил show ip nat - и НЕТ! Нету этого коннекта в таблице nat на центральном роутере. В общем - полон загадок этот кинетик, но способ сделать полноценную распределенную сетку всё-таки есть)


Лига Сисадминов
2.5K постов19K подписчиков
Правила сообщества
Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.