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
- Parâmetros do Servidor IKEv2
- Parâmetros de Segurança de Autenticação
- Seleção do Modo VPN
- Parâmetros de VPN Simples
- Parâmetros de Diâmetro
- Configuração do Cliente de Licença
- Configuração do Painel de Controle
- Configuração de Métricas do Prometheus
- Referência de Variáveis de Ambiente
- Referência de Timeout
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âmetro | Tipo | Obrigatório | Padrão | Var Env | Descrição |
|---|---|---|---|---|---|
listen_ip | Tupla | Não | {0, 0, 0, 0} | EPDG_LISTEN_IP | Endereço IP para vincular o servidor IKEv2. Use {0, 0, 0, 0} para todas as interfaces. Formato: tupla Erlang {A, B, C, D}. |
port_500 | Inteiro | Não | 500 | EPDG_PORT_500 | Porta UDP para o protocolo IKE (pré-NAT). Porta padrão do IKE conforme RFC 7296. |
port_4500 | Inteiro | Não | 4500 | EPDG_PORT_4500 | Porta UDP para IKE NAT-Traversal. Porta padrão NAT-T conforme RFC 7296. |
cert_file | String | Sim | /etc/omniepdg/certs/epdg.crt | EPDG_CERT_FILE | Caminho para o arquivo de certificado X.509 (formato PEM) para autenticação do servidor IKEv2. |
key_file | String | Sim | /etc/omniepdg/certs/epdg.key | EPDG_KEY_FILE | Caminho para o arquivo de chave privada (formato PEM) correspondente ao certificado. |
session_inactivity_timeout_ms | Inteiro | Não | 300000 | EPDG_SESSION_TIMEOUT | Timeout 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âmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
auth_rate_limit_per_ip | Inteiro | Não | 10 | Máximo de tentativas de autenticação com falha por IP antes de bloquear. |
auth_rate_limit_ip_window_ms | Inteiro | Não | 60000 | Janela deslizante para contagem de falhas de IP (milissegundos). |
auth_rate_limit_ip_block_ms | Inteiro | Não | 300000 | Duração do bloqueio para IPs que excedem o limite (5 minutos). |
auth_rate_limit_per_imsi | Inteiro | Não | 5 | Máximo de tentativas de autenticação com falha por IMSI antes de bloquear. |
auth_rate_limit_imsi_window_ms | Inteiro | Não | 60000 | Janela deslizante para contagem de falhas de IMSI (milissegundos). |
auth_rate_limit_imsi_block_ms | Inteiro | Não | 600000 | Duraçã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âmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
geoip_enabled | Booleano | Não | false | Habilitar bloqueio de países baseado em GeoIP. Requer banco de dados MaxMind GeoLite2. |
geoip_database_path | String | Não | "/etc/omniepdg/GeoLite2-Country.mmdb" | Caminho para o banco de dados MaxMind GeoLite2 Country (formato MMDB). |
geoip_mode | Átomo | Não | :whitelist | :whitelist (apenas permitir países listados) ou :blacklist (bloquear países listados). |
geoip_countries | Lista | Não | [] | Códigos de país ISO 3166-1 alpha-2 (por exemplo, ["AU", "NZ", "US"]). |
geoip_allow_unknown | Booleano | Não | dependente do modo | Permitir IPs que não podem ser geolocalizados. Padrão: false para lista branca, true para lista negra. |
geoip_fail_open | Booleano | Não | true | Permitir todas as conexões se o banco de dados GeoIP falhar ao carregar. |
Seleção do Modo VPN
| Parâmetro | Tipo | Obrigatório | Padrão | Var Env | Descrição |
|---|---|---|---|---|---|
vpn_mode | Átomo | Não | :simple | EPDG_VPN_MODE | Modo 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âmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
pool_ipv4 | String | Sim | "10.45.0.0/16" | Pool de endereços IPv4 em notação CIDR. Um IP é alocado por assinante. |
pool_ipv6 | String | Não | "2001:db8::/32" | Pool de endereços IPv6 em notação CIDR para assinantes de pilha dupla. |
dns_servers_ipv4 | Lista | Nã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_ipv6 | Lista | Não | ["2001:4860:4860::8888", "2001:4860:4860::8844"] | Servidores DNS IPv6 fornecidos aos UEs via PCO. |
p_cscf_ipv4 | Lista | Não | [] | Endereços IPv4 P-CSCF (Proxy IMS) para VoWiFi. Fornecidos aos UEs para habilitar registro IMS. |
p_cscf_ipv6 | Lista | Não | [] | Endereços IPv6 P-CSCF (Proxy IMS) para VoWiFi. |
mtu | Inteiro | Não | 1400 | Valor MTU para a interface de túnel. Valores mais baixos reduzem a fragmentação. |
nat_enabled | Booleano | Não | true | Habilitar 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âmetro | Tipo | Obrigatório | Padrão | Var Env | Descrição |
|---|---|---|---|---|---|
service_name | Átomo | Não | :omniepdg | - | Identificador de serviço interno de Diâmetro. |
listen_ip | String | Não | "0.0.0.0" | DIA_LISTEN_IP | Endereço IP para vincular o ouvinte de Diâmetro para conexões de entrada. |
listen_port | Inteiro | Não | 3868 | DIA_LISTEN_PORT | Porta do ouvinte de Diâmetro. A porta padrão é 3868 conforme RFC 6733. |
host | String | Sim | "epdg" | DIA_HOST | Origin-Host de Diâmetro (sem realm). Combinado com o realm para formar a identidade completa de Diâmetro. |
realm | String | Sim | "epc.mnc001.mcc001.3gppnetwork.org" | DIA_REALM | Origin-Realm de Diâmetro conforme RFC 6733. Deve corresponder ao domínio da rede do operador. |
product_name | String | Não | "OmniEPDG" | - | Valor AVP Product-Name no CER de Diâmetro. |
vendor_id | Inteiro | Não | 10415 | - | 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âmetro | Tipo | Obrigatório | Padrão | Var Env | Descrição |
|---|---|---|---|---|---|
host | String | Sim | - | HSS_HOST | Identidade de Diâmetro do par (Origin-Host). Deve corresponder à identidade configurada do par. |
ip | String | Sim | - | HSS_IP | Endereço IP do par para conexão TCP/SCTP. |
port | Inteiro | Não | 3868 | HSS_PORT | Porta de Diâmetro do par. |
transport | Átomo | Não | :tcp | - | Protocolo de transporte: :tcp ou :sctp. |
IDs de Aplicação
| Aplicação | ID | Vendor ID | Interface | Referência |
|---|---|---|---|---|
| SWx | 16777265 | 10415 | ePDG ↔ HSS | 3GPP TS 29.273 |
| S6b | 16777272 | 10415 | AAA ↔ PGW | 3GPP 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âmetro | Tipo | Obrigatório | Padrão | Var Env | Descrição |
|---|---|---|---|---|---|
server_url | String | Sim | - | LICENSE_SERVER_URL | URL do endpoint da API do servidor de licença. |
product | String | Nã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âmetro | Tipo | Obrigatório | Padrão | Var Env | Descrição |
|---|---|---|---|---|---|
port | Inteiro | Não | 4000 | CONTROL_PANEL_PORT | Porta 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âmetro | Tipo | Obrigatório | Padrão | Var Env | Descrição |
|---|---|---|---|---|---|
port | Inteiro | Não | 9568 | PROMETHEUS_PORT | Porta 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 iniciadasepdg_ikev2_session_established_count- SAs IKE estabelecidas com sucessoepdg_ikev2_session_failed_count- Falhas na criação de SA IKE (por motivo)epdg_eap_identity_count- Solicitações de identidade EAPepdg_eap_aka_challenge_count- Desafios EAP-AKA enviadosepdg_eap_aka_success_count- Autenticações EAP-AKA bem-sucedidasepdg_eap_aka_failure_count- Autenticações EAP-AKA falhadas (por motivo)epdg_eap_aka_sync_failure_count- Falhas de sincronização EAP-AKA SQNepdg_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ãoepdg_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 descriptografadosepdg_esp_packets_out_count- Pacotes ESP criptografadosepdg_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 ativasepdg_sessions_by_state_count- Sessões por estado da FSMepdg_ip_pool_allocated_count- IPs atualmente alocadosepdg_ip_pool_available_count- IPs disponíveis no poolepdg_ip_pool_utilization_ratio- Utilização do pool (0.0-1.0)epdg_diameter_swx_pending_count- Solicitações SWx pendentesepdg_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çãoepdg_diameter_swx_mar_latency_ms- Tempo de resposta MARepdg_diameter_swx_sar_latency_ms- Tempo de resposta SARepdg_session_duration_seconds- Tempo de vida da sessão
Métricas de VM:
vm_memory_total- Memória total da VMvm_memory_processes- Memória do processovm_memory_binary- Memória bináriavm_memory_ets- Memória da tabela ETSvm_system_info_process_count- Processos em execuçãovm_system_info_port_count- Portas abertasvm_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.
| Timeout | Valor | Modo | Contexto | Descrição |
|---|---|---|---|---|
| Resposta GTP | 10.000 ms | GTP | FSM UE ePDG | Tempo máximo de espera pela Resposta de Criação/Exclusão de Sessão GTPv2-C do PGW. |
| Resposta SWm | 10.000 ms | Ambos | FSM UE ePDG | Tempo máximo de espera pela resposta interna de Diâmetro SWm (DER/DEA, STR/STA). |
| Resposta S6b | 10.000 ms | GTP | FSM UE AAA | Tempo 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ável | Padrão | Descriçã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ável | Padrão | Descrição |
|---|---|---|
EPDG_VPN_MODE | "simple" | Modo VPN: "simple" ou "gtp". |
Diâmetro
| Variável | Padrão | Descriçã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ável | Padrão | Descriçã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ável | Padrão | Descriçã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