Xgu.ru теперь в Контакте  — приходите и подключайтесь.
Пока мы работаем над следующими видео, вы можете подключиться в Контакте. Познакомимся и обсудим новые страницы и ролики.

Vk-big.pngYoutube-big.jpeg

xentaur/todo

Материал из Xgu.ru

Перейти к: навигация, поиск

< Xentaur|Xenomips|xen-drbd


Список доработок для Xentaur, Xenomips и xen-drbd.
Проекты постепенно интегрируются, но пока каждый из них сам по себе.


Содержание

[править] Сделано и нужно сделать

[править] Нужно сделать

[править] Первая очередь

  1. Глюк с третьим интерфейсом в write_to
  2. python shell в screen
  3. поддержка сериал-интерфейсов
  4. вывод сериал-интерфейсов на реальную консоль (USB?, подумать)
  5. Интегрировать скрипты /xen/procurve/make-xen-bridges, /xen/procurve/vlan-commands и /xen/procurve/make-vlans-on-switch; перенести их в дистрибутив; описать на странице http://xgu.ru/wiki/xentaur/real_network
  6. xentaur live — Шаблон:важно

[править] Вторая очередь

  1. виртуальный pix
  2. виртуальный коммутатор
  3. Добавить проверку на наличие IOS'а с нужным именем

[править] Третья очередь

  1. Собрать Xentaur в пакет Debian GNU/Linux
  2. Если Dynamips перезагружается слишком часто, не перезапускать его, а выдавать сообщение об ошибке

[править] Четвёртая очередь

  1. Интегрировать код Xentaur и xen-drbd
  2. удобное указание кроссов
  3. нормальная отрисовка кроссов
  4. Добавлять в xenomips не только quagga, но и программы для работы с ipsec

[править] Прочее

  1. Поддержка карт html для запуска процесса подключения к узлу
  2. использование правильных имён интерфейсов при конфигурировании
  3. использование тех или иных модулей для связи виртуальных систем между собой исходя из типа интерфейса
  4. интеграция с libvirt
  5. Автоматическое создание конфиг-файлов с именем топологии
  6. Соответствие внутренних структур xenomips состоянию реальной сетки
  7. Сохранение настройки сетки в файлах
  8. Обновить документацию по Xenomips, возможно выделить Xenomips в отдельный проект
  9. Вынести на конфиг-раздел не только конфиг quagga, но и возможно, весь /etc
  10. Передача дополнительных параметров dynamips'ам
  11. Вынесения общей части из конфига домена Xen
  12. Нормальные имена конфигурационны файлов (без .py) — сделано
  13. Имя топологии указывается в командной строке — сделано
  14. (и может сохраняться в файлах /etc/xentaur.conf и ~/.xentaurc)
  15. properties
  16. notes
  17. Дамп конфигурации с учётом properties
  18. обновление картинки на web
  19. запись в файл внутри xentaur
  20. вызов программ из xentaur
  21. поддержка большого количества интерфейсов в xenomips — сделано (точнее, уже не нужно в связи с тем, что Xen поддерживает 8 интерфейсов)
  22. Конфиг quagga, пересборка ­- посмотреть как сделано в quagga4

[править] Сделано

  1. Добавить quagga внутрь xenomips — сделано
  2. Перенести xentaur в cvs — сделано
  3. Сохранение состояния в файле — сделано
  4. python shell — сделано
  5. sudo xenomips — сделано
  6. визуализация машин различных типов — сделано
  7. документирование функций, начать — сделано
  8. конфигурирование машин изнутри python shell — сделано
  9. вынести образы в отдельную иерархию из xenomips — сделано
  10. Опциональный параметр write_to указывающий на какой экран возвращаться — сделано
  11. Создание конфигурационных файлов quagga — сделано
  12. отключение автоматического возврата на экран 0 — сделано
  13. Размер конфигурационного раздела xenomips — сделано
  14. Тип терминала в TERM=linux в гостевом домене — сделано
  15. Автозапуск screen в гостевом домене — сделано
  16. Убрать сервисный интерфейс — сделано
  17. Сделать подключение к виртуальным машинам через xm-консоль — сделано
  18. Перезагрузка dynamips — сделано
  19. Нужно сделать чтобы нельзя было выйти из quagga — сделано
  20. Интеграция с реальной сетью — сделано
  21. Функция python для управления соединения бриджами — сделано
  22. Функция для дампа бриджа — сделано
  23. Сделать инициализационные скрипты (библиотеку?) — сделано
  24. Исправить скрипт build-xenomips-image, так чтобы в dd использовалось seek — сделано
  25. Картинка не только в PNG, но и в SVG (и возможно) в других форматах — сделано
  26. синхронизация времени в xenomips — сделано

[править] Доработки в документации

[править] Xentaur в CVS

Дерево разработки Xentaur доступно через CVS. (пока что не анонимно)

%$ cvs -d :ext:igor@xgu.ru:/var/lib/cvs checkout xentaur

Вместо имени igor укажите другое имя пользователя.

[править] Изменение sudoers

Для того чтобы xentaur мог управлять машинами от имени пользователя xenomips, необходимо модифицировать файл /etc/sudoers на хост-системе (в домене 0):

xenomips    ALL=(ALL) NOPASSWD: /usr/sbin/xm, /sbin/ip, /usr/sbin/brctl

Icon-caution.gif

Такая защита с помощью sudo является очень слабой, поскольку её легко можно обойти воспользовавшись возможностями, например, команды xm.


[править] Настройка виртуальных машин из управляющей консоли xentaur

Пример 1. Установить имя хоста равное имени домена.

>>> for i in [1,2,3,4,5,6]:                                                  
      write_to(i,"\nena\nconf t\nhostname "+domains[i-1]+"\nexit\nexit\n")

Пример 2. Включить оба ethernet-интерфейса.

faX_up="""
ena
conf t
int fa0/0
no shutdown
exit
int fa1/0
no shutdown
exit
exit
exit
"""
for i in [1,2,3,4,5,6]:                                                  
      write_to(i,faX_up)

Пример 3. Установить адреса на интерфейсах

cisco_set_ip_on_int="""
\n\n\n
int fa%s/0
no ip address
ip address %s 255.255.255.0
no shutdown
exit
"""

quagga_set_ip_on_int="""
int eth%s
no ip address
ip address %s/24
no shutdown
exit
"""

doms=domains
command = cisco_set_ip_on_int
for dom in doms:
    i=domains.index(dom)+1
    write_to(i,"\nena\nconf t\n")
    j=0
    for br in  vbridges_table[dom]:
        write_to(i,command % (j, "192.168.%s.%s"%(bridges.index(br),i)))
        j+=1
    write_to(i,"\nend\nexit\n")

Пример 4. Включение OSPF для сети 192.168.0.0/26

write_to(domains,"\nena\nconf t\nrouter ospf\nnetwork 192.168.0.0 0.0.255.255 area 0\nend\n")

Для Cisco:

write_to(dyns,"\n\nena\nconf t\nrouter ospf 1\nnetwork 192.168.0.0 0.0.255.255 area 0\nend\n")

Для Quagga:

write_to(qua,"\n\nconf t\nrouter ospf\nnetwork 192.168.0.0/16 area 0\nend\n")


Пример 5. Другие базовые настройки

Настройки консоли, терминала и пароля на привелегированный режим для Cisco:

write_to(dyns,"\n\nena\nconf t\nline console 0\nlogging synchronous\nexec-timeout 6000\nno login\nend\n")

write_to(dyns,"\n\nena\nconf t\nline vty 0 15\nlogging synchronous\nexec-timeout 6000\nno login\nend\n")

write_to(dyns,"\n\nena\nconf t\nenable secret xentaur\nend\n")

Сохранение конфигурации:

write_to(domains, "\n\nena\ncopy run start\n\n")

write_to(domains, "\n\nena\nwr\n")

Отключение DNS для Cisco:

write_to(dyns,"\n\nconf t\nno ip domain-lookup\nend\n")

Перевод интерфесов в режим full duplex (по умолчанию half duplex) для Cisco:

write_to(dyns,"\n\nena\nconf t\nint fa0/0\nduplex full\nint fa1/0\nduplex full\nend\n")

Включение forwarding'а в Linux (предварительно нужно выйти из консоли Quagga с помощью Ctrl-x d; после завершения настройки возврат производится автоматически):

write_to(qua,"\necho 1 > /proc/sys/net/ipv4/ip_forward\nscreen -r\n")

[править] Примеры управления Xentaur из консоли ipython

Примеры:

Создание виртуальной машины Windows

win1=vm.windows_xp.new('win1')
win1.interfaces=[bridge[1], bridge[2]]
win1.create()

Создание кольца из десяти маршрутизаторов Quagga и одного Cisco.

bridge[0]=bridge.new()
for i in range(1,10):
    bridge[i]=bridge.new()
    bridge[i].run()
    quagga[i]=vm.quagga.new('quagga'+i) 
    quagga[i].interfaces=[bridge[i-1],bridge[i]]
    quagga[i].create()
cisco=vm.xenomips.new('cisco')
cisco.interfaces=[bridges[10],bridges[0]]


Изменение свойства соединения

Пусть виртуальный маршрутизатор cisco подсоединён к бриджу bridge1 с помощью связи link1.

   link1=cisco.link_to(bridge1)

Выключить связь:

   cisco.link_to(bridge1).down()

или

   link1.down()

Добавить в таблицу в домене 0 на соответствующую связь правило ebtables:

   link1.ebtables("правило ebtables")

Аналогично, но правило iptables:


Начать запись трафика, который передается через соединение link1, в файл link1.dump:

   link1.dump_start("link1.dump")

Остановить запись:

   link1.dump_stop("link1.dump")

Можно указать дополнительный фильтр трафика при записи:

   link1.dump_start("link1.dump", "host 192.168.1.1 and host 192.168.1.2 and icmp")

Выражение для фильтрации записывается в формате Berkeley Packet Filter.

Посмотреть список выполняющихся в настоящий момент записей:

   link1.dump_list()


Сделанный дамп трафика имеет двоичный формат tcpdump и может быть проанализирован с помощью tcpdump, wireshark, ettercap или другим аналогичным инструментом.


[править] Графический интерфейс

Требования к графическому интерфейсу:

  • Схема сети
  • Свойства машин
  • Консоль управления Dynalab
  • Консоль управления отдельными виртуальными системами
  • (возможно) Щелчок по машине позволяет открыть консоль управления этой машиной
  • В графическом интерфейсе должно быть обозначение различных типов машин
  • Возможность закрепления машин за определёнными координатами и возможность наложения карты на схему.
  • (возможно) В правом окне свойства машины или свойства линка.


Требования

Общие требования:

  • Динамическая реконфигурация машин и связей между машинами

Связи:

  • Состояние связей может описываться многочисленными характеристиками, в том числе:
    • Активностью (активна/неактивна)
    • Пропускной способностью (величина)
    • Потери (величина, 0..1)
  • Связи должны легко попадать под правила фильтрации, приоритезации трафика и других механизмов регулирования в базовой системе.

Интерфейс:

  • Должен быть удобный программный и командный интерфейс к системе.
  • Командный интерфейс должен содержать набор команд, необходимых для:
    • Добавления машины;
    • Удаления машины;
    • Реконфигурирования машины;
    • Останова машины;
    • Запуска машины;
    • Управления всеми характеристиками связей.

Поддержка машин различных типов:

Если известно, что машина запускается с определённой операционной системой внутри, должен быть доступен дополнительный программный интерфейс, использующий специфические возможности виртуальной машины.

Должен быть удобный интерфейс по конфигурированию машин.

Должна быть унифицированная возможность подключения к консоли каждой машины. Консоль может быть как текстовой, так и графической.


Масштабируемость:

  • Система должна быть распределённой и масштабируемой.
  • Распределённость. В качестве хост-системы может быть как одна система, так и множество связанных между собой систем. При этом должна быть возможность Live-переноса.
  • Масштабируемость. Должна быть разрешимой с помощью доступных средств (до 10 физических компьютеров с объёмом ОЗУ < 2G) задача эмуляции сети, которая в настоящий момент насчитывает до 200 систем.


[править] Xentaur 1: Топология [править] Задание

Несколько бездисковых станций загружаются по сети с центрального узла. Каждая из загрузившихся станций сообщает центральному узлу о завершении загрузки и своей текущей конфигурации. После того как загрузка завершена станция при необходимости загружает пользовательские домены.

Привязка доменов к физическим узлам задаётся в конфигурационном файле.

Запущенные домены соединяются в виртуальную сеть произвольной топологии.

Тополгия виртуальной сети задаётся в конфигурационном файле.

При построении топологии учесть, что в U-доменах Xen не может быть более трёх сетевых интерфейсов.

По каналам виртуальной сети может передаваться как тэгированный, так и не тэгированный трафик (тэгирование 802.1Q).

Топология сети должна визуализироваться.

[править] Quagga

Для того чтобы можно было сохранять конфигурацию quagga прямо из vtysh, необходимо в режиме конфигурирования (configure terminal) дать команду:

(config)# service integrated-vtysh-config

Для того чтобы отключить эту возможность, нужно дать команду:

(config)# no service integrated-vtysh-config

[править] Падает на платформе 2600

*** TLB (Load/Fetch) Exception ***
PC = 0x80008000, Cause = 0x00008008, Status Reg = 0x00408103
MIPS64 Registers:
  zr ($ 0) = 0x0000000000000000   at ($ 1) = 0x0000000000000000
  v0 ($ 2) = 0x0000000000008008   v1 ($ 3) = 0x0000000000408103
  a0 ($ 4) = 0x0000000000000002   a1 ($ 5) = 0x0000000000000000
  a2 ($ 6) = 0x0000000000000000   a3 ($ 7) = 0x0000000000000000
  t0 ($ 8) = 0xffffffff80008000   t1 ($ 9) = 0xffffffffa0000000
  t2 ($10) = 0xffffffff80003fd8   t3 ($11) = 0xffffffff80003fdf
  t4 ($12) = 0x0000000000000001   t5 ($13) = 0xfffffffffffffff8
  t6 ($14) = 0xffffffffb6001080   t7 ($15) = 0xffffffffbfc00000
  s0 ($16) = 0xffffffffbfc00000   s1 ($17) = 0xffffffffb6000000
  s2 ($18) = 0x0000000000000000   s3 ($19) = 0x0000000000000000
  s4 ($20) = 0x0000000000000000   s5 ($21) = 0x0000000000000000
  s6 ($22) = 0x0000000000000000   s7 ($23) = 0x0000000000000000
  t8 ($24) = 0x0000000000000000   t9 ($25) = 0x0000000000000000
  k0 ($26) = 0xffffffffbfc003e0   k1 ($27) = 0x0000000000000000
  gp ($28) = 0x0000000000000000   sp ($29) = 0xffffffff80007fc0
  fp ($30) = 0x0000000000000000   ra ($31) = 0xffffffffbfc0068c
  lo = 0x0000000000000000, hi = 0x0000000000000000
  pc = 0xffffffff80008000, ll_bit = 0
  Instruction: 9421fff0  lhu at,-16(at)

CP0 Registers:
  index      ($ 0) = 0x0000000000000000   random     ($ 1) = 0x000000000000000c
  entry_lo0  ($ 2) = 0x0000000000000000   entry_lo1  ($ 3) = 0x0000000000000000
  context    ($ 4) = 0x0000000000000000   pagemask   ($ 5) = 0x0000000000000000
  wired      ($ 6) = 0x0000000000000000   info       ($ 7) = 0x0000000020000000
  badvaddr   ($ 8) = 0xfffffffffffffff0   count      ($ 9) = 0x00000000017aa230
  entry_hi   ($10) = 0x0000000000000000   compare    ($11) = 0x000000000174b210
  status     ($12) = 0x0000000000408101   cause      ($13) = 0x0000000000008008
  epc        ($14) = 0xffffffff80008000   prid       ($15) = 0x0000000000002721
  config     ($16) = 0x0000000000c08ff0   ll_addr    ($17) = 0x0000000000000000
  watch_lo   ($18) = 0x0000000000000000   watch_hi   ($19) = 0x0000000000000000
  xcontext   ($20) = 0x0000000000000000   cp0_r21    ($21) = 0x0000000000000000
  cp0_r22    ($22) = 0x0000000000000000   cp0_r23    ($23) = 0x0000000000000000
  cp0_r24    ($24) = 0x0000000000000000   cp0_r25    ($25) = 0x0000000000000000
  ecc        ($26) = 0x0000000000000000   cache_err  ($27) = 0x0000000000000000
  tag_lo     ($28) = 0x0000000000000000   tag_hi     ($29) = 0x0000000000000000
  err_epc    ($30) = 0x0000000000000000   cp0_r31    ($31) = 0x0000000000000000

  IRQ count: 568, IRQ false positives: 545, IRQ Pending: 1
  Timer IRQ count: 568, pending: 1765, timer drift: 3

  Device access count: 1473343


Платформа и IOS:


if domain=='dyn8':
    platform='2691'
    ios_name='C2600-AD.BIN'


[править] Старая заготовка Xentaur

(чтобы не выбрасывать)

[править] Требования

Общие требования:

  • Динамическая реконфигурация машин и связей между машинами

Связи:

  • Состояние связей может описываться многочисленными характеристиками, в том числе:
    • Активностью (активна/неактивна)
    • Пропускной способностью (величина)
    • Потери (величина, 0..1)
  • Связи должны легко попадать под правила фильтрации, приоритезации трафика и других механизмов регулирования в базовой системе.

Интерфейс:

  • Должен быть удобный программный и командный интерфейс к системе.
  • Командный интерфейс должен содержать набор команд, необходимых для:
    • Добавления машины;
    • Удаления машины;
    • Реконфигурирования машины;
    • Останова машины;
    • Запуска машины;
    • Управления всеми характеристиками связей.

Поддержка машин различных типов:

Если известно, что машина запускается с определённой операционной системой внутри, должен быть доступен дополнительный программный интерфейс, использующий специфические возможности виртуальной машины.

Должен быть удобный интерфейс по конфигурированию машин.

Должна быть унифицированная возможность подключения к консоли каждой машины. Консоль может быть как текстовой, так и графической.

Графический интерфейс:

  • Схема сети
  • Свойства машин
  • Консоль управления Dynalab
  • Консоль управления отдельными виртуальными системами
  • (возможно) Щелчок по машине позволяет открыть консоль управления этой машиной
  • В графическом интерфейсе должно быть обозначение различных типов машин
  • Возможность закрепления машин за определёнными координатами и возможность наложения карты на схему.
  • (возможно) В правом окне свойства машины или свойства линка.

Масштабируемость:

  • Система должна быть распределённой и масштабируемой.
  • Распределённость. В качестве хост-системы может быть как одна система, так и множество связанных между собой систем. При этом должна быть возможность Live-переноса.
  • Масштабируемость. Должна быть разрешимой с помощью доступных средств (до 10 физических компьютеров с объёмом ОЗУ < 2G) задача эмуляции сети, которая в настоящий момент насчитывает до 200 систем.


[править] Xentaur 1 - пример топологии

Несколько бездисковых станций загружаются по сети с центрального узла. Каждая из загрузившихся станций сообщает центральному узлу о завершении загрузки и своей текущей конфигурации. После того как загрузка завершена станция при необходимости загружает пользовательские домены.

Привязка доменов к физическим узлам задаётся в конфигурационном файле.

Запущенные домены соединяются в виртуальную сеть произвольной топологии.

Топология виртуальной сети задаётся в конфигурационном файле.

При построении топологии учесть, что в U-доменах Xen не может быть более трёх сетевых интерфейсов.

По каналам виртуальной сети может передаваться как тэгированный, так и не тэгированный трафик (тэгирование 802.1Q).

Топология сети должна визуализироваться.


[править] Интерфейс пользователя

Основной интерфейс поьзователя -- управляющая консоль Xentaur.


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

При нажатии на изображение узла открывается консоль доступа к нему.

Она может иметь как графический (например, Windows, Linux), так и текстовый интерфейс (например, Linux, UNIX, IOS).

Управляещие консоли доступны и через оконный менеджер screen. Текстовые консоли в этом случае открываются в отдельных окнах screen, а графические --- во внешних, через screen они только активируются.

Графический интерфейс для управления конфигурацией сети и её параметрами в настоящий момент отсутствует. Однако, его относительно легко добавить, учитывая, что все основные операции по работе с виртуальной средой описаны в виде готовых функций, Возможно, он появится в дальнейшем.


[править] Идея с модификацией графического интерфейса

Можно попробовать поиграться с модификацией оконного менеджера compiz:

при переключении по cmd-s на экране появляется аксонометрическая проекция схемы сети, которая вращается и перемещается в соответствии с тем, какое окно выбрано.

Это поможет удобнее переключаться между управляющими консолями при переключении между узлами в малознакомой сети.

[править] Дополнительная информация

Xentaur
Xentaur

Инсталляция и использование Xentaur
Инсталляция | Консоль | Интеграция с реальной сетью | Описание сети
(репозиторий: http://xgu.ru/hg/xentaur)
Компоненты
Узлы: Xen | Xenomips (Dynamips + Pixemu + Xen) | Qemu
Сеть: linux bridges | ebtables | vnet | gvpe | vde | QoS в Linux | iptables
Управление: IPython | GNU Screen
Источник — «http://xgu.ru/wiki/xentaur/todo»