7 июл. 2010 г.

Tomtel и Synterra: неравный бой

С одним из томских провайдеров, а именно с Томтелом (AS34145) сегодня произошла интересная (но для его пользователей — печальная) история. Достоверных сведений о ситуации у меня нет, поэтому написанное ниже по большей части предположения.

Началось все, по видимому, с того, что они договорились с Synterra либо на обмен трафиком, либо на транзит.

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

Проблемы начались тогда, когда Synterra начала анонсировать их сеть в мир как доступную через себя. Многие граничные маршрутизаторы выбрали этот маршрут, и трафик в Томтел даже изнутри томской сети пошел через Синтерру. Примерно вот так:

[dmbaturin@langley /home/dmbaturin]$traceroute 77.106.109.140
traceroute to 77.106.109.140 (77.106.109.140), 30 hops max, 40 byte packets
 1  10.91.19.1 (10.91.19.1)  0.222 ms  0.142 ms  0.133 ms
 2  erx320-1.bbn.tomsknet.ru (217.18.128.88)  9.708 ms  9.694 ms  9.679 ms
 3  ge-5-0-2.tom-dr1.ncc.sibirtelecom.ru (213.228.118.205)  9.581 ms  7.173 ms  7.114 ms
 4  213.228.119.30 (213.228.119.30)  23.068 ms  23.045 ms  23.030 ms
 5  xe-0-1-0.nvsk-rgr4.sib.ip.rostelecom.ru (87.226.171.117)  23.025 ms  23.006 ms  22.988 ms
 6  xe-7-3-0.m7-ar4.msk.ip.rostelecom.ru (87.226.133.169)  82.841 ms xe-8-3-0.m7-ar4.msk.ip.rostelecom.ru (87.226.133.53)  66.832 ms  66.815 ms
 7  79.133.94.66 (79.133.94.66)  82.772 ms  81.172 ms  83.229 ms
 8  nsk-d2-hq-ae2.main.synterra.ru (83.229.225.127)  151.201 ms  155.170 ms  155.153 ms
 9  GW-TomTel.main.synterra.ru (83.229.170.18)  147.128 ms  146.396 ms  153.258 ms
10  * * *
11  * * *
12  * * *

В итоге Томтел не полностью не был доступен в течение нескольких часов.

Мораль

Будьте осторожны с анонсами!


Полный текст сообщения

23 июн. 2010 г.

Vyatta и беспроводной модем

Сегодня утром мне пришла в голову мысль попробовать заявленную поддержку беспроводных модемов во Vyatta. Собственно модема под рукой не оказалось, поэтому я подключил телефон Nokia к маршрутизатору по USB.
Выбрал режим подключения «PC Suite», в режиме «Накопитель» нокии работают как простой USB mass storage device. Телефон определился как /dev/ttyACM0, реакция на AT-команды была проверена путем подключения через minicom.

Практическая ценность такого мероприятия в наших условиях, конечно, сомнительна, разве что использовать как резервный канал для управления на случай глобальных проблем с основным. В местах, где есть дешевые 3G-провайдеры это существенно актуальнее.

Приступаем к настройке

Беспроводные модемы настраиваются в set interfaces wirelessmodem, сами интерфейсы должны иметь имя wlmX. Для работы достаточно указать опции «device <имя устройства>» и «network <название сети>». И вот тут начинаются проблемы.

Дело в том, что по умолчанию там присутствуют только сети AT&T, Verizon и SC1. Видимо, это те, которыми пользуются сами авторы и на которых тестировали функциональность. Для моей TELE2 там ничего нет. А от сети зависят AT-команды, посылаемые модему для подключения.

Создаем новую сеть

Раз нашей сети нет, создадим ее сами. Находим в исходном коде, что файлы описаний сетей лежат в /opt/vyatta/share/ppp/network. Путем чтения сайта оператора связи и общения с тех. поддержкой узнаем подробности о нужных AT-командах и делаем свой файл (в моем случае пришлось лишь немного поправить настройки AT&T). Вот содержимое файла /opt/vyatta/share/ppp/network/tele2ru

ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT 'NO CARRIER' ABORT DELAYED
'' AT
OK ATZ
OK  'AT+CGDCONT=1,"IP","internet.tele2.ru"'
OK ATD*99#
CONNECT ''

Создаем интерфейс

Вот теперь действительно можно приступать. Настраиваем интерфейс:

dmbaturin@rekki# set interfaces wirelessmodem wlm0 device ttyACM0

dmbaturin@rekki# set interfaces wirelessmodem wlm0 network tele2ru

dmbaturin@rekki# commit

dmbaturin@rekki# show interfaces wirelessmodem
 wlm0 {
     device ttyACM0
     network tele2ru
 }

После commit он подключится автоматически, что можно увидеть в системных сообщениях.

Jun 23 16:25:41 vyatta pppd[29193]: pppd 2.4.4 started by root, uid 0
Jun 23 16:25:45 vyatta pppd[29193]: Connect: ppp9 <--> /dev/ttyACM0
Jun 23 16:25:45 vyatta vyatta-zebra[2915]: interface ppp9 index 822  added.
Jun 23 16:25:45 vyatta pppd[29193]: PAP authentication succeeded
Jun 23 16:25:47 vyatta vyatta-zebra[2915]: warning: PtP interface ppp9 with addr 77.216.137.187/32 needs a peer address
Jun 23 16:25:47 vyatta vyatta-zebra[2915]: interface index 822 was renamed from ppp9 to wlm0
Jun 23 16:25:47 vyatta vyatta-ripngd[2919]: interface delete ppp9 index 822 flags 0x1090 metric 1 mtu 1500
Jun 23 16:25:47 vyatta vyatta-ripd[2917]: interface delete ppp9 index 822 flags 0x1090 metric 1 mtu 1500
Jun 23 16:25:47 vyatta vyatta-zebra[2915]: interface wlm0 index 822 changed .
Jun 23 16:25:47 vyatta pppd[29193]: Cannot determine ethernet address for proxy ARP
Jun 23 16:25:47 vyatta pppd[29193]: local  IP address 77.216.137.187
Jun 23 16:25:47 vyatta pppd[29193]: remote IP address 10.6.6.6
Jun 23 16:25:47 vyatta pppd[29193]: primary   DNS address 193.12.150.26

При желании его можно подключить или отключить вручную, используя команды операционного режима «connect interface wlm0» и «disconnect interface wlm0» соответственно.

На всякий случай проверим правильность работы. Добавим статический маршрут до чего-нибудь редко используемого (чтобы не допустить прохождения основного трафика через дорогое соединение) и посмотрим трассировку маршрута до него.

dmbaturin@rekki# set protocols static interface-route 193.12.93.139/32 next-hop-interface wlm0
[edit]
dmbaturin@rekki# commit
[edit]
dmbaturin@rekki# run traceroute www.tomsk.tele2.ru
traceroute to www.tomsk.tele2.ru (193.12.93.139), 30 hops max, 40 byte packets
 1  spb-c7606-rtk.vlan411.swip.net (212.151.224.17)  630.295 ms  646.184 ms  666.634 ms
 2  kst-core-1.gigabiteth9-0-0.swip.net (212.151.224.49)  686.061 ms  706.023 ms  745.949 ms
 3  kst-ncore-1.tengigabiteth2-1.swip.net (130.244.52.106)  765.912 ms  790.003 ms  805.800 ms
 4  kst-spe-1.tengigabiteth3-4.swip.net (130.244.206.118)  805.747 ms  805.694 ms  825.622 ms
 5  kst-spe-1.tengigabiteth3-4.swip.net (130.244.206.118)  825.569 ms !X  826.878 ms !X *

Проблемы

В целом, использовать беспроводные модемы с Vyatta можно. Были обнаружены только два несущественных бага, первый: добавить description и прочие опции можно только после создания интерфейса; второй: при подключении не создается файл журнала.

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

Если у кого-то будет желание, можете прислать мне настройки подключений для других сетей.


Полный текст сообщения

30 мар. 2010 г.

Vyatta Core 6, release

Vyatta 6 наконец вышла! Скачать, как и обычно, можно здесь, доступна и документация.

В полном тексте сообщения есть список изменений с примерами использования.

Теперь уже можно с уверенностью говорить, что изменилось. А именно:

  • Реализована поддержка NetFlow и sFlow. Смотреть в «set system flow-accounting.
  • Добавлен межсетевой экран для IPv6.

    Наборы правил создаются через «set firewall ipv6-name NAME». Сами правила мало чем отличаются от правил для IPv4, просто там можно писать IPv6-адреса и ряд специфичных для него протоколов (вроде ICMPv6). Живой пример:

       rule 20 {
         action accept
         description "Allow SMTP access from the Internet"
         destination {
             address 2001:470:1f0b:a80::10
             port smtp
         }
         protocol tcp
      }
      
  • Появился межсетевой экран, основанный на «зонах безопасности».

    Теперь можно определить зоны (например, Интернет и локальная сеть), присвоить их зонам и указать наборы правил для фильтрации трафика между зонами. Удобно, если интерфейсов много.

  • Появилась поддержка 802.11 WiFi

    Может работать в режиме точки доступа или клиента, в том числе ходить за аутентификацией к RADIUS-серверу. Смотреть в «set interfaces wireless wlanX ...».

  • Появились политики маршрутизации для IPv6.

    Описываются в «set policy ipv6 access-list6» и «set policy ipv6 prefix-list6», могут быть использованы в картах маршрутизации наравне с обычными.

  • К числу протоколов маршрутизации добавили OSPFv3.

    Поддержка пока не совсем полная, но основное работает. Это довольно сильно переработанный OSPF, который к тому же поддерживает IPv6.

  • Добавили несколько новых алгоритмов QoS

    Пятой вьятты под рукой нет, поэтому сказать, какие именно из них новые так с ходу не могу. Но rate-limit (он поддерживает burst'ы) и network-emulator (эмулирует глобальную сеть, внося латентность, повреждения и потери пакетов и прочие ужасы) точно в VC5 не было.

  • Появилась «бинарная установка»

    Суть ее в том, что кроме классического метода с распаковкой образа на диск, теперь можно поставить сам образ, который будет распакован при загрузке (примерно как это делается в LiveCD). Все изменения хранятся отдельно от образа. Но главное, что теперь можно добавить новый образ без переустановки всей системы, что очень удобно при обновлении, тестировании или участии в разработке (можно легко сравнить разные образы или откатится, если новый не понравился).

    Чтобы установить новым методом, используется «install-image», а чтобы добавить новый образ, «add system image <путь>». Выбрать образ для загрузки можно через «set system image».

  • Теперь можно руками указать опцию DHCP-сервера, если не хватило стандартных команд. «set service dhcp-server global-option "..."». Синтаксис опций унаследован от самого dhcpd.conf, они передаются в его конфиг без изменений.

Кроме технических нововведений есть и не менее интересные организационные. В частности, смена названия Vyatta Community на Vyatta Core означает то, что теперь доступная по подписке версия будет не параллельной веткой, а просто будет содержать дополнительные компоненты (в этой версии такими будут API удаленного доступа, аутентификация на сервере TACACS+ и коммерческая система фильтрации URL вместо SquidGuard).

Еще собираются убрать несвободные драйверы интерфейсов T/E-carrier, V.35 и DSL. Меня это не особо огорчает, поскольку V.35 остался только в унаследованных системах, E-carrier для данных никто не применяет, а карты DSL-портов у нас мало кто в реальности видел. Но если кому сильно захочется, все эти драйверы лежат на сайте производителя (Sangoma). В США T1 почему-то широко применяется для подключения корпоративных пользователей

Заключение

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

P.S. А еще директор по маркетингу Том МакКафферти оценил и выложил мой плакат для серии Ads not fit for print. Лежит здесь на самом верху: http://www.vyatta.org/community/ads.

Полный текст сообщения

26 февр. 2010 г.

Vyatta 6 Beta

Vyatta 6.0 Beta доступна для загрузки. Там же, где и обычно: http://www.vyatta.org/downloads. Тестируем и ждем финального релиза.


Полный текст сообщения

3 февр. 2010 г.

Пример настройки BGP во Vyatta

Не так давно один хороший человек попросил помочь с настройкой BGP во Vyatta 5.0.2. Этот маршрутизатор используется как граница сети провайдера VoIP. Почти все адреса и номера автономных систем заменены на абстрактные, на всякий случай. Входные данные следующие:

  • Два соседа, оба принимают анонс одной подсети /24 и одного адреса. Один из них (Cogent, если кому интересно) анонсирует значительную часть интернета, второй (Digiport) только свои сети и маршрут по умолчанию.
  • Cogent использует разные маршрутизаторы для приема и выдачи анонсов, и требует использования выделенного адреса в качестве источника.
  • Маршрутизатору Cogent, который отдает маршруты, не должно ничего анонсироваться.
  • В сети, которые анонсирует второй сосед, нужно ходить через него, даже если в анонсах первого они тоже есть.

Обозначим нашу сеть x.x.x.0/24; маршрутизатор Cogent, отдающий анонсы y.y.y.y; принимающий анонсы z.z.z.z; адрес источника для принимаемых нами маршрутов t.t.t.t; адрес второго соседа w.w.w.w. Номер нашей автономной системы обозначим 65501, второго соседа за 65502, Cogent оставим как он есть — 174.

Приступаем к настройке

Активируем процесс BGP, указываем соседей и анонсируемые сети.

edit protocols bgp 65501
set neighbor y.y.y.y remote-as 174    # Отдает нам маршруты из Cogent
set neighbor z.z.z.z remote-as 174    # Принимает наши маршруты в Cogent
set neighbor w.w.w.w remote-as 65502  # Второй сосед
set network x.x.x.0/24                # Наша сеть
set network t.t.t.t/32                # Адрес источника маршрутов из Cogent
exit
commit

Теперь надо что-то сделать с адресом источника маршрутов. Учитывая, что ни для чего больше он не используется, его обычно вешают на петлевой интерфейс (в Cisco это было бы единственным способом, поскольку в качестве источника анонсов там указывался интерфейс, а не адрес).

set interfaces loopback lo address t.t.t.t/32
commit

Настройка политик маршрутизации

Учитывая, что соседи хотят видеть в наших анонсах только нашу сеть, а один из соседей вовсе не должен ничего получать, нам нужно настроить политики маршрутизации. Мы сделаем это с помощью «карт маршрутов» (route-map).

Сначала нужно определить списки сетей (prefix-list), которые будут использованы. Вот список наших сетей:

edit policy prefix-list AdvertisedRoutes
set rule 1 action permit
set rule 1 prefix t.t.t.t/32
set rule 2 action permit
set rule 2 pefix x.x.x.0/24
exit
commit

И соответствующая карта маршрутов: анонсируем сети из списка AdvertisedRoutes, не анонсируем ничего другого.

edit policy route-map Advertise
set rule 1 action permit
set rule 1 match ip address prefix-list AdvertisedRoutes
set rule 2 action deny
exit
commit

Карта маршрутов, запрещающая анонсирование чего бы то ни было:

edit policy route-map NoAdvertise
set rule 1 action deny
exit
commit

Теперь создадим карту, которая будет увеличивать вес маршрутам из Digiport, чтобы при наличии в анонсах обоих маршрут через него считался приоритетным.

edit policy route-map DigiportPrioritize
set rule 1 action permit
set rule 1 set weight 10 # Устанавливаем вес 10, по умолчанию он 0
exit
commit

Настройка соседей

Теперь мы закончили с политикой, и можно настроить самих соседей. Начнем с того, который отдает нам маршруты Cogent.

edit protocols bgp 65501
set neighbor y.y.y.y ebgp-multihop 5
set neighbor y.y.y.y route-map export NoAdvertise
set neighbor y.y.y.y update-source t.t.t.t
exit
commit

Параметр ebgp-multihop отвечает за максимальное расстояние до маршрутизатора, если он не является соединенным напрямую. Параметр update-source определяет, какой адрес будет указан источником анонсов. Опция route-map export указывает карту маршрутов, которая будет применена к исходящим анонсам (для входящих нужно заменить там export на import).

Теперь переходим к тому, который принимает анонсы.

edit protocols bgp 65501
set neighbor z.z.z.z route-map export Advertise
exit
commit

И закончим это все вторым соседом.

edit protocols bgp 65501
set neighbor w.w.w.w route-map export Advertise
set neighbor w.w.w.w route-map import DigiportPrioritize
exit
commit

Настроим маршрут по умолчанию через Cogent, чтобы ходить через него в те сети, которые он не анонсирует, хотя они через него доступны транзитом. (пусть адрес маршрутизатора будет q.q.q.q)

set protocols static route 0.0.0.0/0 next-hop q.q.q.q

Фрагмент конфига

Теперь можно полюбоваться на проделанную работу.

policy {
    prefix-list AdvertisedRoutes {
        rule 1 {
            action permit
            prefix t.t.t.t/32
        }
        rule 2 {
            action permit
            prefix x.x.x.0/24
        }
    }
    route-map Advertise {
        rule 1 {
            action permit
            match {
                ip {
                    address {
                        prefix-list Advertised
                    }
                }
            }
        }
        rule 2 {
            action deny
        }
    }
    route-map DigiportPrioritize {
        rule 1 {
            action permit
            set {
                weight 10
            }
        }
    }
    route-map NoAdvertise {
        rule 1 {
            action deny
        }
    }
}
protocols {
    bgp 65501 {
        neighbor y.y.y.y {
            ebgp-multihop 5
            remote-as 174
            route-map {
                export NoAdvertise
            }
            update-source t.t.t.t
        }
        neighbor z.z.z.z {
            remote-as 174
            route-map {
                export Advertise
            }
        }
        neighbor w.w.w.w {
            remote-as 65502
            route-map {
                export Advertise
                import DigiportPrioritize
            }
        }
        network t.t.t.t/32 {
        }
        network x.x.x.0/24 {
        }
    }
    static {
        route 0.0.0.0/0 {
            next-hop q.q.q.q {
            }
        }
    }
}

Смотрим результат

Vyatta имеет ряд полезных команд операционного режима, позволяющих посмотреть на происходящее.

vyatta@vyatta:~$ show ip bgp neighbors y.y.y.y advertised-routes 
vyatta@vyatta:~$ show ip bgp neighbors z.z.z.z advertised-routes 
BGP table version is 0, local router ID is t.t.t.t
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> t.t.t.t/32       xx.xxx.xx.xx             1         32768 i
*> x.x.x.x.0/24     xx.xxx.xx.xx             1         32768 i

Total number of prefixes 2
vyatta@vyatta:~$ show ip bgp neighbors w.w.w.w advertised-routes 
BGP table version is 0, local router ID is t.t.t.t
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> t.t.t.t/32       zzz.zz.z.zzz             1         32768 35978 35978 35978 35978 i
*> x.x.x.0/24       zzz.zz.z.zzz             1         32768 35978 35978 35978 35978 i

Total number of prefixes 2

Как мы убедились с помощью команды show ip bgp neighbor <адрес> advertised-routes, первому не анонсируется ничего, а остальным наша подсеть и адрес источника. Всех соседей можно увидеть с помощью show ip bgp neighbors.

Список всех полученных маршрутов можно увидеть в show ip bgp. Посмотрим небольшой фрагмент.

BGP table version is 0, local router ID is t.t.t.t
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 0.0.0.0          www.ww.w.www                          10 31846 ?
*> 4.23.112.0/24    xx.xxx.xx.xxx         5010             0 174 21889 i
*> 4.23.113.0/24    xx.xxx.xx.xxx         5010             0 174 21889 i
*> 4.23.114.0/24    xx.xxx.xx.xxx         5010             0 174 21889 i
*> 4.36.118.0/24    xx.xxx.xx.xxx         5010             0 174 21889 i
*> 4.59.23.0/24     xx.xxx.xx.xxx        36990             0 174 33042 i
*> 4.79.98.8/30     www.ww.w.www                          10 31846 i
*> 4.79.248.0/24    xx.xxx.xx.xxx         1000             0 174 12180 12180 12180 12180 12180 i

Как видно, вес у маршрутов от второго соседа действительно поменялся.

С помощью show ip bgp summary можно узнать некоторую общую статистику.

vyatta@vyatta:~$ show ip bgp summary 
BGP router identifier t.t.t.t, local AS number 65501
RIB entries 73927, using 4620 KiB of memory
Peers 3, using 7560 bytes of memory

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
y.y.y.y         4   174  331654   30759        0    0    0 01w1d03h    38882
z.z.z.z         4   174   30540   30764        0    0    0 01w1d03h        1
w.w.w.w         4 65502   61550   61503        0    0    0 4d07h43m      159

Total number of neighbors 3

С помощью show ip route можно убедиться, что наши маршруты действительно попали в FIB. Там они имеют префикс B.

Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

B   0.0.0.0/0 [20/0] via www.ww.w.www, 4d07h49m
S>* 0.0.0.0/0 [1/0] via yy.yyy.yy.yyy, eth1
B>* 4.23.112.0/24 [20/5010] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h
B>* 4.23.113.0/24 [20/5010] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h
B>* 4.23.114.0/24 [20/5010] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h
B>* 4.36.118.0/24 [20/5010] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h
B>* 4.59.23.0/24 [20/36990] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h

Заключение

Настроенный маршрутизатор уже несколько недель отлично выполняет свои задачи (хотя в организационном плане мы с этими провайдерами утомились общаться). Владелец заметил огромный прирост производительности в сравнении с Cisco 2621, который раньше стоял на этом месте.

Надеюсь, этот пример настройки окажется кому-то полезным.


Полный текст сообщения

6 янв. 2010 г.

Небольшой тест Vyatta с BGP

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

В качестве тестового стенда намеренно был выбран мой домашний маршрутизатор, работающий на достаточно слабом и не предназначенном для подобных целей аппаратном обеспечении: Intel Atom 330 (напаянный на материнскую плату D945GCLF2) с гигабайтом памяти DDR2. В эксперименте согласился поучаствовать один хороший человек, у которого на LINX стоит маршрутизатор, с которым я и установил BGP-сессию.

Настройки маршрутизаторов

Конфигурация моей стороны:
dmbaturin@rekki# show protocols bgp 
 65531 {
     neighbor x.x.x.x {
         ebgp-multihop 255
         password XXXXXXXX
         remote-as XXXXX
     }
 }

dmbaturin@rekki# show firewall name InternetToRouter rule 60
 action accept
 destination {
     port 179
 }
 protocol tcp
 source {
     address x.x.x.x
 }

Конфигурация его стороны (показаны только настройки меня в качестве соседа):

description "Vyatta - dmbaturin test"
disable-connected-check
ebgp-multihop 255
maximum-prefix 1
password XXXXXXXX
prefix-list {
     import none
  }
remote-as 65531
route-map {
     import dmbaturin-test-in
  }
update-source x.x.x.x
route-server-client

Как видно, настройки весьма просты (про настройку BGP во Vyatta я еще напишу, но позже), но для тестирования самой возможности их хватит.

Приступаем к тестированию

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

dmbaturin@rekki# run show ip bgp summary 
BGP router identifier 10.91.19.1, local AS number 65531
RIB entries 565769, using 35 MiB of memory
Peers 1, using 2520 bytes of memory

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
x.x.x.x         4 XXXXX   98626    1034        0    0    0 01:13:40   305133

Total number of neighbors 1

dmbaturin@rekki# run show ip bgp memory  
565825 RIB nodes, using 35 MiB of memory
305132 BGP routes, using 9535 KiB of memory
6 Nexthop cache entries, using 96 bytes of memory
56290 BGP attributes, using 2419 KiB of memory
4904 BGP extra attributes, using 345 KiB of memory
53019 BGP AS-PATH entries, using 621 KiB of memory
53064 BGP AS-PATH segments, using 622 KiB of memory
3 BGP community entries, using 48 bytes of memory
2 peers, using 5040 bytes of memory
23 hash tables, using 460 bytes of memory
109331 hash buckets, using 1281 KiB of memory

dmbaturin@rekki# run show ip bgp|count  
305152

Как видно, анонсы были успешно приняты. Посмотреть чистую пропускную способность на этом всем по ряду причин было проблематично: дублирование маршрута по умолчанию пришедшими из BGP (посколько соединение не было прямым), PPPoE, довольно развесистые правила межсетевого экрана и не сильно стабильная скорость доступа в городскую сеть. Но 20 с лишним мегабит маршрутизатор в этих условиях выдерживал вполне уверенно, обычно скорость бывает 40-60. Части кривых условий можно было избежать, но поскольку тест проводился ради интереса, я не особо стремился это сделать.

Заключение

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


Полный текст сообщения

1 янв. 2010 г.

Технические средства организации совместной работы

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

Тем не менее, эти средства (по крайней мере у нас) применяются в основном крупными компаниями, где без них работать было бы вовсе проблематично. А некоторые из них используют почти исключительно ИТ-специалисты, хотя в других областях их вполне можно применять. Здесь я попытался показать эти средства и их возможности понятным неспециалисту языком.

Списки рассылки

Исторически первое средство, но все еще не потеряло своей актуальности. Идея в том, что за некий адрес электронной почты отвечает программа, которая обеспечивает управление подпиской и рассылку писем всем участникам.

Тот, кто желает подписаться, отправляет на ее адрес (например, developers@verycoolproject.org) письмо с командой подписки (обычно subscribe). В любой момент он может таким же образом отказаться от своей подписки. Все письма, отправленные на этот адрес, автоматически пересылаются всем подписавшимся. Существуют средства для создания архивов списка рассылки.

Пример архива списка рассылки на mail-archive.com:

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

Одной из самых распространенных программ для организации списков рассылки является Mailman.

Системы коллективной работы (Groupware)

У этих систем уже существенно большая функциональность. Обычно они содержат:
  • Возможность обмена сообщениями между участниками;
  • Хранение и обмен файлами;
  • Планирование событий с привязкой к календарю;
  • Составление расписания участников и поиск свободного времени в нем;
  • Разграничение прав доступа участников;

Это весьма широкий класс программ, и функциональность может сильно различаться. Какие-то из них могут включать онлайн-редактор документов (Feng Office, Google Apps), собственный почтовый сервер (например, Zimbra Collaboration Suite и Microsoft Exchange), сервер обмена мгновенными сообщениями (Novell GroupWise), или иметь вовсе необозримый набор функций (IBM LotusNotes).

Календарь с назначенным событием в Feng Office:

Некоторые программы этого типа:

Системы контроля версий

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

В итоге приобретаются следующие возможности:
  • Просмотреть файл в том виде, в каком он был, например, неделю назад;
  • Откатить изменения, если они оказались неудачными;
  • Избежать конфликта, если несколько участников изменяли в файле одно и то же;
  • Создавать различные ветки проекта или соединять несколько веток в одну;
  • Предоставить доступ всем участникам к самым свежим изменениями друг друга;
  • Минимизировать вред от случайного удаления или повреждения файлов на компьютере каждого участника;

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

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

Распространенные системы контроля версий:

Системы отслеживания ошибок

Они тоже пришли из разработки программ, и используются там для координации работы по исправлению ошибок. Тем не менее, слово «ошибка» можно смело заменить на «проблема». Суть их в том, что один человек создает запись о проблеме (например, «Не работает функция X»). Он пишет ее описание, указывает где конкретно она возникает (файл, программа или ее часть или что-то подобное) и указывает ее срочность (обычно в стиле «Пожелание», «Незначительная проблема», «Серьезная проблема», «Критическая проблема»).

После этого решение проблемы может быть назначено кому-то из участников. По мере работы над проблемой возможно ее обсуждение и выставление статуса (например, «Решена»).

Некоторые из систем отслеживания ошибок:

Wiki

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

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

Некоторые wiki-движки:

Заключение

Я очень надеюсь, что пользователи поймут, что столь привычные ИТ-специалистам инструменты весьма удобны и полезны, и тоже начнут их использовать.


Полный текст сообщения

22 дек. 2009 г.

Linux и IPv6

В этой статье мы рассмотрим технические вопросы использования IPv6 под Linux. Многое является общим для всех UNIX, но есть и специфичные для Linux вещи, их я постарался отметить явно. Мы увидим, что нужно поменять в настройках распространенных клиентских и серверных программ для их корректной работы с IPv6.

Часть первая, теоретическая

Прежде всего, следует пояснить суть IPv6. Он является развитием IPv4, преимущественно используемого сейчас для передачи данных в Интернете, и тоже является протоколом сетевого уровня. Все протоколы транспортного и более высоких уровней прозрачно работают поверх него.

Адреса IPv6 в четыре раза длиннее IPv4, то есть содержат 16 байт. Они записываются в виде восьми групп по четыре шестнадцатеричных цифры. Например, 2001:0db8:1a2b:3c4d:005f:0000:0000:0001. Незначащие нули могут быть опущены: 2001:db8:1a2b:3c4d:5f:0:0:1. Если две или более группы цифр состоят только из нулей, то их можно заменить на «::»: 2001:db8:1a2b:3c4d:5f::1.

Существует несколько адресов и сетей специального назначения. Вот часть из них:

Адрес Назначение
:: Неопределенный адрес, аналог 0.0.0.0. Все IPv6 адреса обозначаются как ::/0
::1/128 localhost, аналог 127.0.0.1
fe80::/10 Link local. Адреса для использования в пределах сегмента локальной сети, аналог 169.254.0.0/16
fc00::/7 Unique local. Адреса для использования в пределах локальной сети, аналог 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16.
ff00::/8 Multicast, аналог 224.0.0.0/4
2001:db8::/32 Зарезервировано для документации и примеров. Что-то вроде example.com

Для передачи IPv6-трафика по существующим IPv4-соединениям существует несколько протоколов инкапсуляции, среди них 6in4 и 6to4. Они примерно идентичны по функциональности.

Часть вторая, практическая

Где взять?

Понятно, что экспериментировать с IPv6 в пределах локальной сети не особо интересно. Однако непосредственно его сейчас почти никто из провайдеров не предоставляет. Но есть ряд сервисов, предоставляющий IPv6 через туннель. Вот несколько таких сервисов:

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

Настраиваем туннель.

Это касается только Linux, под другими операционными системами набор команд будет другим. Хотя принцип тот же.

Все последующие действия нужно выполнять от имени суперпользователя (root).

В новых дистрибутивах ядро обычно поддерживает IPv6. Если поддержка собрана в виде модуля и он по умолчанию не загружается, его нужно загрузить (modprobe ipv6). В случае если поддержка отсутствует (в таких случаях ip будет выдавать ошибки в стиле ioctl: No such device), придется собирать самому — это уже выходит за рамки данной статьи.

# Создаем туннель, используя протокол SIT (Simple Internet Transition, он же 6in4)
ip tunnel add tun0 mode sit remote <адрес сервера> local <адрес локальной машины> ttl 255 
# Поднимаем его интерфейс
ip link set tun0 up
# Назначаем ему адрес
ip addr add <ваш IPv6-адрес>/<длина префикса> dev tun0
# Добавляем маршрут к IPv6-сетям по умолчанию через него
ip route add ::/0 dev tun0

Теперь можно посмотреть в ip links show, или в ifconfig. Вы должны увидеть там свой интерфейс. Если вы фильтруете исходящие соединения, то в правилах межсетевого экрана нужно разрешить протокол 41 (SIT).

 iptables -A OUTPUT -p 41 -j ACCEPT

Чтобы туннель поднимался автоматически при загрузке машины, добавьте эти команды в /etc/init.d/rc.local или его аналог в вашем дистрибутиве.

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

Если у вас более одного компьютера, и туннель поднимается с маршрутизатора сети, то потребуется настройка адресов на сетевых интерфейсах. Прописать их разово можно посредством ifconfig ethX /<длина префикса>, но тогда придется делать это каждый раз. Гораздо удобнее прописать эти настройки в /etc/sysconfig/network, чтобы они применялись при загрузке.

Имейте в виду, что для локальной сети нужно использовать не ту подсеть, из которой адреса у туннеля, а другую. Hurricane Electric указывает ее как «routed /64». Это связано с тем, что первая сеть считается соединенной с интерфейсом туннеля, и трафик к ней тоже пойдет через туннель, а не локальную сетевую карту.

Под RHEL/CentOS нужно добавить в файл настроек интерфейса (/etc/sysconfig/networking/ifcfg-ethX) строки:

IPV6INIT=yes
IPV6ADDR=<адрес>/<длина префикса>

Похоже, что адрес лучше указывать в развернутом виде (без сокращений). Под openSuSE нужно добавить /etc/sysconfig/network/ifcfg-ethX строки:

IPADDR_0='<адрес>/<длина префикса>'
LABEL_0='IPv6'

Тут сокращенный адрес использовать точно можно. Чтоб применить изменения, выполните service network restart.

Не забудьте прописать маршрут по умолчанию для локальных машин. Например, ip route add ::/0 via <адрес маршрутизатора>. На самом маршрутизаторе нужно разрешить маршрутизацию IPv6, прописав в /etc/sysctl.conf переменную net.ipv6.conf.all.forwarding=1.

Диагностические утилиты

После того, как мы закончили с настройкой сети, нужно проверить ее работоспособность. Для IPv6 существует все те же инструменты диагностики, что и для IPv4, но их имена несколько отличается. Использование же ничем не отличается от обычных.

Аналог ping называется ping6.

[dmbaturin@zax /home/dmbaturin]$ping6 ipv6.google.com
PING ipv6.google.com(2a00:1450:8001::68) 56 data bytes
64 bytes from 2a00:1450:8001::68: icmp_seq=1 ttl=55 time=145 ms
64 bytes from 2a00:1450:8001::68: icmp_seq=2 ttl=55 time=149 ms
^C
--- ipv6.google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 145.769/147.671/149.573/1.902 ms

Аналог traceroute называется traceroute6.

[dmbaturin@zax /home/dmbaturin]$traceroute6 k.root-servers.net
traceroute to k.root-servers.net (2001:7fd::1), 30 hops max, 40 byte packets using UDP
 1  gateway.baturin.org (2001:470:1f0b:a80::1)  0.126 ms   0.091 ms   0.078 ms
 2  dmbaturin-1.tunnel.tserv6.fra1.ipv6.he.net (2001:470:1f0a:a80::1)  137.634 ms   140.468 ms   143.404 ms
 3  gige-g2-4.core1.fra1.he.net (2001:470:0:69::1)  142.312 ms   141.200 ms   140.096 ms
 4  10gigabitethernet1-4.core1.ams1.he.net (2001:470:0:47::1)  147.056 ms   145.959 ms   144.855 ms
 5  g00.router.ams-ix.k.ripe.net (2001:7f8:1::a502:5152:1)  140.678 ms   138.552 ms   141.341 ms
 6  k.root-servers.net (2001:7fd::1)  140.147 ms   139.015 ms   137.826 ms

Многие команды понимают опции -6 и -4, которые указывают явно использовать IPv6 или IPv4 соответственно. Например:

[dmbaturin@zax /home/dmbaturin]$nmap -6 2001:470:1f0b:a80::15
Starting Nmap 5.00 ( http://nmap.org ) at 2009-12-22 09:26 NOVT
Interesting ports on vyatta.tomsk.ru (2001:470:1f0b:a80::15):
Not shown: 994 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
53/tcp   open  domain
80/tcp   open  http
389/tcp  open  ldap
443/tcp  open  https
8443/tcp open  https-alt
Nmap done: 1 IP address (1 host up) scanned in 0.35 seconds

Клиентские программы

Для клиентских программ никакой особой настройки обычно не требуется. У меня точно работают с ним Firefox, Opera, pidgin и irssi. Единственное что нужно учитывать, это то, что при использовании в URL IPv6-адреса нужно заключать в квадратные скобки. Порт, если его нужно явно указать, пишется за закрывающий скобкой.

http://[2a00:1450:8001::63]
http://[2a00:1450:8001::63]:80

Результат:


Межсетевой экран

Теперь настало время подумать о безопасности. В Linux присутствует межсетевой экран для IPv6, но настраивается отдельно от IPv4, поскольку реализации этих протоколов в ядре независимы друг от друга. Управление им производится с помощью команды ip6tables. Синтаксис правил совпадает с синтаксисом iptables. Отличается только возможностью указывать IPv6-адреса и протоколы, например ipv6-icmp.

DNS-сервер

Сервера bind и nsd оба поддерживают IPv6. Более того, по нему уже доступны все корневые сервера имен, а они используют именно эти программы. Мы будем рассматривать bind как наиболее пригодный для локальной сети (nsd может быть только ответственным за зону, но не кэширующим).

Чтобы убедить bind принимать соединения, пропишите в раздел options в named.conf следующее:

listen-on-v6 
    {
        any; 
    };

Вместо any можно указать адрес, если вы хотите принимать соединения только к одному адресу. В квадратные скобки адрес заключать не надо.

Настройка зон мало чем отличается от традиционной. Следует помнить только то, что для назначения хосту IPv6-адреса используется AAAA-запись. Называется так, видимо потому, что в четыре раза длинее чем A. Почти все клиентские программы эти записи понимают, в том числе всем известные dig и host. Вот пример:

[dmbaturin@zax /home/dmbaturin]$host vyatta.tomsk.ru
vyatta.tomsk.ru has address 90.188.116.151
vyatta.tomsk.ru has IPv6 address 2001:470:1f0b:a80::15
vyatta.tomsk.ru mail is handled by 20 vyatta.tomsk.ru.
[dmbaturin@zax /home/dmbaturin]$dig vyatta.tomsk.ru AAAA
...
;; ANSWER SECTION:
vyatta.tomsk.ru. 8640 IN AAAA 2001:470:1f0b:a80::15
...

Теперь посмотрим, как это выглядит в описаниях зон:

vyatta.tomsk.ru         IN AAAA     2001:470:1f0b:a80::15
                           A        90.188.116.151
                           MX       20 vyatta.tomsk.ru.
desktop.vyatta.tomsk.ru IN AAAA     2001:470:1f0b:a80::25

Как видно, AAAA-записи используются в точности так же, как и A. Теперь нужно настроить обратное разрешение. Hurricane Electric позволяет делегирование обратных доменов, поэтому проверить в реальных условиях тоже будет можно.

Для обратного разрешения используется домен ip6.arpa (аналог in-addr.arpa для IPv4). В named.conf придется написать следующее (это пример для моей подсети 2001:470:1f0b:a80::/64):

zone "0.8.a.0.b.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa" in 
{
 <настройки зоны>
};

Это адрес подсети, записанный в обратном порядке, без сокращений (даже вместе с незначащими нулями), все цифры разделены точками. Идея та же, что в IPv4, только писать больше. Аналогичным образом пишутся PTR-записи в файле описания зоны:

5.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0  IN PTR vyatta.tomsk.ru.
5.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0  IN PTR desktop.vyatta.tomsk.ru.

Чтобы не писать все это вручную, можно воспользовать вот этим инструментом, или аналогичным.

Почтовый сервер Postfix

В качестве MTA я обычно использую Postfix, поэтому опишу для него. Чтобы он принимал соединения по IPv6, в main.cf нужно написать приблизительно следующее (не указанные здесь параметры легко построить по аналогии):

# Если хотим, чтобы принимал со всех интерфейсов
inet_interfaces = all
# Если только с локальных, то вместо 127.0.0.1 
inet_interfaces = loopback-only

# Используем только IPv6. Если хотим оба, можно прописать all или ipv4,ipv6
inet_protocols = ipv6

# На какой адрес принимать соединения
smtp_bind_address6 = <адрес>

# Адреса IPv6-сетей нужно заключать в квадратные скобки
mynetworks = [2001:db8:abcd::]/48

Веб-сервер Apache HTTPD

При отсуствии явного указания адреса сервера, Apache HTTPD принимает соединения в том числе и по IPv6. Если требуется указать явно, то адрес следует заключить в квадратные скобки:

Listen [2001:db8:abcd:ef::10]

<VirtualHost [2001:db8:abcd:ef::12]>

FTP-сервер vsftpd

Этот сервер не умеет использовать оба протокола одновременно. Поэтому в его настройках придеться прописать либо listen=yes, либо listen_ipv6=yes; но не обе сразу.

Заключение

Основы обращения с адресами, настройку соединения и изменения в настройках многих распространенных сервисов мы рассмотрели; и, по крайней мере, чтобы приступить к использованию IPv6 этого должно хватить. Критика и вопросы, как и всегда, приветствуются.

P.S. Для желающих проверить свои знания IPv6 и потренироваться, Hurricane Electric предлагает еще и сертификацию. Вот, к примеру, мои текущие результаты:

IPv6 Certification Badge for dmbaturin

Полный текст сообщения

23 нояб. 2009 г.

Знакомство со SCO UnixWare 7

Ради интереса я решил поставить SCO UnixWare 7. Никакой практической ценности в таком мероприятии, конечно, нет; просто интересно стало глянуть на одну из самых древних UNIX. Да еще и принадлежащую теперь компании с такой сомнительной известностью (ее иски против Linux за вроде как принадлежащий им код все должны помнить).

Проблем с получением образов установочных дисков не возникает: все лежит на ftp-сервере разработчиков ftp.sco.com. Если нет желания разбираться со структурой его каталогов, все ссылки можно найти на http://www.sco.com/download/. Функциональность пробных версий вроде почти не ограничена, только время использования.

Установка системы

Ставить это чудо враждебной техники на физическую машину у меня не было никакого желания, поэтому ставил в виртуальную. Для начала решил попробовать VirtualBox, но встретился с неприятностями. Установщик падал с не особо информативными ошибками. Примерно вот так:

Судя по найденному в google, там есть некая проблема с работой UnixWare c IDE контроллерами. Разбираться, как ее исправить, опять же никакого желания, поэтому просто пробую QEMU. Может быть, это проблема VirtualBox, но нельзя исключить, что на близком к эмулируемому им оборудовании она поведет себя примерно так же.

Как ни странно, в QEMU никаких проблем не возникает, и установщик успешно запускается. Предварительно показав заставку.

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

Мне не предлагают ни русский язык, ни поддержку русской клавиутары, ни даже Unicode. Из системных кодировок только серия Latin. Кроме английской клавиатуры почему-то поддерживается только японская.

Зато предлагают ввести номер лицензии. Если его не вводить, обещают пробную лицензию на 60 дней, чего для поиграться вполне хватит.

Еще в процессе установки предлагали вручную настроить драйверы, но я предпочел автоматическую настройку. К счастью, она сработала. Это же касается автоматического разбиения диска — интерфейс для ее настройки не отличается удобством. Зато из него ясно, что используется некая собственная файловая система vxfs. Теперь вводим имя пользователя и пароль, затем пароль для root'а.

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

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

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

Но все когда-нибудь заканчивается, о чем нас и оповещает установщик:

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

Предлагает мне поставить что-то с остальных двух дисков (о том, где их взять, скромно умалчивает). Поэтому нажимаю F8 для продолжения.

И на всякий случай предлагает все таки заплатить ей денег:

Вот теперь установка действительно закончена, можно перезагружать машину. И тут снова неприятности. Она пытается запустить X-сервер, и даже запускает его, но все, что я вижу, это черный экран. Виртуальных консолей у нее нет, поэтому зайти в систему с текстовой консоли и разобраться, что пошло не так, возможности тоже нет. Я не ценитель подобного супрематизма, поэтому пришлось поискать обходной путь. Помогло указание QEMU опции «-vga std».

Что внутри?

После этого мы нормально загружаемся в графическую оболочку. Наблюдаем экран входа в систему:

Меня успешно пускают под тем пользователем, который был создан при установке. После чего нас встречает CDE (Common Desktop Environment, некогда стандарт в UNIX). Какая прелесть! Без тени иронии, она мне правда нравится (хотя мало кто разделяет мое мнение).

Запустим терминал, и посмотрим, для убедительности, вывод uname. Оболочкой по умолчанию там все тот же ksh. Который даже банальное автодополнение не умеет (по крайней мере, из коробки). Кстати, обратите внимание, что она считает себя ни чем иным, как SystemV release 5.

В корневом каталоге редкостная помойка:

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

Немного походив по каталогам (как же это неудобно без автодополнения!) обнаруживаем, что в качестве ssh-сервера там OpenSSH, а веб-сервера — Apache. Еще в качестве браузера там Mozilla 1.2.1. Настройки лежат в не особо привычных местах. Опции команд тоже ни на что не похожи.

Заключение

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


Полный текст сообщения

13 нояб. 2009 г.

Vyatta 6.0 alpha доступна для загрузки

Сегодня стали доступны для загрузки образы alpha-версии Vyatta Community 6.0. Она представляет собой результат слияния веток community и subscription, и включает в себя все наработатки из Jenner, ранее доступные в виде готовых сборок только по платной подписке. Загрузить их, как и обычно, можно с официального сайта проекта.

Представлены образы LiveCD и виртуальных машин Xen и Citrix XenServer. В числе новых функций:

  • Поддержка wi-fi
  • Учет трафика NetFlow
  • Source-based routing
  • Улучшения в QoS
  • Межсетевой экран IPv6
  • Правила фильтрации трафика, основанные на зонах безопасности и времени
  • Поддержка OSPFv3

Отчет о тестировании будет позднее. Первоисточник новости здесь.


Полный текст сообщения

12 нояб. 2009 г.

Технические вопросы работы с «русскоязычными» доменами

Утро вчера началось с того, что Иван Тиуков отправил мне ссылку с новостью о начале предварительной регистрации доменов .рф (для владельцев торговых марок за неоправданную цену) и выразил свое негативное к этому отношение. Идею доменов на национальных языках я тоже считаю глупой, бессмысленной и порочной, но это субъективное мнение. А вот что работать с такими доменами с большой вероятностью придется — уже суровая правда жизни.

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

Суть технологии

Конечно, внутреннее представление русскоязычных имен доменов существенно отличается от того, что видит пользователь. DNS все так же использует английский алфавит, дефис и цифры, а для хранения имен с отличными от этих символами был разработан метод представления unicode через них. Метод называется punycode, если кому-то интересны подробности, можно обратиться к первоисточнику — RFC 3492. Если вникать в подробности нет желания, то можно посмотреть на пример. Имя «сайт.пример.тест», которое мы будем использовать для тестирования, после перекодировки в punycode превращается в «xn--80aswg.xn--e1afmkfd.xn--e1aybc». Не слишком эстетично выглядит, и еще хуже воспринимается.

Тестовый сервер

Для тестирования мы используем существующий сервер моей локальной сети. На нем как раз уже установлены dns-сервер bind, веб-сервер Apache, ftp-сервер vsftpd и прокси-сервер squid. Для начала настроим наш тестовый домен. Ради интереса мы сделаем это через родной для SuSE инструмент yast2. Набираем в консоли yast2 dns-server и вводим имя нашего домена прямо как есть, русскими буквами. Примерно вот так:

Смотрим в файлы конфигурации, которые он сгенерировал. Как ни странно, он все понял и сам перекодировал в punycode.

Описание зоны:
zone "xn--e1afmkfd.xn--e1aybc" in {
 file "master/xn--e1afmkfd.xn--e1aybc";
 type master;
};

A-запись:
xn--80aswg      IN A            10.91.19.5

Что ж, уже неплохо. Теперь создадим virtual host в apache. Здесь, увы, придется писать уже перекодированное имя руками. Примерно так:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName xn--80aswg.xn--e1afmkfd.xn--e1aybc
    DocumentRoot /srv/www/htdocs/site.local
    HostnameLookups Off
    UseCanonicalName Off
    ServerSignature Off
    <Directory "/srv/www/htdocs/site.local">
 Order allow,deny
 Allow from all
    </Directory>
</VirtualHost>

Теперь положим ему в каталог в качестве index.html простейшую статическую страницу, и перейдем к тестированию браузеров. Squid и vsftpd никаких изменений конфигурации не требуют.

Тестирование браузеров

Посмотрим на все сколько-нибудь популярные браузеры. Специально для такой цели нашел компьютер с Windows XP. Сценарий везде будет одинаковый: сначала проверяем, что будет при вводе русскоязычного имени в адресную строку; а потом поймет ли он русскоязычный адрес прокси-сервера.

Internet Explorer 7

Адрес понимает, и даже корректно отображает.

Настраиваем ему прокси-сервер и смотрим результат. Чтобы убедится, что мы пошли именно через прокси, введем в адресной строке заведомо несуществующий адрес — если все в порядке, мы увидим сгенерированную прокси-сервером страницу с сообщением об ошибке.

Можно считать, что IE успешно выдержал испытание. В том числе и в режиме «Проводника»:

Firefox

Далее будут приводены только комментарии о результатах, потому как делать мы будем в точности одно и то же. Это Firefox 3.5.5 под Windows.

Теперь те же тесты с Firefox 3.0.9 на Linux.

Вывод: поддерживает, но в адресной строке отображает уже перекодированную строку. Неприятный недостаток, но на работоспособность не влияет.

Opera

Opera 10.1 под Windows Opera 9.64 под Linux Итог: Opera полностью прошла тест.

Safari под Windows

Mac OS X у меня под рукой, к сожалению, нет, поэтому тестировал только на Windows. Весьма вероятно, что результат там будет таким же.

Итог: поддерживает, но с той же проблемой, что в Firefox. Тоже показывает перекодированную строку в качестве адреса.

Google Chrome

Как видно, сначала он стал искать введенную в качестве адреса строку в Google, и скромно предложил перейти на перекодированный адрес. Какую реакцию это вызовет у тех самых неподготовленных пользователей, на которых ориентированы домены на национальных языках — судите сами. Тем не менее, после согласия перейти никаких проблем не возникло, как и с прокси-сервером.

Konqueror из KDE3

Им мало кто пользуется, но для комплекта пусть будет. Его версию для KDE4 не проверял, никакого желания его ставить у меня нет. Как видим, он вообще не понял, что от него хотят.

Вывод

Все распространенные браузеры такие адреса по крайней мере понимают, хотя и не без недостатков.

Еще некоторые программы для работы с сетью

Были проверены клиент обмена мгновенными сообщениями Pidgin, ftp-клиент FileZilla и клиент терминального доступа PuTTY. Никто из них адрес не воспринял вообще. Можно посмотреть на снимках экрана.

Диагностические утилиты

Пользователей это не особо касается, однако специалисты пользуются утилитами диагностики сети не один раз в день. Такими как ping, traceroute, host, dig и так далее. Их реализации ни под Windows, ни под Linux русскоязычные имена не понимают, и в обозримом будущем не будут. То есть, им каждый раз потребуется уже перекодированный в punycode адрес.

[baturin@zax ~]$ping сайт.пример.ру
ping: unknown host сайт.пример.ру
[baturin@zax ~]$traceroute сайт.пример.ру
сайт.пример.ру: Имя или служба не известны
[baturin@zax ~]$host сайт.пример.ру 
Host сайт.пример.ру not found: 3(NXDOMAIN)
[baturin@zax ~]$ping xn--80aswg.xn--e1afmkfd.xn--e1aybc
PING xn--80aswg.xn--e1afmkfd.xn--e1aybc (10.91.19.5) 56(84) bytes of data.
64 bytes from suse.tomsk.ru (10.91.19.5): icmp_seq=1 ttl=64 time=0.201 ms
^C
--- xn--80aswg.xn--e1afmkfd.xn--e1aybc ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.201/0.201/0.201/0.000 ms
[baturin@zax ~]$host xn--80aswg.xn--e1afmkfd.xn--e1aybc
xn--80aswg.xn--e1afmkfd.xn--e1aybc has address 10.91.19.5

Вывод

В настоящий момент использование «интернационализованных» доменных имен в целом возможно, но зачастую сопряжено с хотя и разрешимыми, но весьма неприятными проблемами. Причем проблемы эти коснутся как разработчиков и администраторов сервера, так и конечных пользователей. Работа с ними существенно менее комфортна, чем с традиционными, в виду отсутствия у многих программ поддержки перекодировки в punycode. Учитывайте это, если соберетесь регистрировать домен в зоне .рф или аналогичных.

Отдельно нужно сказать о доменах .ру, .орг, .нет и прочих. В отличии от .рф, который будет поддерживатся корневыми серверами, эти домены существуют только на серверах регистратора. Поэтому для их работы пользователям придеться явно указать, какие dns-сервера использовать, либо установить специальное программное обеспечение, иначе ничего работать не будет. Учитывая, что никто из пользователей в общем случае не будет этого делать, регистрировать их вовсе бессмысленно, разве что чтобы киберсквоттерам не достались.


Полный текст сообщения

10 нояб. 2009 г.

Vyatta и IPv6

Адреса IPv4 уже в обозримом будущем закончатся, поэтому мне весьма закономерно захотелось посмотреть на новую версию протокола, IPv6. К сожалению, сейчас почти никто из провайдеров не предоставляет его напрямую, однако способ его получить все таки есть. Ряд провайдеров предоставлют доступ поверх существующего IPv4-соединения через туннель.

В качестве такого провайдера мной был выбран Hurricane Electric (he.net). Для получения доступа достаточно зарегистрироваться на их сайте tunnelbroket.net. В комплект кроме туннеля входят также маршрутизируемая подсеть (/64 или /48) и возможность указать сервера имен для обратных зон.

При создании туннеля можно посмотреть примеры конфигураций для многих систем (Linux, Windows, Cisco IOS, JunOS и еще нескольких), но вот для Vyatta там ничего не было.

Настраиваем Vyatta для работы с Hurricane Electric

Тем не менее, ничего сложного настройка собой не представляет. Для инкапсуляции IPv6 в IPv4 у них применяется протокол SIT (Simple Internet Transition), который Vyatta поддерживает. Набор команд будет примерно таким:

configure                            # Входим в режим конфигурации
edit interfaces tunnel tun0          # Создаем новый интерфейс туннеля
set encapsulation sit                # Указываем протокол инкапсуляции SIT
set local-ip <IPv4-адрес>            # Адрес интерфейса, который смотрит в интернет
set remote-ip <IPv4-адрес>           # Адрес сервера доступа
set address <IPv6-адрес>/64          # Адрес интерфейса туннеля
set description "IPv6 tunnel"        # Описание, не является обязательным
exit
# Теперь укажем маршрут по умолчанию. ::/0 это аналог 0.0.0.0/0 в IPv4
set protocols static interface-route6 ::/0 next-hop-interface tun0
commit                               # Применяем изменения

Адрес сервера доступа и адрес нашей подсети скажут при регистрации. Возможно, непривычная запись «::» требует пояснений. Таким способом в IPv6 можно обозначить две или более группы нулей. Например, 2001:0470:aaaa:0bbb:0000:0000:0000:0001 может быть сокращен до 2001:470:aaaa:bbb::1. Как видно, незначащие нули тоже можно не писать. Посмотрим на получившуюся конфигурацию:

dmbaturin@rekki# show interfaces tunnel tun0 
 address 2001:470:xxxx:xxx::2/64
 description "Hurricane Electric IPv6 tunnel"
 encapsulation sit
 local-ip x.x.x.x
 remote-ip y.y.y.y
dmbaturin@rekki# show protocols static interface-route6 
 ::/0 {
     next-hop-interface tun0 {
     }
 }

Теперь осталось проверить, работает ли наше соединение. Для диагностики можно использовать аналоги привычных ping и traceroute для IPv6. Они называются ping6 и traceroute6 соответственно. Для проверки доступности с другой стороны можно воспользоваться looking glass провайдера, или любым другим аналогичным общедоступным сервером.

dmbaturin@rekki# ping6 he.net
PING he.net(he.net) 56 data bytes
64 bytes from he.net: icmp_seq=1 ttl=56 time=281 ms
64 bytes from he.net: icmp_seq=2 ttl=56 time=283 ms

dmbaturin@rekki# traceroute6 he.net
traceroute to he.net (2001:470:0:76::2), 30 hops max, 40 byte packets
 1  xxxxxx-1.tunnel.tserv6.fra1.ipv6.he.net (2001:470:xxxx:xxx::1)  144.294 ms  147.316 ms  151.028 ms
 2  gige-g2-4.core1.fra1.he.net (2001:470:0:69::1)  151.060 ms  151.086 ms  151.107 ms
 3  10gigabitethernet1-4.core1.ams1.he.net (2001:470:0:47::1)  159.030 ms  159.062 ms  159.107 ms
 4  10gigabitethernet1-4.core1.lon1.he.net (2001:470:0:3f::1)  167.319 ms  167.350 ms  167.357 ms
 5  2001:470:0:128::1 (2001:470:0:128::1)  238.403 ms 10gigabitethernet2-3.core1.nyc4.he.net (2001:470:0:3e::1)  238.100 ms  238.132 ms

Как видно, соединение проходит. Не желаете тоже прикоснуться к будущему Интернета?

Послесловие

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


Полный текст сообщения