среда, 11 декабря 2013 г.

Centos pppoe ipv6 prefix delegation

Centos 6.5 выступает в роли домашнего сервера. Не так давно мой провайдер начал выдавать ipv6 префиксы. Т.е. не один адрес, а целую подсеть /64.

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



ppp0 - pppoe провайдера
eth0 - внутренняя сеть с компами

Включаем ipv6 в настройках ядра и на интерфесах.
Допишем в /etc/sysctl.conf
net.ipv6.conf.all.forwarding=1net.ipv6.conf.ppp0.accept_ra=2
в /etc/sysconfig/network
IPV6INIT=yesIPV6FORWARDING=yes
в /etc/sysconfig/network-scripts/ifcfg-ppp0 и ifcfg-eth0
IPV6INIT=yes
Устанавливаем radvd: (он будет выдавать ipv6 адреса внутри сети)
yum install radvd
Dibbler - a portable DHCPv6, умеющий PD.

cat /etc/dibbler/client.conf 
log-mode full
# 7 = omit debug messages
log-level 7
# Dibbler-client will attempt to try selecting downlink interfaces automatically.
# Usually it does its job right, but if you have fancy setup it may be better
# to specify them explicitly
downlink-prefix-ifaces eth0
iface "ppp0" {
 pd
}
script "/etc/dibbler/client.script"
В последней строке указан скрипт после получения префикса от провайдера. Для чего он? Dibbler только получает префикс, и ipv6 адрес на интерфейсы не добавляет. Скрипт добавляет ipv6 адрес из полученного префикса на интерфейс eth0, прописывает ipv6-маршрут по умолчанию. а также запускает radvd. чтобы последний выдавал адреса из полученного префикса другим устройствам локальной сети. Dibbler после получения префикса сам генерирует конфиг для radvd.

cat /etc/dibbler/client.script 
#!/bin/sh
if [ $1 == "add" ]
then
  ip -6 addr add ${PREFIX1}1/${PREFIX1LEN} dev eth0
  ip -6 route del default dev ppp0
  ip -6 route add default dev ppp0
  killall radvd
  /usr/sbin/radvd -C /etc/dibbler/radvd.conf
fi
if [ $1 == "delete" ]
then
  ip -6 addr delete ${PREFIX1}1/${PREFIX1LEN} dev eth0
  ip -6 route del default dev ppp0
  killall radvd
fi
exit 0

Чтобы все это запускалось автоматически с подключением pppoe, допишем в /etc/ppp/ip-up
if [ "${REALDEVICE}" == "ppp0" ]; then
        /usr/local/sbin/dibbler-client start
fi
и в /etc/ppp/ip-down
if [ "${REALDEVICE}" == "ppp0" ]; then
        /usr/local/sbin/dibbler-client stop
fi
Переподключаем ppp0 и проверяем. 
[root@fixed77 network-scripts]# ping6 google.com
PING google.com(arn06s02-in-x05.1e100.net) 56 data bytes
64 bytes from arn06s02-in-x05.1e100.net: icmp_seq=1 ttl=58 time=32.2 ms
64 bytes from arn06s02-in-x05.1e100.net: icmp_seq=2 ttl=58 time=32.7 ms
Не забываем про ip6tables.

Комментариев нет:

Отправить комментарий