In case you want to know how to configure IPv6 using CenturyLink’s 6rd tunneling service.
There are four files to update with my script:
- /etc/radvd.conf.header
- /etc/default/centurylink-6rd
- /etc/ppp/ip-up.d/centurylink-6rd
- /etc/ppp/ip-down.d/centurylink-6rd
There are a couple of environment variables in /etc/default/centurylink-6rd that you will want to set. Mine looks like this:
LAN_IFACE="ens18,ens21,ens22" HEADER_FILE=/etc/radvd.conf.header
The script will configure radvd to advertise v6 routes to a /64 of clients on each of the interfaces delimited by a comma in LAN_IFACE. Current interface limit is 9. I can patch something to go up to 0xff, but I don’t want to at this time.
If you have some static configuration that you want to preserve, place them into the file pointed to by ${HEADER_FILE} and it will be prepended to the generated /etc/radvd.conf file. The up script will remove the file and re-create it every time your ppp link comes up, so keep that in mind and don’t manually modify the file and expect it to perist. You’ve been warned :-)
So here’s the script. It’s also linked above if you want to curl it.
#!/bin/bash # # Copyright 2023 Collier Technologies LLC # https://wp.c9h.org/cj/?p=1844 # # # These variables are for the use of the scripts run by run-parts # PPP_IFACE="$1" # PPP_TTY="$2" # PPP_SPEED="$3" # PPP_LOCAL="$4" # PPP_REMOTE="$5" # PPP_IPPARAM="$6" ${PPP_IFACE:="ppp0"} if [[ -z ${PPP_LOCAL} ]]; then PPP_LOCAL=$(curl -s https://icanhazip.com/) fi 6rd_prefix="2602::/24" #printf "%x%x:%x%x\n" $(echo $PPP_LOCAL | tr . ' ') # This configuration option came from CenturyLink: # https://www.centurylink.com/home/help/internet/modems-and-routers/advanced-setup/enable-ipv6.html border_router=205.171.2.64 TUNIFACE=6rdif first_ipv6_network=$(printf "2602:%02x:%02x%02x:%02x00::" $(echo ${PPP_LOCAL} | tr . ' ')) ip tunnel del ${TUNIFACE} 2>/dev/null ip -l 5 -6 addr flush scope global dev ${IFACE} ip tunnel add ${TUNIFACE} mode sit local ${PPP_LOCAL} remote ${border_router} ip tunnel 6rd dev ${TUNIFACE} 6rd-prefix "${first_ipv6_network}0/64" 6rd-relay_prefix ${border_router}/32 ip link set up dev ${TUNIFACE} ip -6 route add default dev ${TUNIFACE} ip addr add ${first_ipv6_network}1/64 dev ${TUNIFACE} rm /etc/radvd.conf i=1 DEFAULT_FILE="/etc/default/centurylink-6rd" if [[ -f ${DEFAULT_FILE} ]]; then source ${DEFAULT_FILE} if [[ -f ${HEADER_FILE} ]]; then cp ${HEADER_FILE} /etc/radvd.conf fi else LAN_IFACE="setThis" fi for IFACE in $( echo ${LAN_IFACE} | tr , ' ' ) ; do ipv6_network=$(printf "2602:%02x:%02x%02x:%02x0${i}::" $(echo ${PPP_LOCAL} | tr . ' ')) ip addr add ${ipv6_network}1/64 dev ${TUNIFACE} ip -6 route replace "${ipv6_network}/64" dev ${IFACE} metric 1 echo " interface ${IFACE} { AdvSendAdvert on; MinRtrAdvInterval 3; MaxRtrAdvInterval 10; AdvLinkMTU 1280; prefix ${ipv6_network}/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; AdvValidLifetime 86400; AdvPreferredLifetime 86400; }; }; " >> /etc/radvd.conf let "i=i+1" done systemctl restart radvd