Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Тонкости настройки IPv6 (в виде 6to4) на Ubuntu-роутере с 1-им WAN и 2-мя LAN  (Прочитано 11432 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн EvgenNsk

  • Автор темы
  • Участник
  • *
  • Сообщений: 135
    • Просмотр профиля
Добрый день, уважаемые форумчане!

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

Вводная информация и предыстория:
Имеется маршрутизатор с 3-мя сетевыми картами, работающий под управлением Ubuntu Server 11.10.
Интерфейсы:
eth1 (смотрит в интернет): имеет некий “белый” IP.
eth2 (домашняя сеть 1): 192.168.0.1/24
eth3 (домашняя сеть 2): 192.168.100.1/24

Поднят isc-dhcp-server, который благополучно раздает IPv4-адреса в обе домашние подсетки. Настроен должным образом Iptables. В результате маршрутизатор нормально раздает интернет в обе домашние подсетки, а также через себя соединяет обе подсетки. На этом моменте пока все замечательно.

Озаботившись скорым включением IPv6 (читать тут: “Всемирный день запуска IPv6”: http://test-ipv6.com/ipv6launch.html) решил, что пора осчастливить обе локалки, и добавить поддержку нового протокола.
Поскольку есть «белый» IP, решил остановится на способе 6to4.

Используя эту инструкцию: http://6to4.version6.net/?show_op_sys=Linux_Debian&show_ip=192.168.0.20&lang=en_GB настроил на роутере адаптер tun6to4.
 
user@router:/home/router# ip addr show tun6to4
541: tun6to4: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN
link/sit [i](на этом месте указан белый IP)[/i] brd 0.0.0.0
inet6 2002:b231:1f50::1780:4903:1080/16 scope global
valid_lft forever preferred_lft forever
inet6 :: [i](на этом месте указан белый IP)[/i]/128 scope global
valid_lft forever preferred_lft forever

С роутера благополучно пингуется, например ipv6.yandex.ru (ну или ipv6.google.com):

user@router:/home/user# ping6 ipv6.yandex.ru -c 4
PING ipv6.yandex.ru(ipv6.yandex.ru) 56 data bytes
64 bytes from ipv6.yandex.ru: icmp_seq=1 ttl=58 time=50.5 ms
64 bytes from ipv6.yandex.ru: icmp_seq=2 ttl=58 time=46.4 ms
64 bytes from ipv6.yandex.ru: icmp_seq=3 ttl=58 time=46.4 ms
64 bytes from ipv6.yandex.ru: icmp_seq=4 ttl=58 time=46.4 ms
--- ipv6.yandex.ru ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 46.402/47.461/50.518/1.765 ms

Для раздачи IPv6 во внутренние локалки, поставил radvd и настроил ip6tables так, как указано в руководствах:
http://version6.ru/ip6tables
http://version6.ru/he.net/to-lan

Также, настроил IPv6-адреса для «внутренних” адаптеров:
user@router:/home/user# ip addr show eth2
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:1b:21:84:5b:5a brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.1/24 brd 192.168.0.255 scope global eth2
    [b]inet6 2002:b231:1f50::1/64 scope global[/b]
       valid_lft forever preferred_lft forever
    inet6 fe80::21b:21ff:fe84:5b5a/64 scope link
       valid_lft forever preferred_lft forever
user@router:/home/user# ip addr show eth3

5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:1b:21:cc:10:10 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.1/24 brd 192.168.100.255 scope global eth3
    [b]inet6 2002:b231:1f50::2/64 scope global[/b]
       valid_lft forever preferred_lft forever
    inet6 fe80::21b:21ff:fecc:1010/64 scope link
       valid_lft forever preferred_lft forever

Мой конфиг radvd отличается от того, который указан в качестве образца по вышеуказанной ссылке, т.к. у меня не одна сетевая карта, смотрящая в локалку, а две:

user@router:/home/user # cat /etc/radvd.conf
interface eth2
{
        AdvSendAdvert on;
        prefix 2002:b231:1f50::/64
        {
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr on;
        };
};

interface eth3
{
        AdvSendAdvert on;
        prefix 2002:b231:1f50::/64
        {
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr on;
        };
};

Машины в подсетях нормально получают IPv6 адреса.
Также был дописан скрипт для ip6tables (добавлены “под копирку» правила для еще одного внутреннего сетевого интерфейса)

Описание проблемы:
Из одной подсети (на интерфейсе eth3) адреса IPv6 пингуются (и тестовые странички открываются, и торрент подхватил сидеров с IPv6-адресами, очень удивив меня их количеством и резко возросшей скоростью закачки файла. Пинг с Win7-машины выдает следующее:

C:\Users\user>ping -6 ipv6.yandex.ru
Обмен пакетами с ipv6.yandex.ru [2a02:6b8:0:261::1] с 32 байтами да
Ответ от 2a02:6b8:0:261::1: время=47мс
Ответ от 2a02:6b8:0:261::1: время=44мс
Ответ от 2a02:6b8:0:261::1: время=45мс
Ответ от 2a02:6b8:0:261::1: время=46мс

Статистика Ping для 2a02:6b8:0:261::1:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 44мсек, Максимальное = 47 мсек, Среднее = 45 мсек

а из другой (на интерфейсе eth2) – не работает:

C:\Users\server1>ping -6 ipv6.yandex.ru

Обмен пакетами с ipv6.yandex.ru [2a02:6b8:0:261::1] с 32 байтами данных:
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.

Статистика Ping для 2a02:6b8:0:261::1:
    Пакетов: отправлено = 4, получено = 0, потеряно = 4
    (100% потерь)

Отлов пакетов с помощью ip6tables и созданных в нем правил с действием типа -j LOG –log-prefix “IPV6 ” и просмотром результата в /var/log/syslog показал, что несмотря на отсутствие пинга, какое-то движение все таки есть.

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

root@gw-realnet:/home/kneker# route -6 -n
Таблица маршрутизация ядра IPv6
………
2002:b231:1f50::/64            ::                         U    256 0     0 eth3
2002:b231:1f50::/64            ::                         U    256 0     0 eth2
……
Т.е. одна подсеть присутствует на двух сетевых интерфейсах, и конечно, прилетевший на роутер пакет уходит по первому из маршрутов, удовлетворяющих условию, т.е. на eth3 (ну и конечно там дохнет, не найдя отправителя пинга. Ну естественно, отправитель-то находится на другой сетевой карте).

Если врукопашную скорректировать таблицу, переставив местами вышеуказанные маршруты, то трафик из подсетей в большую сеть начинает двигаться с точностью до наоборот (подсеть на сетевой карте eth2 работает, а eth3 – нет).

Собственно вопросы:
1) Как правильно назначить IPv6-адреса для внутренних сетевых интерфейсов eth2 и eth3 так, чтобы выделенную мне по технологии 6to4 IPv6-подсеть с маской \64 «распилить» на две меньшие подсети (и увести их, таким образом, на разные интерфейсы)?
2) Как, в соответствии с настройками из пункта 1, правильно записать содержимое /etc/radvd.conf?
По моему предположению, в этом случае в таблице маршрутизации будут две, непересекающиеся записи не к одной подсети \64, а к двум поменьше, и в результате пакеты будут попадать туда, куда надо.
Также возможно, что я все сделал правильно, но в связи с тем, что у меня не 1 LAN а 2, надо просто доделать что-то еще.

! Прошу не отправлять меня читать литературу на тему “Структура адреса IPv6” или “Маска подсети в IPv6“. Потратив пару дней на эксперименты и ничего не добившись, понял, что нужен готовый пример для последующего понимания.


Пользователь решил продолжить мысль 03 Февраля 2012, 18:00:11:
Ну ладно, для упрощения понимания того, что мне требуется изложу описание кратко, и с конца:

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

Теперь у меня есть внешний IPv6-адрес:
inet6 addr: 2002:b231:1f50::1780:4903:1080/16 Scope:Общий
и есть 2 локалки на 2-х разных сетевых картах.
Вопросы, у меня возникшие:
1) Какие IPv6-адреса назначить этим внутренним интерфейсам, и...
2) как правильно настроить radvd
чтобы IPv-6 трафик из внутренних сетей бегал наружу и обратно.

С настройкой ip6tables я разобрался, тут можно не подсказывать.

Этих вопросов у меня не возникло бы, если бы у меня был один внутренний интерфейс, а не два.
В том то и дело, что оно и сейчас работает нормально, но только для одной подсети. А хочется, чтобы работало и у другой.
« Последнее редактирование: 03 Февраля 2012, 18:00:11 от EvgenNsk »

Оффлайн drako

  • Старожил
  • *
  • Сообщений: 1422
    • Просмотр профиля
Почитайте это и думаю Вы поймете, где делаете ошибку.

Оффлайн EvgenNsk

  • Автор темы
  • Участник
  • *
  • Сообщений: 135
    • Просмотр профиля
Почитайте это и думаю Вы поймете, где делаете ошибку.

Я так понял, что 6to4 дает мне целую подсеть \64, вот и пытался раздать ее компам в двух независимых LANах (наверное, что-то неправильно делаю).
Опять же непонятно:
Получается, что адреса типа 2001:0db8::1/64 это что-то вроде аналога 192.168.0.1 из IPv4 (т.е. для внутренних сетей).

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

И даже если я назначу одному сетевому интерфейсу адрес 2001:0db8::1/64, а другому 2001:0db8::2/64, то в таблице маршрутизации будет такая же ситуация:

2002:b231:1f50::/64            ::                         U    256 0     0 eth3
2002:b231:1f50::/64            ::                         U    256 0     0 eth2

Мне надо раскидать 2 LAN сетевухи в разные IPv6-подсети, и так, чтобы эти подсети были из выданного мне IPv-6 диапазона размером в \64 (выдан при включении 6to4).

Внешний IPv6, повторюсь, такой: 2002:b231:1f50::1780:4903:1080/16

Возможно, я опять неправильно понимаю теорию IPv6, в этом случае укажите, какие адреса на какие интерфейсы назначать, и что писать в radvd.conf, и я буду разбираться уже на живом примере. Честное слово, всю голову поломал. На IPv4 все было проще.

Оффлайн drako

  • Старожил
  • *
  • Сообщений: 1422
    • Просмотр профиля
Если бы у меня была возможность на чем-то заспытать ipv6 в разрезе целой сети, то уже давно бы выложил инструкцию.
А так, даже невооруженным глазом видно, что вы пытаетесь на разные интерфейсы адреса из одной подсети повесить. Там по ссылке дан разбор как адреса назначаются.

Оффлайн EvgenNsk

  • Автор темы
  • Участник
  • *
  • Сообщений: 135
    • Просмотр профиля
А так, даже невооруженным глазом видно, что вы пытаетесь на разные интерфейсы адреса из одной подсети повесить.

Согласен, это как если бы я этим двум "внутренним" (т.е. смотрящим в локалки) интерфейсам присвоил IPv4-адреса 192.168.1.1 и 192.168.1.2 соответственно, а потом бы удивлялся, почему из одной сети все работает, а из другой нет.

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

Ладно, уговорили, пусть один интерфейс будет с адресом 2001:0db8::1/64.

Тогда как будет выглядеть адрес сетевухи для второй локалки (чтобы он был из другой подсети)?

Вот так что ли: 2001:0db8:1:1/64

Я именно в это и не могу въехать...

Наверное, делать надо так:
Берем теорию:


2001:db8:0000:0000:0000:0000:0000:0001
_____________|____|___________________
Network ID   Subnet  Interface ID

Network ID определяется провайдером, когда он выдаёт блок IPv6-адресов. Вы же можете управлять значением Subnet и Interface ID.


Да Network ID действительно выдан мне провайдером: 2002:b231:1f50
Добавляем к нему подсеть и адрес.

В первом случае: 2002:b231:1f50:1::1/64
Во втором: 2002:b231:1f50:2::1/64

Таким образом, на eth2 у меня будет подсеть 1, а на eth3 подсеть 2.

Правильно я соображаю?
« Последнее редактирование: 03 Февраля 2012, 20:56:10 от EvgenNsk »

Гарри Кашпировский

  • Гость
Нет не так.
В помощь http://www.gestioip.net/cgi-bin/subnet_calculator.cgi
У меня к Вам вопрос. Если не трудно. Скажите какая модель сетевой карточки у вас и версиии ядра и radvd, ибо у меня получилось раздать ipv6 не полностью (моя тема https://forum.ubuntu.ru/index.php?topic=174614.msg1290626#msg1290626)
« Последнее редактирование: 03 Февраля 2012, 20:58:38 от KT315 »

Оффлайн EvgenNsk

  • Автор темы
  • Участник
  • *
  • Сообщений: 135
    • Просмотр профиля
Нет не так.
В помощь http://www.gestioip.net/cgi-bin/subnet_calculator.cgi
У меня к Вам вопрос. Если не трудно. Скажите какая модель сетевой карточки у вас и версиии ядра и radvd, ибо у меня получилось раздать ipv6 не полностью (моя тема https://forum.ubuntu.ru/index.php?topic=174614.msg1290626#msg1290626)

radvd 1.8
Сетевухи в роутер брал хорошие:
http://www.nix.ru/autocatalog/networking_intel/Intel_EXPI9301CT_Gigabit_Desktop_Adapter_PCIE_x1_1000Mbps_83764.html

Насчет калькулятора адресов:
Я правильно понимаю, что внутренним сетевым картам и компам в двух локалках надо назначать адреса также из диапазона 192.168.0.0 и 192.168.100.0, только пересчитанных в IPv6-представление?

Тогда как добираться до этих компов снаружи? NATa нет...

Гарри Кашпировский

  • Гость
Нет неправильно. Пересчитывать IPv4 к IPv6 не нужно.
Смотрите, у вас есть туннель к брокеру, брокер выдал вам адрес на интерфейс tun6to4 и выдал routed64-подсеть
И вот эту routed64 нужно считать.

Оффлайн EvgenNsk

  • Автор темы
  • Участник
  • *
  • Сообщений: 135
    • Просмотр профиля
Смотрите, у вас есть туннель к брокеру,

У меня НЕТ туннеля к брокеру. У меня "белый" IPv4, что позволило подключится по технологии 6то4.
http://version6.ru/6to4/howto

Вот, смотрите:
user@router:/home/user# ifconfig tun6to4
tun6to4   Link encap:IPv6-in-IPv4
          inet6 addr: ::178.49.31.80/128 Scope:Compat
          inet6 addr: 2002:b231:1f50::1780:4903:1080/16 Scope:Общий
          UP RUNNING NOARP  MTU:1480  Metric:1
          RX packets:197238 errors:0 dropped:0 overruns:0 frame:0
          TX packets:104006 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:210485806 (210.4 MB)  TX bytes:7164962 (7.1 MB)

Я добрался до этого этапа:
http://version6.ru/6to4/to-lan
и уперся в то, что у меня не 1 сетевая карта, смотрящая в LAN, а 2, смотрящие в 2 разные LAN.

Если настраивать по инструкции, то получается что оба внутренних интерфейса находятся в одной подсети, в таблицу маршрутизации попадают записи типа этой:
2002:b231:1f50::/64            ::                         U    256 0     0 eth3
2002:b231:1f50::/64            ::                         U    256 0     0 eth2
И в результате трафик ничерта не бегает, так как надо (точнее, бегает, но только в ту подсеть, которая в таблице маршрутизации отмечена первее, по принципу "кто первый встал, того и тапки", в данном случае, глядя на приведенный код - в сеть, которая висит на интерфейсе eth3).

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

Гарри Кашпировский

  • Гость
У меня НЕТ туннеля к брокеру.
Простите, а вот это тогда что?
user@router:/home/user# ifconfig tun6to4
tun6to4   Link encap:IPv6-in-IPv4
          inet6 addr: ::178.49.31.80/128 Scope:Compat
          inet6 addr: 2002:b231:1f50::1780:4903:1080/16 Scope:Общий
          UP RUNNING NOARP  MTU:1480  Metric:1
          RX packets:197238 errors:0 dropped:0 overruns:0 frame:0
          TX packets:104006 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:210485806 (210.4 MB)  TX bytes:7164962 (7.1 MB)

Оффлайн EvgenNsk

  • Автор темы
  • Участник
  • *
  • Сообщений: 135
    • Просмотр профиля
Я так понял, что туннельный брокер и 6to4 - это совершенно разные вещи.

У них и описание, и способ поднятия соединения разный:
http://version6.ru/6to4/howto
http://version6.ru/he.net/howto

Или я опять что-то не понимаю?

А tun6to4 добавлялся по инструкции (ссылки выше).
В /etc/network/interfaces пишем:
# IPv6 to 4
auto tun6to4
iface tun6to4 inet6 v4tunnel
        pre-up modprobe ipv6
        address 2002:b231:1f50::1780:4903:1080
        netmask 16
        gateway ::192.88.99.1
        endpoint any
        local 178.49.31.80
Где самая последняя строчка - IPv4-адрес интерфейса (внешний), а строка address с IPv6-адресом сгенерирована автоматически на специальных сайтах, которые автоматизируют процесс запуска 6to4 в Linux-системах
« Последнее редактирование: 03 Февраля 2012, 21:46:57 от EvgenNsk »

Гарри Кашпировский

  • Гость
Где же он разный, когда одинаковый.
В одном случае просто тупо пересчитывается IPv4 в IPv6 - для этого регистрации не нужно, в другом нужна регистрация, чтобы закрепить за Вами routed-подсеть.

Оффлайн EvgenNsk

  • Автор темы
  • Участник
  • *
  • Сообщений: 135
    • Просмотр профиля
Где же он разный, когда одинаковый.
В одном случае просто тупо пересчитывается IPv4 в IPv6 - для этого регистрации не нужно, в другом нужна регистрация, чтобы закрепить за Вами routed-подсеть.
Хорошо, согласен. Не разобрался достаточно глубоко в этой терминологии.

Но
(возвращаясь к тому, ради чего эта тема и создавалась)
Что же тогда писать в IPv6-адреса 2-х внутренних сетевых карт, чтобы народ, сидящий в этих подсетях мог нормально пользоваться IPv6-инетом? (с ip6tables, кстати я разобрался, а вот подсказка по содержимому radvd.conf также не помешает).

Сейчас у этих сетевых карт есть IPv4-адреса:
eth2: 192.168.0.1 netmask 255.255.255.0
eth3: 192.168.100.1 netmask 255.255.255.0

И главное: можно ли как то увязать наружний IPv6-интерфейс с внутренними адресами в 2-х LAN-сетях? Вообще, завязывается ли это как то?

Гарри Кашпировский

  • Гость
Поймите, IPv6 работает от IPv4 независимо. Можно вообще не назначать v4 на интерфейс - это два разных протокола. А по остальному в ответах №7 и №5. Конфиг radvd у Вас верный, только с подсетями неверно.
Вот 1-я сеть 2002:b231:1f50::/65
Вот 2-я сеть 2002:b231:1f50:0:8000::/65
То же на интерфейсах
LAN1 - 2002:b231:1f50::1/65
LAN2 - 2002:b231:1f50:0:8000::1/65
Как-то так.

Оффлайн EvgenNsk

  • Автор темы
  • Участник
  • *
  • Сообщений: 135
    • Просмотр профиля
Вот 1-я сеть 2002:b231:1f50::/65
Вот 2-я сеть 2002:b231:1f50:0:8000::/65
Это в radvd.conf должно быть?
И, главное, как с помощью ip-калькулятора считали адрес для 2-й сети?
Если мне понадобится поднять еще одну сетевую карту для LAN, IPv6-адрес для нее считать каким образом?
« Последнее редактирование: 03 Февраля 2012, 22:23:23 от EvgenNsk »

 

Страница сгенерирована за 0.069 секунд. Запросов: 25.