Descripción del caso de uso
- Cliente con tipo de acceso Q-in-Q
- FastDPI — gestión y control del tráfico
- FastPCRF — peticiones proxy entre fastDPI y Radius
- Servidor Radius — recibe solicitudes de fastPCRF y genera respuestas con atributos especificados
- Enrutador — responsable de transmitir paquetes a Internet y enrutar de vuelta
- Servidor DHCP — responsable de la asignación de direcciones IP del pool especificado.
Algoritmo de funcionamiento de SSG
A partir de la versión 8.4 de SSG, está disponible el soporte para grupos de direcciones IP para los modos PPPoE y DHCP Radius Proxy.
Anteriormente, en estos modos, SSG esperaba recibir los parámetros de red del suscriptor en Access-Accept desde el servidor Radius. Ahora es posible emitir el nombre del pool de direcciones desde el cual el servidor DHCP debe asignar direcciones a los suscriptores.
Es posible pasar el nombre del pool al servidor DHCP utilizando varias opciones, como 125, 77 y 60 para IPv4, y 15, 17 para IPv6.
En nuestro caso, utilizaremos la opción 125 para IPv4 y 17 para IPv6, ya que estas opciones se añaden siempre en la solicitud. Así, la probabilidad de que se sobrescriban datos críticos es cero.
Para utilizar otras opciones, es necesario configurar el servidor DHCP y el SSG en consecuencia.
Configuración fastPCRF
Para configurar SSG, además de la configuración básica de L2 BRAS, hay que especificar las direcciones de los servidores DHCP y la opción por la que se debe pasar el nombre del pool.
Despliegue y configuración de un servidor dhcpd4 usando namespace
Para empezar, vamos a desplegar otro servidor DHCP en el mismo servidor donde ya está instalado el SSG, y va a estar disponible sólo para la plataforma SSG. Esto es debido a la existencia de varias políticas corporativas que regulan el uso de servidores DHCP para dar servicio a la red interna del operador y a los abonados.
Para ello, limitaremos las interfaces que nuestro servidor DHCP «escuchará» y limitaremos los servidores a los que el servidor DHCP responderá. Los servidores DHCP se ejecutarán en espacios de nombres distintos del espacio de nombres de red común. Vamos a ejecutar los servidores DHCP en los espacios de nombres que son diferentes del espacio de nombres de red común.
En primer lugar, vamos a crear un espacio de nombres:
# ip netns add DHCP
Crear veth:
# ip link add veth0 type veth peer name veth1
Coloca la interfaz en el espacio de nombres:
# ip link set veth1 netns DHCP
Habilita las interfaces y asígnales direcciones:
# ip netns exec DHCP ip link set lo up # ip netns exec DHCP ip link set veth1 up # ip link set veth0 up # ip netns exec DHCP ip addr add 192.168.10.2/30 dev veth1 # ip addr add 192.168.10.1/30 dev veth0
Editar el archivo de configuración del servidor DHCP:
#Declarar la estructura opt125 para VASExperts option space VASEX code width 1 length width 1; option VASEX.poolname code 1 = string; option space vivso code width 4 length width 1; option vivso.VASEX code 43823 = encapsulate VASEX; option vivso.iana code 0 = string; option op125 code 125 = encapsulate vivso; #Direcciones del servidor DNS option domain-name-servers 192.168.1.4, 8.8.8.8; #Establecer el tiempo de arrendamiento default-lease-time 600; max-lease-time 7200; log-facility local7; #Declarar clases class "vas-pool" { match if option VASEX.poolname = "test-pool"; } shared-network MyNetwork { #Declarar una subred para retransmisión, prohibir la emisión de direcciones desde ella a clientes desconocidos subnet 192.168.10.0 netmask 255.255.255.252 { deny unknown-clients; } #Declarar subred para la clase vas-pool subnet 192.168.3.0 netmask 255.255.255.0 { pool { range 192.168.3.10 192.168.3.100; allow members of "vas-pool"; } } } Ejecutar ISC DHCP en el espacio de nombres DHCP: # ip netns exec DHCP dhcpd -cf /etc/dhcp/dhcpd.conf
Despliegue y configuración de servidores kea dhcp6
Utilizaremos el servidor KEA como servidor DHCP IPv6.
Vamos a hacer que el archivo de configuración tenga este aspecto:
{ "Dhcp6": { "interfaces-config": { "interfaces": ["veth3/2a03:dec0:666:2::2"] }, "control-socket": { "socket-type": "unix", "socket-name": "/tmp/kea-dhcp6-ctrl.sock" }, "lease-database": { "type": "memfile", "persist": true, "lfc-interval": 3600 }, "expired-leases-processing": { "reclaim-timer-wait-time": 10, "flush-reclaimed-timer-wait-time": 25, "hold-reclaimed-time": 3600, "max-reclaim-leases": 100, "max-reclaim-time": 250, "unwarned-reclaim-cycles": 5 }, "renew-timer": 120, "rebind-timer": 240, "preferred-lifetime": 180, "valid-lifetime": 300, "option-data": [ { "name": "dns-servers", "data": "2001:4860:4860::8888, 2001:db8:2::100" } ], "shared-networks":[{ "name": "MyNetworks", "relay": { "ip-address": "2a03:dec0:666:2::1" }, "subnet6": [{ "client-class": "test-ipv6-pool", "subnet": "2403:d4c0:aa::/48", "reservation-mode" : "disabled", "pd-pools": [{ "prefix": "2403:d4c0:aa::", "prefix-len": 48, "delegated-len": 63 }], "option-data": [{ "name": "dns-servers", "data": "2001:db8:2::dead:beef, 2001:db8:2::cafe:babe" }] }] }], "client-classes": [{ "name": "test-ipv6-pool", "test": "vendor[43823].option[1].hex == 'test-ipv6-pool'" }] }, "Logging":{ "loggers": [{ "name": "kea-dhcp6", "output_options": [ { "output": "/var/log/kea-dhcp6.log", "flush": true } ], "severity": "DEBUG", "debuglevel": 99 }] } }
Hay que tener en cuenta que el servidor DHCP de KEA para IPv6 no funciona correctamente en direcciones locales de enlace, por lo que utilizaremos direcciones IPv6 globales.
Creemos otro namespace y llamémoslo DHCP6:
# ip netns add DHCP6
Crear veth:
# ip link add veth2 type veth peer name veth3
Pon la interfaz dentro del namespace:
# ip link set veth3 netns DHCP6
Habilite las interfaces y asígneles direcciones:
# ip netns exec DHCP6 ip link set lo up # ip netns exec DHCP6 ip link set veth3 up # ip link set veth0 up # ip netns exec DHCP6 ip addr add 2a03:dec0:666:2::2/64 dev veth3 # ip addr add 2a03:dec0:666:2::1/64 dev veth2
Hay el atributo Framed-Pool en Access-Accept cuando el cliente se conecta:
VasExperts-User-Name = "testuser" Framed-Pool = "test-pool" Framed-IPv6-Pool = "test-ipv6-pool" VasExperts-Enable-Service = "9:on" VasExperts-Multi-IP-User = 1 VasExperts-Service-Profile = "11:user_nat"
Una vez establecida la conexión, comprobamos si las direcciones se han emitido correctamente:
Rec#0 MAC=18:0F:76:01:05:19 login='testuser' SessionId=0x01bc (net=0xbc01) phase=[3] network Times (now=764039602395618 ticks) created: 2020/01/27 14:33:55, -427.849052s (762838183927452 ticks) last packet: 2020/01/27 14:41:02, -0.805806s (764037339656521 ticks) phase start: 2020/01/27 14:33:57, -425.829550s (762843854773358 ticks) session_timeout=0, idle_timeout=300, stop_reason=0 idx_slave=1, idx_iface=0, pppoe_max_mru=1492, acct_started=0, ip4_rejected=0, ip6_rejected=0 LCP: LCP state [9] opened counters: restart=10, failure=5, peer-failure=5, terminate=2 ts_retrans: 2020/01/27 14:33:55, -427.785471s (762838362464891 ticks) MRU=1480 Auth-proto: [3] MS_CHAPv2 request_id=0x34, service_req_id=0x01, my_magic_number=0x5f10c4ae, ping_counter=5 IPCP: IP=192.168.3.13 GW=192.168.1.254 DNS1=192.168.1.4 DNS2=8.8.8.8 Framed-Pool: [test-pool] DHCP-Server=192.168.10.2 lease-time=599 next renew: 2020/01/27 14:41:56, +53.178381s (764188929568748 ticks) IPCP state [9] opened counters: restart=10, failure=5, peer-failure=0, terminate=2 ts_retrans: 2020/01/27 14:33:57, -425.829547s (762843854783043 ticks) request_id=1 Statistics packet/bytes: subs->inet=636/59860, inet->subs=0/0 IP6CP: local=fe80::809a:d869:d86e:d032 prefix=2403:d4c0:aa:2::/64 PD=2403:d4c0:aa:3::/64 Framed-IPv6-Pool: [test-ipv6-pool] Prefix=2403:d4c0:aa:2::/63 server-DUID=[0x0001000125BDB112C2DD08604508] lease-time=240 next renew: 2020/01/27 14:43:33, +150.472972s (764462136946903 ticks) IP6CP state [9] opened counters: restart=10, failure=5, peer-failure=0, terminate=2 ts_retrans: 2020/01/27 14:33:57, -425.826606s (762843863041510 ticks) peer_iface_id=3661548372820007552, dhcpv6_iid=1, request_id=1 Statistics packet/bytes: subs->inet=71/8712, inet->subs=0/0 ---------- TOTAL: 1 recs
Para automatizar la creación del namespace, escribiremos el script createNetworkNamespace.sh y lo añadiremos a autorun (recuerda conceder permisos para ejecutar este script):
#!/bin/bash #If you get "Object "netns" is unknown, try "ip help".", then you should install this modules #yum install -y https://repos.fedorapeople.org/repos/openstack/EOL/openstack-icehouse/epel-6/kernel-2.6.32-358.123.2.openstack.el6.x86_64.rpm #yum install -y https://repos.fedorapeople.org/openstack/EOL/openstack-grizzly/epel-6/iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm #Añadir nuevo namespace ip netns add dhcp #Añadir nuevo enlace ip link add veth0 type veth peer name veth1 #Establecer veth al namespace dhcp ip link set veth1 netns dhcp #Activar la interfaz ip netns exec dhcp ip link set lo up ip netns exec dhcp ip link set veth1 up ip link set veth0 up #Asignar direcciones IP a las interfaces ip netns exec dhcp ip addr add 192.168.10.2/30 dev veth1 ip addr add 192.168.10.1/30 dev veth0 #Ejecutar dhcpd en namespace ip netns exec dhcp dhcpd -cf /etc/dhcp/dhcpd.conf #Añadir nuevo namespace ip netns add dhcp6 #Añadir nuevo enlace ip link add veth2 type veth peer name veth3 #Establecer veth al namespace dhcp ip link set veth3 netns dhcp6 #Activar la interfaz ip link set veth2 up ip netns exec dhcp6 ip link set lo up ip netns exec dhcp6 ip link set veth3 up #Asignar direcciones IP a las interfaces ip addr add 2a03:dec0:666:2::1/64 dev veth2 ip netns exec dhcp6 ip addr add 2a03:dec0:666:2::2/64 dev veth3 #Ejecutar kea en namespace ip netns exec dhcp6 /usr/local/sbin/keactrl start -s dhcp6
Lo añadiremos a autorun a través de rc.local. Para ello, añade una línea como esta a este archivo:
sh /your/path/to/createNetworkNamespace.sh
Ahora, cuando se reinicie el servidor, se crearán los espacios de nombres necesarios y se iniciarán los servidores DHCP en estos espacios de nombres.
El BNG basado en DPI es una solución que permite no sólo la vigilancia de abonados, sino también métricas de calidad de experiencia y equilibrio de tráfico para cada abonado y dispositivo. Póngase en contacto con nosotros para obtener más información sobre la plataforma SSG y su uso en redes de proveedores de servicios.