10 окт. 2009 г.

Настройка Vyatta в качестве шлюза небольшого офиса

После некоторого времени затишья я возвращаюсь к вам, уважаемые читатели, с очередной длинной и нечитаемой статьей.

Предыстория

До недавнего времени для построения корпоративных маршрутизаторов, межсетевых экранов и vpn-концентраторов было только два варианта. Либо готовые к использованию, интегрированные проприетарные решения, либо настроенные под конкретную задачу UNIX-системы. При этом готовые решения используют зачастую ни с чем не совместимое аппаратное обеспечение (включая модули расширения вроде сетевых карт или оперативной памяти), закрыты и не поддаются модификации; а при использовании UNIX общего назначения многое нужно делать вручную и настройки разбросаны по многим файлам, в итоге их тяжело сопровождать. Но недавно я обнаружил, что уже существует решение, сочетающее достоинства обоих вариантов: интегрированность и простоту сопровождения с гибкостью и открытостью.

Называется этот проект Vyatta, и меня он очень вдохновил. Поэтому сегодня мы рассмотрим пример настройки этой системы для шлюза небольшой компании с полным его разоблачением подробными комментариями.

Что же она собой представляет? По сути, это специализированный дистрибутив Linux для построения маршрутизаторов и шлюзов. Причем не какой-нибудь, а с единым интерфейсом для настройки и управления всеми входящими в комплект сервисами. То есть, работа с ним происходит примерно так же, как с аппаратными решениями. Система команд напоминает устройства Juniper Networks, но и администраторы Cisco в ней не потеряются.

В числе доступных «из коробки» в версии Vyatta Community 5.0.2 присутствуют:

  1. Поддержка статических маршрутов, BGP, OSPF и RIP;
  2. Файрволл с учетом состояний соединения;
  3. VPN по протоколам IPsec, PPTP и OpenVPN;
  4. Туннели PPPoE, IP-IP и GRE;
  5. Шейпинг и QoS;

и еще довольно много чего. Много чего еще нет, например NetFlow и PPTP-клиента. Их можно поставить вручную, правда и настраивать их придеться руками, доступа через родной интерфейс не будет. Радует то, что проект постоянного развивается, и рано или поздно многое будет встроено. Ну и открытость кода позволяет самому дописать недостающее.

Получаем и устанавливаем дистрибутив

После довольно длинного введения приступим к делу. Загрузить дистрибутив можно с официального сайта. Я ставил с LiveCD, для желающих есть образы для Xen и VMWare. Установка ничего сложного собой не представляет, просто загружаемся, заходим под пользователем vyatta с таким же паролем и набираем команду install-system. Отвечаем на вопросы диалогового интерфейса установки и несколько минут ждем завершения.

Настраиваем систему

В свежеустановленной системе есть два пользователя: root и vyatta. У первого оболочкой поставлен привычный bash, у второго собственная оболочка системы, которая нам и интересна. Удалить этих пользователей не получится. После загрузки заходим под пользователем vyatta с паролем, который вы набрали при установке.

Вы увидите приглашение командной строки вида vyatta@vyatta:~$. Как и во всех приличных сетевых устройствах, по клавише «?» вы можете увидеть список доступных команд. Автодополнение по Tab тоже способно его выдавать. Привычных администраторам устройств Cisco Systems сокращений команд тут нет. Зато есть возможность выполнять обычные команды Linux, хотя их и не показывают в справке. Причем их вполне можно комбинировать с «родными», вроде

show configuration | grep eth0.

Можно посмотреть на нетронутые настройки по умолчанию командой show configuration. Который мы в скором времени безжалостно отредактируем под свои нужды. Сразу можно заметить, что настройки имеют иерархическую структуру.

Сейчас мы находимся в режиме оператора, о чем нас оповещает «$» в приглашении. Перейти в режим администрирования можно с помощью команды configure. Знак приглашения при этом изменится на «#». Некоторые команды в разных режимах действуют по разному, сравните, например, вывод show interfaces.

Настраиваем сетевые интерфейсы

Прежде всего нам нужно настроить сетевые интерфейсы. В нашем примере физических интерфейсов Ethernet будет два — один смотрит в локальную сеть, второй в Интернет. Названия интерфейсов такие же, как в Linux. Интерфейсы Ethernet будут называться ethX. IP-адрес задаем командой вида:

set interfaces ethernet eth0 address x.x.x.x/y

где 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 . Вместо edit мы могли использовать серию команд с указанием полного пути, вида set interfaces ethernet eth1 pppoe 0 user-id. Поднятся на верхний уровень вы всегда сможете командой top. Удалить любой из узлов вы можете командой delete, например,

delete interfaces ethernet eth0 address

После применения настроек PPPoE соединение установится автоматически. Также вы можете установить его вручную, перейдя в режим оператора (команда exit) и набрав

connect interface pppoe0

Настраиваем 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 есть веб-интерфейс. По умолчанию он отключен, и вы можете включить его командой

set service https

Ссылки

  1. http://vyatta.com — сайт проекта.
  2. http://vyatta.org — сайт сообщества.

8 комментариев:

  1. Спасибо! Хорошая статья! Еще было бы интересно узнать поддерживает ли vyatta pppoe server, а также работу с pppoe intermediate agent?

    ОтветитьУдалить
  2. К сожалению, пока не поддерживает, только PPPoE-клиент. В целом, это не так сложно реализовать, но я пока занимаюсь интеграцией PPTP-клиента и пытаюсь убедить разработчиков принять эти патчи в мейнстрим.

    ОтветитьУдалить
  3. Very good!
    Is well written, accurate and clear.
    Thank you.
    Greetings from Bulgaria

    ОтветитьУдалить
  4. Daniil Baturin скажите как с вами связаться?

    ОтветитьУдалить
  5. Мариян: Good to know people not only from .ru read this!

    Анонимный: Так ведь там где-то в боковой панели написана почта, на нее мне вполне можно писать. daniil(собака)baturin(точка)org

    ОтветитьУдалить
  6. Здравствуйте. А есть ли возможность организовать балансировку исходящего трафика для 2 или 3 LAN карт. Нужно для дома с соседом инет делить.

    ОтветитьУдалить
  7. Анонимус: Да, можно. Посмотрите в документ High Availability с http://www.vyatta.org/documentation, там достаточно подробно написано в первой главе.

    ОтветитьУдалить
  8. К сожалению web интерфейс теперь доступен только подписавшимся пользователям. Подписка стоит не совсем копейки. Так что вынуждены пользоваться только текстом.

    ОтветитьУдалить