После некоторого времени затишья я возвращаюсь к вам, уважаемые читатели, с очередной длинной и нечитаемой статьей.
Предыстория
До недавнего времени для построения корпоративных маршрутизаторов, межсетевых экранов и vpn-концентраторов было только два варианта. Либо готовые к использованию, интегрированные проприетарные решения, либо настроенные под конкретную задачу UNIX-системы. При этом готовые решения используют зачастую ни с чем не совместимое аппаратное обеспечение (включая модули расширения вроде сетевых карт или оперативной памяти), закрыты и не поддаются модификации; а при использовании UNIX общего назначения многое нужно делать вручную и настройки разбросаны по многим файлам, в итоге их тяжело сопровождать. Но недавно я обнаружил, что уже существует решение, сочетающее достоинства обоих вариантов: интегрированность и простоту сопровождения с гибкостью и открытостью.
Называется этот проект Vyatta, и меня он очень вдохновил. Поэтому сегодня мы рассмотрим пример настройки этой системы для шлюза небольшой компании с полным его разоблачением подробными комментариями.
Что же она собой представляет? По сути, это специализированный дистрибутив Linux для построения маршрутизаторов и шлюзов. Причем не какой-нибудь, а с единым интерфейсом для настройки и управления всеми входящими в комплект сервисами. То есть, работа с ним происходит примерно так же, как с аппаратными решениями. Система команд напоминает устройства Juniper Networks, но и администраторы Cisco в ней не потеряются.
В числе доступных «из коробки» в версии Vyatta Community 5.0.2 присутствуют:
- Поддержка статических маршрутов, BGP, OSPF и RIP;
- Файрволл с учетом состояний соединения;
- VPN по протоколам IPsec, PPTP и OpenVPN;
- Туннели PPPoE, IP-IP и GRE;
- Шейпинг и QoS;
и еще довольно много чего. Много чего еще нет, например NetFlow и PPTP-клиента. Их можно поставить вручную, правда и настраивать их придеться руками, доступа через родной интерфейс не будет. Радует то, что проект постоянного развивается, и рано или поздно многое будет встроено. Ну и открытость кода позволяет самому дописать недостающее.
Получаем и устанавливаем дистрибутив
После довольно длинного введения приступим к делу. Загрузить дистрибутив можно с официального сайта. Я ставил с LiveCD, для желающих есть образы для Xen и VMWare. Установка ничего сложного собой не представляет, просто загружаемся, заходим под пользователем vyatta с таким же паролем и набираем команду install-system. Отвечаем на вопросы диалогового интерфейса установки и несколько минут ждем завершения.
Настраиваем систему
В свежеустановленной системе есть два пользователя: root и vyatta. У первого оболочкой поставлен привычный bash, у второго собственная оболочка системы, которая нам и интересна. Удалить этих пользователей не получится. После загрузки заходим под пользователем vyatta с паролем, который вы набрали при установке.
Вы увидите приглашение командной строки вида vyatta@vyatta:~$. Как и во всех приличных сетевых устройствах, по клавише «?» вы можете увидеть список доступных команд. Автодополнение по Tab тоже способно его выдавать. Привычных администраторам устройств Cisco Systems сокращений команд тут нет. Зато есть возможность выполнять обычные команды Linux, хотя их и не показывают в справке. Причем их вполне можно комбинировать с «родными», вроде
Можно посмотреть на нетронутые настройки по умолчанию командой show configuration. Который мы в скором времени безжалостно отредактируем под свои нужды. Сразу можно заметить, что настройки имеют иерархическую структуру.
Сейчас мы находимся в режиме оператора, о чем нас оповещает «$» в приглашении. Перейти в режим администрирования можно с помощью команды configure. Знак приглашения при этом изменится на «#». Некоторые команды в разных режимах действуют по разному, сравните, например, вывод show interfaces.
Настраиваем сетевые интерфейсы
Прежде всего нам нужно настроить сетевые интерфейсы. В нашем примере физических интерфейсов Ethernet будет два — один смотрит в локальную сеть, второй в Интернет. Названия интерфейсов такие же, как в Linux. Интерфейсы Ethernet будут называться ethX. IP-адрес задаем командой вида:
где x.x.x.x некоторый адрес, y — маска подсети. Теперь посмотрим, как изменились настройки командой show interfaces.
ethernet eth0 { +address x.x.x.x/y hw-id xx:xx:xx:xx:xx:xx } ethernet eth1 { hw-id xx:xx:xx:xx:xx:xx }
Командой set interfaces ethernet eth0 description "text" можно установить текстовое описание для интерфейса. Например LAN interface. Обратите внимание на символ «+» перед строкой address. Он значит, что изменения в настройки уже внесены, но еще не применились. Их можно применить командой commit или отменить командой discard. Также нужно учитывать, что commit вносит изменения только в те настройки, которые сейчас загружены в память. Чтобы сохранить их в постоянный файл конфигурации, используйте команду save.
Второй интерфейс у нас будет смотреть в Интернет. Предположим, что провайдер использует для подключения PPPoE. Тогда мы должны написать примерно следующее:
set interfaces ethernet eth1 pppoe 0 edit interfaces ethernet eth1 pppoe 0 set user-id username set password some_password set default-route auto
На этом примере мы видим еще одну особенность интерфейса. Каждый узел интерфейса можно редактировать отдельно после команды edit
После применения настроек PPPoE соединение установится автоматически. Также вы можете установить его вручную, перейдя в режим оператора (команда exit) и набрав
Настраиваем NAT
В нашей сети будут использованы «серые» адреса. Поэтому нам не обойтись без трансляции сетевых адресов, также известной как NAT. Мы настроим доступ в Интернет из локальной сети и доступ из Интернета к серверу нашей компании. Начнем с доступа изнутри сети (обозначим ее x.x.x.z/y).
set service nat edit service nat set rule 10 type masquerade set rule 10 outbound-interface pppoe0 set rule 10 source address x.x.x.z/y set rule 10 description "Local network to the Internet"
Теперь пробросим порт 80 (http) на корпоративный сервер. Правило будет выглядеть так:
set rule 20 type destination edit rule 20 set protocol tcp set destination address <адрес внешнего интерфейса (pppoe0)> set destination port 80 set inbound-interface pppoe0 set inside-address address x.x.x.w set inside-address port 80
Правила NAT обозначаются числами от 1 до 1024, по старым традициям я предпочитаю нумеровать их через десятку (чтобы можно было что-то добавить, не нарушая логическую группировку правил).
Не забудьте применить и сохранить настройки!
Удаленный доступ по SSH
С этим все просто. Для безопасности мы запретим вход под пользователем root и принудительно поставим вторую версию протокола.
set service ssh edit service ssh set allow-root false set protocol-version 2
Заключение
Мы получили минимальную конфигурацию, с которой уже можно начать работать. Если у вас уже есть опыт работы с сетью, продолжить вы сможете уже сами. В этом вам поможет официальная документация, которую вы тоже можете загрузить с сайта.
Для тех, кто предпочитает графические интерфейсы, у Vyatta есть веб-интерфейс. По умолчанию он отключен, и вы можете включить его командой
Ссылки
- http://vyatta.com — сайт проекта.
- http://vyatta.org — сайт сообщества.
Спасибо! Хорошая статья! Еще было бы интересно узнать поддерживает ли vyatta pppoe server, а также работу с pppoe intermediate agent?
ОтветитьУдалитьК сожалению, пока не поддерживает, только PPPoE-клиент. В целом, это не так сложно реализовать, но я пока занимаюсь интеграцией PPTP-клиента и пытаюсь убедить разработчиков принять эти патчи в мейнстрим.
ОтветитьУдалитьVery good!
ОтветитьУдалитьIs well written, accurate and clear.
Thank you.
Greetings from Bulgaria
Daniil Baturin скажите как с вами связаться?
ОтветитьУдалитьМариян: Good to know people not only from .ru read this!
ОтветитьУдалитьАнонимный: Так ведь там где-то в боковой панели написана почта, на нее мне вполне можно писать. daniil(собака)baturin(точка)org
Здравствуйте. А есть ли возможность организовать балансировку исходящего трафика для 2 или 3 LAN карт. Нужно для дома с соседом инет делить.
ОтветитьУдалитьАнонимус: Да, можно. Посмотрите в документ High Availability с http://www.vyatta.org/documentation, там достаточно подробно написано в первой главе.
ОтветитьУдалитьК сожалению web интерфейс теперь доступен только подписавшимся пользователям. Подписка стоит не совсем копейки. Так что вынуждены пользоваться только текстом.
ОтветитьУдалить