В этой статье я хочу рассказать, как пришёл к выборочной маршрутизации трафика для целой локальной сети. Идея простая: обычный трафик идёт напрямую в интернет, а выбранные по доменным именам ресурсы автоматически отправляются через рабочий туннель. При этом на компьютерах пользователей ничего дополнительно настраивать не нужно.
Здесь пока не буду начинать сразу с готового конфига. Сначала хочу рассказать, откуда вообще появилась эта задача, какие варианты я пробовал и почему в итоге остановился на связке DNS, dnsmasq, nftables и policy routing.
С чего всё началось
Несколько лет назад я работал в компании, основной офис которой находился в Москве, а сам я работал из небольшого офиса в Томске. Для доступа к части корпоративных ресурсов нужно было подключаться к рабочему VPN.
Сам по себе VPN работал нормально. Неудобство было в другом: его постоянно нужно было включать и выключать. Нужно открыть внутренний сервис — включил VPN. Закончил работать с ним — выключил. Появился новый ноутбук — снова настрой VPN.
Плюс всё это нужно было делать на каждом устройстве отдельно.
В какой-то момент мне это просто надоело и я решил попробовать сделать так, чтобы пользователю вообще не приходилось думать о VPN.
Я хотел, чтобы человек просто подключался к сети нашего офиса и работал. Если он открывает внутренний GitLab или другой корпоративный сервис, трафик сам идёт через московский офис. Если открывает обычный сайт — трафик идёт напрямую в интернет.
Причём мне было важно соблюсти несколько условий.
Во-первых, я хотел иметь одно место, где задаётся список нужных ресурсов. Не хотелось потом ходить по компьютерам и менять конфигурацию на каждом из них.