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.


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

30 окт. 2009 г.

Настройка PPTP во Vyatta

В этой заметке мы рассмотрим настройку Vyatta в качестве сервера доступа по протоколу PPTP. Еще раз отметим, что PPTP-клиентом она в исходном виде быть не умеет, только сервером.

Теоретическая часть

Протокол PPTP (Point-to-Point Tunneling Protocol) широко применяется для организации удаленного доступа. Для многих пользователей он стал фактически синонимом VPN (Virtual Private Network). Не в последнюю очередь этому способствует встроенный в Microsoft Windows клиент. Для начала посмотрим, что в нем хорошо, а что не слишком, и сделаем вывод, в каких случаях стоит его применять.

Преимущества

  1. Простота настройки
  2. Аутентификация по имени пользователя и паролю — их можно запомнить
  3. Встроенный в Windows и многие офисные сетевые устройства клиент

Недостатки

  1. Слабое шифрование
  2. Отсутствие аутентификации по ключам и сертификатам
  3. Отсутствие клиента в промышленных сетевых устройствах

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

Вывод

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

Исходя из этого наша схема сети будет выглядеть так:

Практическая часть

Теперь, когда мы решили, для каких задач можно применить PPTP, перейдем к настройке нашего сервера доступа. Мы рассмотрим два варианта аутентификации пользователей: сначала локальную, а потом на RADIUS-сервере. Как обычно заходим под пользователем с правами администратора (например, vyatta), входим в режим конфигурации (configure) и вводим примерно следующее:

# Назначаем адрес интерфейсу, если еще не назначен
set interfaces ethernet eth0 address 10.91.19.250/24
# Переходим к редактированию настроек PPTP-сервера 
edit vpn pptp remote-access 
# Устанавливаем локальную аутентификацию. При ней список пользователей хранится на самом сервере
set authentication mode local 
# Назначаем первый адрес диапазона, из которого клиентам будут выдаватся адреса
set client-ip-pool start 10.91.19.180
# И последний адрес
set client-ip-pool stop 10.91.19.195
# Первый сервер имен нашей сети.
set dns-servers server-1 10.91.19.5
# И второй сервер имен
set dns-servers server-2 10.91.19.7
# Создаем тестового пользователя
set authentication local-users username testuser password testpassword
# Применяем изменения
commit
# На этом все, процесс PPTP-сервера успешно запустился

Теперь можно настраивать соединение и проверять, туннель должен подняться. В Windows можно просто принять параметры по умолчанию, для пользователей UNIX нужно указать, что используется протокол аутентификации MS CHAPv2, алгоритм шифрования MPPE и не используется никакое сжатие. Вариантов настройки у бэкэнда, который использует Vyatta (pptpd) гораздо больше, но через ее интерфейс они недоступны.

Аутентификация на RADIUS-сервере

На vpn-концентраторах с большим числом пользователей локальную аутентификацию, конечно, никто не использует. Для этого обычно используется протокол RADIUS (Remote Authentication in Dial-In User Service), который позволяет еще и сбор информации для биллинга, хранение учетных записей в базе данных и еще много чего.

Настройка самого RADIUS-сервера чтобы с него была какая-то реальная польза это тема для отдельной статьи. Поэтому здесь мы рассмотрим только настройку Vyatta в качестве клиента. Отличаться будет только узел конфигурации authentication. Нужно лишь немного изменить предыдущую конфигурацию.

 # Удаляем то, что касается локальной аутентификации
 delete authentication mode local 
 delete authentication local-users username testuser 
 # Устанавливаем аутентификацию в RADIUS
 set authentication mode radius 
 # Указываем сервер
 set authentication radius-server 10.91.19.5
 # Указываем пароль для доступа клиента к серверу, в терминах RADIUS он называется secret
 set authentication radius-server 10.91.19.5 key verylongpassword
 # Применяем изменения
 commit

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


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

27 окт. 2009 г.

Различия интерфейсов командной строки Cisco и Vyatta

В этой статье мы сравним интерфейсы командной строки Cisco IOS и Vyatta. Учитывая, что с устройствами Cisco большинство сетевых администраторов сталкивались, это может быть полезным при использовании Vyatta.

Все описанное ниже касается Vyatta Community Edition 5.0.2. Соответствия не всегда являются точными, потому как она и IOS устроены все таки по-разному, но общий смысл они передают.

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

Именование интерфейсов

Cisco Vyatta
Ethernet, FastEthernet, GigabitEthernet eth
atm adsl
Serial wan
Dialer pppoe
Vlan <iface><number>.<vlan id>
Tunnel tun

Основное

Cisco Vyatta
enable Отсутствует
configure terminal configure
exit exit
write memory save

Интерфейсы

Cisco Vyatta
interface <type> <number> set interfaces <type> <name>
ip address set address
mac-address set hw-id (set mac)
shutdown, no shutdown set disable, delete disable

Маршрутизация

Cisco Vyatta
no ip routing, ip routing set system ip disable-forwarding, delete system ip disable forwarding
ip route <address> <netmask> <gateway> set protocols static route <address>/<prefix-length> next-hop <gateway>
ip route <address> <netmask> <interface> set protocols static interface-route <address>/<prefix-length> next-hop-interface <interface>
router [ospf|bgp|rip] set protocols [ospf|bgp|rip]

Прочее

Cisco Vyatta
ip nat ... set service nat ...
ip dhcp ... set service dhcp ...
username ... set system login ...

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

23 окт. 2009 г.

Графические интерфейсы промышленных сетевых устройств

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

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

Польза для специалиста

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

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

Польза для неспециалиста

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

Даже если устройство имеет некий адрес по умолчанию, нужно его узнать и настроить соответствующим образом компьютер. В итоге «просто включить и работать» не получится в любом случае. К этому можно добавить то, что у ряда устройств веб-интерфейс по умолчанию тоже отключен, и включать его придеться опять же из командной строки.

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

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

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

Точка доступа wi-fi Cisco Aironet 1130
Управляемый коммутатор D-Link DES-2110
Маршрутизатор Vyatta

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