Я сегодня налисал скрипты для инициализации ipv6 в ppp сессии. Вот первый скрипт:
filename:000-ipv6_client_connect_init
#!/bin/bash
# Shov version
case $VERSION in
true)
echo 0-001.beta
exit 0
;;
* )
;;
esac
IPV6_DISCR_PATH=/opt/ipv6_net
CLIENT_IPV6=$(echo $PPP_REMOTE)
CLIENT_IF=$(echo $PPP_IFACE)
TMP_PATH=/run
# Get ppp ipv6 route
ipv6_rtr ()
{
IPV6_PPP=$(cat $IPV6_DISCR_PATH|grep PPP|grep -v grep|awk '{print $2}')
IPV6_ADDR=$(echo $CLIENT_IPV6|sed "s/fe80::/$IPV6_PPP/")
ip -6 route add ${IPV6_ADDR}/128 dev $CLIENT_IF
}
# Generate radvd config
radvd_gen_config ()
{
CONFIG_FILE_NAME=$TMP_PATH/radvd_${CLIENT_IF}.conf
RADVD_PREFIX=$(cat $IPV6_DISCR_PATH|grep RADVD|grep -v grep|awk '{print $2}')
echo $RADVD_PREFIX >/tmp/test
echo "interface $CLIENT_IF
{
AdvSendAdvert on;
prefix ${RADVD_PREFIX}
{
AdvOnLink on;
AdvAutonomous on;
};
RDNSS fd00:1002:1289:2::1
{
};
};" >$CONFIG_FILE_NAME
}
# Starting all process to radvd
radvd_start ()
{
CONFIG_FILE_NAME=$TMP_PATH/radvd_${CLIENT_IF}.conf
/usr/sbin/radvd -C $CONFIG_FILE_NAME -p $TMP_PATH/radvd_${CLIENT_IF}.pid
}
# Starting function
ipv6_rtr
radvd_gen_config
radvd_start
exit 0
filename:000-ipv6_client_disconnect_init
#!/bin/bash
case $VERSION in
true)
echo 0-001.beta
exit 0
;;
* )
;;
esac
IPV6_DISCR_PATH=/opt/ipv6_net
CLIENT_IPV6=$(echo $PPP_REMOTE)
CLIENT_IF=$(echo $PPP_IFACE)
TMP_PATH=/run
# Remove config radvd
radvd_rm_config ()
{
CONFIG_FILE_NAME=$TMP_PATH/radvd_${CLIENT_IF}.conf
rm $CONFIG_FILE_NAME
}
# Stopping ang restart radvd
radvd_stop ()
{
kill $(cat /tmp/radvd_${CLIENT_IF}.pid)
}
radvd_stop
radvd_rm_config
exit 0
Вот конфиг:
filename: ipv6_net
PPP 2001:470:7b2c:2:
RADVD 2001:470:7b2c:2::/64
Первый скрипт кинуть в /etc/ppp/ipv6-up, второй кинуть в /etc/ppp/ipv6-down, конфиг кинуть в /opt
Зависимости: radvd awk
Версия: 0-001.beta. В следующие версии добавлю поддежку гостевого доступа и др.