Добрый день, уважаемые форумчане!Не смог самостоятельно найти решение нижеописанной проблемы, поэтому обращаюсь за помошью к вам.
Вводная информация и предыстория:Имеется маршрутизатор с 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/ip6tableshttp://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 я разобрался, тут можно не подсказывать.
Этих вопросов у меня не возникло бы, если бы у меня был один внутренний интерфейс, а не два.
В том то и дело, что оно и сейчас работает нормально, но только для одной подсети. А хочется, чтобы работало и у другой.