Поиск по этому блогу

четверг, 15 сентября 2016 г.

Налаштування IPv6 у RouterOS як клієнта для SLAAC+DHCPv6

Багато статей є про те як налаштувати IPv6 у RouterOS через тунель-брокера. Але мало де написано про те як налаштувати IPv6 у RouterOS коли підключення відбувається за схемами SLAAC, SLAAC+DHCPv6… Спробуємо виправити цей недолік.

Про те, що уявляє з себе функціонал SLAAC, SLAAC+DHCPv6 та DHCPv6 можна прочитати, наприклад, тут.

Так от, наш провайдер надає нам IPv6 за схемою SLAAC+DHCPv6: надає нам /64 на підключенні та делегує якусь мережу, щоб ми могли її вже роздати у себе. Ми будемо у себе реалізовувати лише функціонал SLAAC.

Невелике зауваження, наразі налаштовано та протестовано RouterOS версії 6.36.3. Рік тому була інша версія і синтаксис щодо налаштувань, з того часу, дещо змінився.

Налаштовуємо RouterOS:

/ipv6 nd set [ find default=yes ] advertise-dns=yes interface=bridge-local ra-interval=1m40s-3m20s
/ipv6 dhcp-client add add-default-route=yes interface=ether1-gateway pool-name=v6pool request=address,prefix
/ipv6 address add eui-64=yes from-pool=v6pool interface=bridge-local
/ipv6 address add address=fec0:0:0:ffff::1/10 advertise=no interface=bridge-local
/ipv6 address add address=fec0:0:0:ffff::2/10 advertise=no interface=bridge-local
/ipv6 address add address=fec0:0:0:ffff::3/10 advertise=no interface=bridge-local

ND

За замовченням ND interface дивиться у all, тобто на всі інтерфейси. Ми ж не хочемо роздавати той сервіс, що отримаємо, назовні, хочемо роздати тільки своїм абонентам, тому вносимо відповідні правки у конфігурацію за замовченням. Так як видалити її не можна то робиться саме встановлення властивостей у наявну конфігурацію. Можна було б зробити її неактивною й додати нову, але, як на мене, наведений шлях більш вірний.

Для ND встановлюємо внутрішній інтерфейс. Кажемо про те, що маємо оповіщати в мережу наявні DNS. Опції managed-address-configuration  та other-configuration не встановлюємо, звісно якщо не хочемо реалізувати схему відмінну від чистого SLAAC.

DHCPv6 клієнт

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

IPv6 адреса на локальному інтерфейсі

Наступним кроком налаштовуємо внутрішній інтерфейс таким чином щоб він брав адрес з організованого пулу та формував його за eui-64. Хтось захоче інакше, скаже, що це небезпечно, не питання, можна й інакше:
/ipv6 address add from-pool=v6pool address=::1/64 interface=bridge-local

Клієнти у локальнїй мережі

Зауваження щодо Windows

Якщо явно не вказати ОС Windows що треба використовувати IPv6-unicast DNS-сервери то за замовченням запити будуть відправлятися до спеціальних site-local адрес fec0:0:0:ffff::1, fec0:0:0:ffff::2 та fec0:0:0:ffff::3. Також DNS можна вказати вручну, використовуючи netsh.

Підтримка fec0:0:0:ffff::1, fec0:0:0:ffff::2 та fec0:0:0:ffff::3

Підтримку адрес fec0:0:0:ffff::1, fec0:0:0:ffff::2 та fec0:0:0:ffff::3 можна організувати на Mikrotik, наприклад, так як наведено вище:
/ipv6 address add address=fec0:0:0:ffff::1/10 advertise=no interface=bridge-local
/ipv6 address add address=fec0:0:0:ffff::2/10 advertise=no interface=bridge-local
/ipv6 address add address=fec0:0:0:ffff::3/10 advertise=no interface=bridge-local

Статичне встановлення DNS серверів

Також DNS-сервери для IPv6 можна встановити статично. Наприклад 6-to-4:
netsh interface ipv6 add dnsservers 10 index=1 2001:4860:4860::6464
netsh interface ipv6 add dnsservers 10 index=2 2001:4860:4860::64
та/або публічні google DNS:
netsh interface ipv6 add dnsservers 10 index=3 2001:4860:4860::8888
netsh interface ipv6 add dnsservers 10 index=4 2001:4860:4860::8844
або ж адреси які надає провайдер.

Disabling RFC 4941 IPv6 Privacy Extensions in Windows

За замовченням Windows періодично генерить нову IPv6 адресу у разі чого деякі ресурси у мережі починають лаятись на те, що у користувача змінилася адреса і припиняють коректно працювати. Лікується це просто і не потребує перезавантаження:
netsh interface ipv6 set global randomizeidentifiers=disabled store=persistent
netsh interface ipv6 set privacy randomizeidentifiers=disabled store=persistent
Але знов-таки eui-64…

Зауваження щодо Linux

З Linux також все просто. Кажемо:
sysctl net.ipv6.conf.eth0.accept_ra=1
sysctl net.ipv6.conf.eth0.autoconf-1
sysctl net.ipv6.conf.eth0.hop_limit=64
І у налаштуваннях мережі кажемо, що для IPv6 налаштування мають отримуватися автоматично. Не забудьте про hop_limit! Чомусь у Debian-і за замовченням він був встановлений у 0, від чого, коли робився ping6, отримували повідомлення: "Time exceeded: Hop limit".