Pular para o conteúdo principal

Referência de Configuração do OmniEPDG

OmniEPDG é configurado via config/runtime.exs e variáveis de ambiente. Toda configuração voltada para o cliente é realizada em tempo de execução - os padrões de tempo de compilação estão embutidos na versão e não são expostos.

Para implantações em contêineres, use variáveis de ambiente conforme documentado na seção Referência de Variáveis de Ambiente.

Índice

Estrutura de Configuração

Arquivo de Configuração

Toda a configuração é feita em config/runtime.exs. Este arquivo é lido quando o OmniEPDG inicia e suporta substituição de variáveis de ambiente para implantações em contêineres.

Exemplo de Configuração

# config/runtime.exs
config :omniepdg,
# Configurações do servidor IKEv2
listen_ip: {0, 0, 0, 0},
port_500: 500,
port_4500: 4500,

# Modo VPN: :simple (quebra local) ou :gtp (PGW via GTP-C)
vpn_mode: :simple,

# Configurações do modo VPN Simples
simple_vpn: [
pool_ipv4: "10.45.0.0/16",
pool_ipv6: "2001:db8::/32",
dns_servers_ipv4: ["8.8.8.8", "8.8.4.4"],
dns_servers_ipv6: ["2001:4860:4860::8888", "2001:4860:4860::8844"]
]

# Configuração do painel de controle
config :control_panel,
parent_application: :omniepdg,
parent_application_readable_name: "OmniEPDG",
use_additional_pages: [
{OmniEpdg.Web.DashboardLive, "/", "Dashboard"},
{OmniEpdg.Web.SessionsLive, "/sessions", "Sessions"},
{OmniEpdg.Web.DiameterLive, "/diameter", "Diameter"}
]

# Configuração de Diâmetro (runtime.exs)
config :diameter_ex,
diameter: %{
service_name: :omniepdg,
listen_ip: "0.0.0.0",
listen_port: 3868,
host: "epdg",
realm: "epc.mnc001.mcc001.3gppnetwork.org",
product_name: "OmniEPDG",
vendor_id: 10415,
applications: [
%{application_name: :swx, application_id: 16_777_265, vendor_id: 10415},
%{application_name: :s6b, application_id: 16_777_272, vendor_id: 10415}
],
peers: [
%{host: "hss", ip: "127.0.0.1", port: 3868, transport: :tcp}
]
}

# Configuração do cliente de licença (runtime.exs)
config :license_client,
server_url: "https://license.example.com/api",
product: "omniepdg"

Parâmetros do Servidor IKEv2

O servidor IKEv2 gerencia a interface SWu entre UEs e OmniEPDG. Ele termina túneis IPSec e realiza autenticação EAP-AKA.

ParâmetroTipoObrigatórioPadrãoVar EnvDescrição
listen_ipTuplaNão{0, 0, 0, 0}EPDG_LISTEN_IPEndereço IP para vincular o servidor IKEv2. Use {0, 0, 0, 0} para todas as interfaces. Formato: tupla Erlang {A, B, C, D}.
port_500InteiroNão500EPDG_PORT_500Porta UDP para o protocolo IKE (pré-NAT). Porta padrão do IKE conforme RFC 7296.
port_4500InteiroNão4500EPDG_PORT_4500Porta UDP para IKE NAT-Traversal. Porta padrão NAT-T conforme RFC 7296.
cert_fileStringSim/etc/omniepdg/certs/epdg.crtEPDG_CERT_FILECaminho para o arquivo de certificado X.509 (formato PEM) para autenticação do servidor IKEv2.
key_fileStringSim/etc/omniepdg/certs/epdg.keyEPDG_KEY_FILECaminho para o arquivo de chave privada (formato PEM) correspondente ao certificado.
session_inactivity_timeout_msInteiroNão300000EPDG_SESSION_TIMEOUTTimeout de inatividade da sessão em milissegundos. As sessões são encerradas se nenhum tráfego IKE ou ESP for recebido dentro deste período. O padrão é 5 minutos.

Parâmetros de Segurança de Autenticação

OmniEPDG inclui proteção embutida contra ataques de força bruta e controle de acesso geográfico. Consulte o Guia de Segurança para documentação detalhada.

Parâmetros de Limitação de Taxa

config :omniepdg,
# Limitação de taxa por IP
auth_rate_limit_per_ip: 10,
auth_rate_limit_ip_window_ms: 60_000,
auth_rate_limit_ip_block_ms: 300_000,

# Limitação de taxa por IMSI
auth_rate_limit_per_imsi: 5,
auth_rate_limit_imsi_window_ms: 60_000,
auth_rate_limit_imsi_block_ms: 600_000
ParâmetroTipoObrigatórioPadrãoDescrição
auth_rate_limit_per_ipInteiroNão10Máximo de tentativas de autenticação com falha por IP antes de bloquear.
auth_rate_limit_ip_window_msInteiroNão60000Janela deslizante para contagem de falhas de IP (milissegundos).
auth_rate_limit_ip_block_msInteiroNão300000Duração do bloqueio para IPs que excedem o limite (5 minutos).
auth_rate_limit_per_imsiInteiroNão5Máximo de tentativas de autenticação com falha por IMSI antes de bloquear.
auth_rate_limit_imsi_window_msInteiroNão60000Janela deslizante para contagem de falhas de IMSI (milissegundos).
auth_rate_limit_imsi_block_msInteiroNão600000Duração do bloqueio para IMSIs que excedem o limite (10 minutos).

Parâmetros GeoIP

config :omniepdg,
geoip_enabled: false,
geoip_database_path: "/etc/omniepdg/GeoLite2-Country.mmdb",
geoip_mode: :whitelist,
geoip_countries: ["AU", "NZ"],
geoip_allow_unknown: false,
geoip_fail_open: true
ParâmetroTipoObrigatórioPadrãoDescrição
geoip_enabledBooleanoNãofalseHabilitar bloqueio de países baseado em GeoIP. Requer banco de dados MaxMind GeoLite2.
geoip_database_pathStringNão"/etc/omniepdg/GeoLite2-Country.mmdb"Caminho para o banco de dados MaxMind GeoLite2 Country (formato MMDB).
geoip_modeÁtomoNão:whitelist:whitelist (apenas permitir países listados) ou :blacklist (bloquear países listados).
geoip_countriesListaNão[]Códigos de país ISO 3166-1 alpha-2 (por exemplo, ["AU", "NZ", "US"]).
geoip_allow_unknownBooleanoNãodependente do modoPermitir IPs que não podem ser geolocalizados. Padrão: false para lista branca, true para lista negra.
geoip_fail_openBooleanoNãotruePermitir todas as conexões se o banco de dados GeoIP falhar ao carregar.

Seleção do Modo VPN

ParâmetroTipoObrigatórioPadrãoVar EnvDescrição
vpn_modeÁtomoNão:simpleEPDG_VPN_MODEModo operacional: :simple para quebra de IP local via interface TUN, :gtp para tunelamento através de um PGW via GTPv2-C/GTP-U. Consulte o Guia de Operações para uma comparação detalhada.

Parâmetros de VPN Simples

O bloco de configuração simple_vpn controla a alocação de IP e DNS para o modo VPN Simples. O OmniEPDG suporta pools de endereços IPv4 e IPv6.

config :omniepdg,
simple_vpn: [
pool_ipv4: "10.45.0.0/16",
pool_ipv6: "2001:db8::/32",
dns_servers_ipv4: ["8.8.8.8", "8.8.4.4"],
dns_servers_ipv6: ["2001:4860:4860::8888", "2001:4860:4860::8844"],
p_cscf_ipv4: ["10.4.12.165"],
p_cscf_ipv6: [],
mtu: 1400,
nat_enabled: true
]
ParâmetroTipoObrigatórioPadrãoDescrição
pool_ipv4StringSim"10.45.0.0/16"Pool de endereços IPv4 em notação CIDR. Um IP é alocado por assinante.
pool_ipv6StringNão"2001:db8::/32"Pool de endereços IPv6 em notação CIDR para assinantes de pilha dupla.
dns_servers_ipv4ListaNão["8.8.8.8", "8.8.4.4"]Servidores DNS IPv4 fornecidos aos UEs via PCO (Opções de Configuração de Protocolo).
dns_servers_ipv6ListaNão["2001:4860:4860::8888", "2001:4860:4860::8844"]Servidores DNS IPv6 fornecidos aos UEs via PCO.
p_cscf_ipv4ListaNão[]Endereços IPv4 P-CSCF (Proxy IMS) para VoWiFi. Fornecidos aos UEs para habilitar registro IMS.
p_cscf_ipv6ListaNão[]Endereços IPv6 P-CSCF (Proxy IMS) para VoWiFi.
mtuInteiroNão1400Valor MTU para a interface de túnel. Valores mais baixos reduzem a fragmentação.
nat_enabledBooleanoNãotrueHabilitar NAT para tráfego de assinantes. Quando verdadeiro, regras de mascaramento são aplicadas para tráfego de saída.

Parâmetros de Diâmetro

A configuração de Diâmetro controla as interfaces SWx (HSS) e S6b (PGW). Quando diameter_enabled é true, o OmniEPDG inicia a pilha de Diâmetro e se conecta aos pares configurados.

config :diameter_ex,
diameter: %{
service_name: :omniepdg,
listen_ip: "0.0.0.0",
listen_port: 3868,
host: "epdg",
realm: "epc.mnc001.mcc001.3gppnetwork.org",
product_name: "OmniEPDG",
vendor_id: 10415,
applications: [
%{application_name: :swx, application_id: 16_777_265, vendor_id: 10415},
%{application_name: :s6b, application_id: 16_777_272, vendor_id: 10415}
],
peers: [
%{host: "hss", ip: "10.74.0.21", port: 3868, transport: :tcp}
]
}

Parâmetros de Serviço

ParâmetroTipoObrigatórioPadrãoVar EnvDescrição
service_nameÁtomoNão:omniepdg-Identificador de serviço interno de Diâmetro.
listen_ipStringNão"0.0.0.0"DIA_LISTEN_IPEndereço IP para vincular o ouvinte de Diâmetro para conexões de entrada.
listen_portInteiroNão3868DIA_LISTEN_PORTPorta do ouvinte de Diâmetro. A porta padrão é 3868 conforme RFC 6733.
hostStringSim"epdg"DIA_HOSTOrigin-Host de Diâmetro (sem realm). Combinado com o realm para formar a identidade completa de Diâmetro.
realmStringSim"epc.mnc001.mcc001.3gppnetwork.org"DIA_REALMOrigin-Realm de Diâmetro conforme RFC 6733. Deve corresponder ao domínio da rede do operador.
product_nameStringNão"OmniEPDG"-Valor AVP Product-Name no CER de Diâmetro.
vendor_idInteiroNão10415-Valor AVP Vendor-Id. 10415 é o ID do fornecedor 3GPP.

Parâmetros de Par

Cada entrada na lista peers define uma conexão de par de Diâmetro (tipicamente para o HSS).

ParâmetroTipoObrigatórioPadrãoVar EnvDescrição
hostStringSim-HSS_HOSTIdentidade de Diâmetro do par (Origin-Host). Deve corresponder à identidade configurada do par.
ipStringSim-HSS_IPEndereço IP do par para conexão TCP/SCTP.
portInteiroNão3868HSS_PORTPorta de Diâmetro do par.
transportÁtomoNão:tcp-Protocolo de transporte: :tcp ou :sctp.

IDs de Aplicação

AplicaçãoIDVendor IDInterfaceReferência
SWx1677726510415ePDG ↔ HSS3GPP TS 29.273
S6b1677727210415AAA ↔ PGW3GPP TS 29.273

Configuração do Cliente de Licença

O cliente de licença valida o OmniEPDG contra um servidor de licença.

config :license_client,
server_url: "https://license.example.com/api",
product: "omniepdg"
ParâmetroTipoObrigatórioPadrãoVar EnvDescrição
server_urlStringSim-LICENSE_SERVER_URLURL do endpoint da API do servidor de licença.
productStringNão"omniepdg"-Identificador do produto para validação de licença.

Configuração do Painel de Controle

O painel de controle web fornece capacidades de monitoramento e gerenciamento.

config :control_panel,
port: 4000
ParâmetroTipoObrigatórioPadrãoVar EnvDescrição
portInteiroNão4000CONTROL_PANEL_PORTPorta HTTP para a interface web do painel de controle.

Configuração de Métricas do Prometheus

OmniEPDG expõe métricas do Prometheus via HTTP para monitoramento e alerta.

config :omniepdg,
prometheus: %{
port: 9568
}
ParâmetroTipoObrigatórioPadrãoVar EnvDescrição
portInteiroNão9568PROMETHEUS_PORTPorta HTTP para o endpoint de métricas do Prometheus (/metrics).

Métricas Expostas

Métricas de Contador (Baseadas em Eventos):

  • epdg_ikev2_session_initiated_count - Trocas IKE_SA_INIT iniciadas
  • epdg_ikev2_session_established_count - SAs IKE estabelecidas com sucesso
  • epdg_ikev2_session_failed_count - Falhas na criação de SA IKE (por motivo)
  • epdg_eap_identity_count - Solicitações de identidade EAP
  • epdg_eap_aka_challenge_count - Desafios EAP-AKA enviados
  • epdg_eap_aka_success_count - Autenticações EAP-AKA bem-sucedidas
  • epdg_eap_aka_failure_count - Autenticações EAP-AKA falhadas (por motivo)
  • epdg_eap_aka_sync_failure_count - Falhas de sincronização EAP-AKA SQN
  • epdg_diameter_swx_mar_count - Solicitações de Autenticação Multimídia (por resultado)
  • epdg_diameter_swx_sar_count - Solicitações de Atribuição do Servidor (por resultado)
  • epdg_diameter_s6b_aar_count - Solicitações AA tratadas (por resultado)
  • epdg_diameter_s6b_str_count - Solicitações de Término de Sessão
  • epdg_session_created_count - Sessões criadas (por vpn_mode)
  • epdg_session_terminated_count - Sessões encerradas (por motivo)
  • epdg_esp_packets_in_count - Pacotes ESP descriptografados
  • epdg_esp_packets_out_count - Pacotes ESP criptografados
  • epdg_ip_allocated_count - Endereços IP alocados (por tipo)
  • epdg_ip_released_count - Endereços IP liberados (por tipo)

Métricas de Gauge (Consultadas a cada 5s):

  • epdg_sessions_active_count - Total de sessões ativas
  • epdg_sessions_by_state_count - Sessões por estado da FSM
  • epdg_ip_pool_allocated_count - IPs atualmente alocados
  • epdg_ip_pool_available_count - IPs disponíveis no pool
  • epdg_ip_pool_utilization_ratio - Utilização do pool (0.0-1.0)
  • epdg_diameter_swx_pending_count - Solicitações SWx pendentes
  • epdg_diameter_s6b_active_sessions_count - Sessões S6b ativas

Métricas de Histograma (Rastreamento de Latência):

  • epdg_auth_duration_ms - Duração total do fluxo de autenticação
  • epdg_diameter_swx_mar_latency_ms - Tempo de resposta MAR
  • epdg_diameter_swx_sar_latency_ms - Tempo de resposta SAR
  • epdg_session_duration_seconds - Tempo de vida da sessão

Métricas de VM:

  • vm_memory_total - Memória total da VM
  • vm_memory_processes - Memória do processo
  • vm_memory_binary - Memória binária
  • vm_memory_ets - Memória da tabela ETS
  • vm_system_info_process_count - Processos em execução
  • vm_system_info_port_count - Portas abertas
  • vm_statistics_run_queue - Fila de execução do escalonador

Configuração de Coleta do Prometheus

scrape_configs:
- job_name: 'omniepdg'
static_configs:
- targets: ['localhost:9568']

Referência de Timeout

Todos os timeouts internos da FSM são codificados. Estes governam quanto tempo as máquinas de estado esperam por respostas antes de considerá-las falhadas.

TimeoutValorModoContextoDescrição
Resposta GTP10.000 msGTPFSM UE ePDGTempo máximo de espera pela Resposta de Criação/Exclusão de Sessão GTPv2-C do PGW.
Resposta SWm10.000 msAmbosFSM UE ePDGTempo máximo de espera pela resposta interna de Diâmetro SWm (DER/DEA, STR/STA).
Resposta S6b10.000 msGTPFSM UE AAATempo máximo de espera pela resposta de Diâmetro S6b (ASR/ASA).

Referência de Variáveis de Ambiente

As variáveis de ambiente são lidas em config/runtime.exs e substituem os padrões de tempo de compilação.

Servidor IKEv2

VariávelPadrãoDescrição
EPDG_LISTEN_IP"0.0.0.0"Endereço de vinculação do servidor IKEv2 (formato decimal pontuado, por exemplo, "10.0.0.1").
EPDG_PORT_500"500"Porta do protocolo IKE.
EPDG_PORT_4500"4500"Porta de NAT-Traversal do IKE.
EPDG_CERT_FILE"/etc/omniepdg/certs/epdg.crt"Caminho para o certificado do servidor IKEv2 (PEM).
EPDG_KEY_FILE"/etc/omniepdg/certs/epdg.key"Caminho para a chave privada do servidor IKEv2 (PEM).
EPDG_SESSION_TIMEOUT"300000"Timeout de inatividade da sessão em milissegundos.

Modo VPN

VariávelPadrãoDescrição
EPDG_VPN_MODE"simple"Modo VPN: "simple" ou "gtp".

Diâmetro

VariávelPadrãoDescrição
DIA_LISTEN_IP"0.0.0.0"Endereço de vinculação do ouvinte de Diâmetro.
DIA_LISTEN_PORT"3868"Porta do ouvinte de Diâmetro.
DIA_HOST"epdg"Origin-Host de Diâmetro (sem realm).
DIA_REALM"epc.mnc001.mcc001.3gppnetwork.org"Origin-Realm de Diâmetro.

Par HSS

VariávelPadrãoDescrição
HSS_HOST"hss"Identidade de Diâmetro do HSS (Origin-Host).
HSS_IP"127.0.0.1"Endereço IP do HSS.
HSS_PORT"3868"Porta de Diâmetro do HSS.

Licença, Painel de Controle e Métricas

VariávelPadrãoDescrição
LICENSE_SERVER_URL-URL da API do servidor de licença (obrigatório).
CONTROL_PANEL_PORT"4000"Porta HTTP do painel de controle.
PROMETHEUS_PORT"9568"Porta HTTP das métricas do Prometheus (endpoint /metrics).

Exemplo: Docker Compose

services:
omniepdg:
image: omniepdg:latest
environment:
# IKEv2
EPDG_LISTEN_IP: "0.0.0.0"
EPDG_CERT_FILE: "/certs/epdg.crt"
EPDG_KEY_FILE: "/certs/epdg.key"

# Modo VPN
EPDG_VPN_MODE: "simple"

# Diâmetro
DIA_HOST: "epdg"
DIA_REALM: "epc.mnc001.mcc001.3gppnetwork.org"
HSS_HOST: "hss"
HSS_IP: "10.74.0.21"
HSS_PORT: "3868"

# Licença
LICENSE_SERVER_URL: "https://license.example.com/api"

# Painel de controle
CONTROL_PANEL_PORT: "4000"

# Métricas do Prometheus
PROMETHEUS_PORT: "9568"
ports:
- "500:500/udp"
- "4500:4500/udp"
- "4000:4000"
- "9568:9568"
volumes:
- ./certs:/certs:ro
cap_add:
- NET_ADMIN