Descrição do caso de uso
- Cliente com tipo de acesso Q-in-Q
- FastDPI – tratamento e policiamento de tráfego
- FastPCRF – solicitações de proxy entre fastDPI e Radius
- Servidor Radius – recebe solicitações do fastPCRF e gera respostas com atributos especificados
- Roteador – responsável pela transmissão de pacotes para a Internet e pelo roteamento de volta
- Servidor DHCP – responsável pela alocação de endereços IP do pool especificado
.
Algoritmo de operação do SSG
A partir da versão 8.4 do SSG, está disponível o suporte a pools de endereços IP para os modos PPPoE e DHCP Radius Proxy.
Anteriormente, nesses modos, o SSG esperava receber os parâmetros de rede do assinante em Access-Accept do servidor Radius. Agora é possível emitir o nome do pool de endereços a partir do qual o servidor DHCP deve alocar endereços para os assinantes.
É possível passar o nome do pool para o servidor DHCP usando várias opções, como 125, 77 e 60 para IPv4 e 15 e 17 para IPv6.
No nosso caso, usaremos opção 125 para IPv4 e 17 para IPv6, , pois essas opções são sempre adicionadas na solicitação. Portanto, a probabilidade de que os dados críticos sejam substituídos é zero.
Para usar outras opções, você precisa configurar o servidor DHCP e o SSG adequadamente.
Configuração dofastPCRF
Para configurar o SSG, além da configuração básica do BRAS L2, é necessário especificar os endereços dos servidores DHCP e a opção pela qual o nome do pool deve ser passado.
Implantação e configuração de um servidor dhcpd4 usando namespace
Para começar, vamos implantar outro servidor DHCP no mesmo servidor em que o SSG já está instalado, e ele estará disponível somente para a plataforma SSG. Isso se deve à existência de várias políticas corporativas que regulam o uso de servidores DHCP para atender à rede interna e aos assinantes da operadora.
Para isso, limitaremos as interfaces que o nosso servidor DHCP “ouvirá” e limitaremos os servidores aos quais o servidor DHCP responderá. Os servidores DHCP serão executados em namespaces diferentes do namespace de rede comum. Executaremos os servidores DHCP nos namespaces diferentes do namespace de rede comum.
Primeiro, vamos criar um namespace:
# ip netns add DHCP
Crie o veth:
# ip link add veth0 type veth peer name veth1
Coloque a interface no namespace:
# ip link set veth1 netns DHCP
Habilite as interfaces e atribua endereços a elas:
# 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
Edite o arquivo de configuração do servidor DHCP:
#Declarando a estrutura 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 = encapsula o VASEX; option vivso.iana code 0 = string; option op125 code 125 = encapsular vivso; #Endereços do servidor DNS option domain-name-servers 192.168.1.4, 8.8.8.8; #Definição do tempo de leasing default-lease-time 600; max-lease-time 7200; log-facility local7; #Declare as classes classe "vas-pool" { corresponde se a opção VASEX.poolname = "test-pool"; } shared-network MyNetwork { #Declare uma sub-rede para retransmissão, proíba a emissão de endereços dela para clientes desconhecidos subnet 192.168.10.0 netmask 255.255.255.252 { deny unknown-clients; } #Declare a sub-rede para a classe vas-pool subnet 192.168.3.0 netmask 255.255.255.0 { pool { intervalo 192.168.3.10 192.168.3.100; permitir membros de "vas-pool"; } } } Execute o ISC DHCP no namespace DHCP: # ip netns exec DHCP dhcpd -cf /etc/dhcp/dhcpd.conf
Implantação e configuração dos servidores kea dhcp6
Usaremos o servidor KEA como servidor DHCP IPv6.
Vamos fazer com que o arquivo de configuração tenha a seguinte aparência:
{ "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-reclaimed-leases": 100, "max-reclaim-time": 250, "unwarned-reclaim-cycles": 5 }, "renew-timer": 120, "rebind-timer": 240, "preferred-lifetime" (tempo de vida preferido): 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" (gravidade): "DEBUG", "debuglevel": 99 }] } }
Deve-se observar que o servidor DHCP do KEA para IPv6 não funciona corretamente em endereços locais de link, portanto, usaremos endereços IPv6 globais.
Vamos criar outro namespace e nomeá-lo DHCP6:
# ip netns add DHCP6
Crie o veth:
# ip link add veth2 type veth peer name veth3
Coloque a interface dentro do namespace:
# ip link set veth3 netns DHCP6
Habilite as interfaces e atribua endereços a elas:
# 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
Há o atributo Framed-Pool em Access-Accept quando o cliente está conectado:
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"
Depois que a conexão é estabelecida, verificamos se os endereços foram emitidos corretamente:
Rec#0 MAC=18:0F:76:01:05:19 login='testuser' SessionId=0x01bc (net=0xbc01) phase=[3] network Tempo (now=764039602395618 ticks) criado: 2020/01/27 14:33:55, -427.849052s (762838183927452 ticks) último pacote: 2020/01/27 14:41:02, -0.805806s (764037339656521 ticks) início da fase: 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: Estado do LCP [9] aberto contadores: 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 próxima renovação: 2020/01/27 14:41:56, +53.178381s (764188929568748 ticks) Estado do IPCP [9] aberto contadores: restart=10, failure=5, peer-failure=0, terminate=2 ts_retrans: 2020/01/27 14:33:57, -425.829547s (762843854783043 ticks) request_id=1 Pacote/bytes de estatísticas: 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 próxima renovação: 2020/01/27 14:43:33, +150.472972s (764462136946903 ticks) Estado do IP6CP [9] aberto contadores: 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 Pacote/bytes de estatísticas: subs->inet=71/8712, inet->subs=0/0 ---------- TOTAL: 1 recs
Para automatizar a criação do namespace, escreveremos o script createNetworkNamespace.sh e o adicionaremos à execução automática (lembre-se de conceder permissões para executar esse script):
#!/bin/bash #Se você receber a mensagem "Object "netns" is unknown, try "ip help".", então você deve instalar estes módulos #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 #Adicionar novo espaço de nome ip netns add dhcp #Adicionar novo link ip link add veth0 type veth peer name veth1 #Define o veth para o namespace dhcp ip link set veth1 netns dhcp #Ativar a interface ip netns exec dhcp ip link set lo up ip netns exec dhcp ip link set veth1 up ip link set veth0 up #Definir endereços IP para as 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 #Executar o dhcpd no namespace ip netns exec dhcp dhcpd -cf /etc/dhcp/dhcpd.conf #Adicionar novo namespace ip netns add dhcp6 #Adicionar novo link ip link add veth2 type veth peer name veth3 #Define o veth para o namespace dhcp ip link set veth3 netns dhcp6 #Ativar a interface ip link set veth2 up ip netns exec dhcp6 ip link set lo up ip netns exec dhcp6 ip link set veth3 up #Definir endereços IP para as 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 #Executar o kea no namespace ip netns exec dhcp6 /usr/local/sbin/keactrl start -s dhcp6
Nós o adicionaremos à execução automática por meio do rc.local. Para fazer isso, adicione uma linha como esta a esse arquivo:
sh /your/path/to/createNetworkNamespace.sh
Agora, quando o servidor for reinicializado, os namespaces necessários serão criados e os servidores DHCP serão iniciados nesses namespaces.
O DPI-based BNG é uma solução que permite não apenas o policiamento de assinantes, mas também métricas de qualidade de experiência e balanceamento de tráfego para cada assinante e dispositivo. Entre em contato conosco para saber mais sobre a plataforma SSG e seu uso em redes de provedores de serviços.
Assine nosso boletim informativo e fique atualizado sobre os últimos desenvolvimentos e ofertas especiais.