# Relay RSFN via Cecresa - lado Cecresa pronto e ações Monetarie

Data: 2026-06-21
Ambiente: homologação
Status: lado Cecresa **construído e validado**. Lado Monetarie **executado em 2026-06-21**
(peering aceito + rota na RT exclusiva do egress + override DNS no BIND da VM via SSM).
Camada de rede **completa e validada** (TCP nas 5 portas + certificado do BACEN ponta a ponta).
Falta apenas o teste funcional de mensagem (critério #6 do runbook), que depende do BACEN/RTM.

Execução isolada documentada em: `docs/plans/2026-06-21-rsfn-relay-monetarie-isolado-design.md`.

Complementa: `2026-06-21-cecresa-rsfn-relay-runbook.md`.

## 1. O que já está pronto na AWS Cecresa (conta 364807861246, sa-east-1)

| Recurso | ID / valor |
|---|---|
| Relay EC2 (HAProxy, t4g.large, AL2023 arm64, IMDSv2, SSM-only, sem IP público) | `i-022ffea9f507098ad` |
| VPC Cecresa (homolog, tem o caminho RSFN via Direct Connect) | `vpc-0a8466e16719bc8fd` (`172.16.68.0/22`) |
| Subnet do relay (`cecresa-rsfn`, AZ sa-east-1a) | `subnet-062bca1f9373aa412` (`172.16.70.0/24`) |
| Security Group do relay (ingress somente de `192.168.40.10/32`) | `sg-0fb9bcad750d59434` |
| VPC Peering Cecresa para Monetarie | `pcx-0e15a54db2a1fc8b1` |
| Rota de retorno na `cecresa-rsfn-rt` | `192.168.40.10/32 -> pcx-0e15a54db2a1fc8b1` |

### Mapa de IPs do relay (um IP privado por hostname RSFN)

| Hostname RSFN | IP privado no relay Cecresa | Porta | Backend BACEN (ativo/ativo ou primário/backup) |
|---|---|---:|---|
| `dict-h.pi.rsfn.net.br` | `172.16.70.51` | 16522 | 200.218.66.145 / 200.218.67.209 (round-robin) |
| `dict-np-h.pi.rsfn.net.br` | `172.16.70.52` | 16532 | 200.218.66.147 / 200.218.67.211 (round-robin) |
| `icom-h.pi.rsfn.net.br` | `172.16.70.53` | 16522 | 200.218.66.141 / 200.218.67.205 (round-robin) |
| `icom-sec-h.pi.rsfn.net.br` | `172.16.70.54` | 17522 | 200.218.66.151 / 200.218.67.215 (round-robin) |
| `arq-h.pi.rsfn.net.br` | `172.16.70.55` | 1130 | 200.218.66.143 |

### Validações já feitas (lado Cecresa)
- 9/9 backends BACEN acessíveis via TCP a partir do relay, incluindo `icom-sec-h:17522`, que só falhava em ICMP.
- HAProxy encaminhando ponta a ponta: `openssl s_client` através do frontend `172.16.70.51:16522` retornou o **certificado de servidor do BACEN** (`O=BANCO CENTRAL DO BRASIL, CN=*.pi.rsfn.net.br`, emissor ICP-Brasil/SERPRO). O relay não termina TLS. O certificado do cliente da Monetarie chega intacto no BACEN.
- O relay reorigina a partir da faixa `172.16.70.0/24`, a mesma família de origem RSFN liberada para o forwarder DNS `172.16.70.10`.

## 2. Ações na Monetarie (conta 990933657879, sa-east-1)

### 2.1 Aceitar o peering
```
aws ec2 accept-vpc-peering-connection --region sa-east-1 \
  --vpc-peering-connection-id pcx-0e15a54db2a1fc8b1
```

### 2.2 Rota para o relay (na route table da subnet onde está 192.168.40.10)
```
aws ec2 create-route --region sa-east-1 \
  --route-table-id <RT_DA_SUBNET_192.168.40.x> \
  --destination-cidr-block 172.16.70.0/24 \
  --vpc-peering-connection-id pcx-0e15a54db2a1fc8b1
```
(pode restringir aos /32 .51-.55 se preferir; `172.16.70.0/24` é mais simples e não colide com nada.)

### 2.3 Egress da VM / SG / NACL
Permitir saída de `192.168.40.10` para `172.16.70.51-55` nas portas TCP `16522, 16532, 17522, 1130`.

### 2.4 Override DNS na VM RSFN egress (192.168.40.10)
```
dict-h.pi.rsfn.net.br      172.16.70.51
dict-np-h.pi.rsfn.net.br   172.16.70.52
icom-h.pi.rsfn.net.br      172.16.70.53
icom-sec-h.pi.rsfn.net.br  172.16.70.54
arq-h.pi.rsfn.net.br       172.16.70.55
```

### 2.5 Validar (na VM 192.168.40.10)
```
for h in dict-h dict-np-h icom-h icom-sec-h arq-h; do getent ahostsv4 $h.pi.rsfn.net.br; done
nc -vz dict-h.pi.rsfn.net.br 16522
nc -vz dict-np-h.pi.rsfn.net.br 16532
nc -vz icom-h.pi.rsfn.net.br 16522
nc -vz icom-sec-h.pi.rsfn.net.br 17522
nc -vz arq-h.pi.rsfn.net.br 1130
# prova de ponta a ponta (deve voltar o cert do BACEN):
echo | openssl s_client -connect dict-h.pi.rsfn.net.br:16522 -servername dict-h.pi.rsfn.net.br 2>/dev/null | openssl x509 -noout -subject
```

## 3. Importante (sem rodeios)
- A camada de **rede** fica completa após os passos da seção 2, com TCP abrindo e TLS do BACEN retornando.
- O **teste funcional real de mensagem** (DICT/ICOM/ARQ) depende do BACEN/RTM homolog aceitar o certificado e o ISPB da Monetarie chegando por esta origem. Isso é entre Monetarie e BACEN. O relay entrega o handshake intacto, mas não garante a aceitação no nível de aplicação. Critério de aceite #6 do runbook, teste real de mensagem, continua valendo.
- ICOM (`icom-h`/`icom-sec-h`) e a interface de mensageria SPI/PIX da RSFN usam **mTLS**, na mesma família de transporte do DICT, portas 16522/17522. **Não é IBM MQ**. O relay L4 encaminha o handshake intacto e o certificado de servidor do BACEN volta pelo relay. O IBM MQ do stack Cecresa e do domínio SPB, porta 1414, não tem relação com este relay.

## 4. Rollback (lado Cecresa, quando encerrar)
```
# parar/terminar relay
aws ec2 terminate-instances --region sa-east-1 --instance-ids i-022ffea9f507098ad
# remover rota de retorno
aws ec2 delete-route --region sa-east-1 --route-table-id rtb-0abc62c10b71f624d --destination-cidr-block 192.168.40.10/32
# remover peering
aws ec2 delete-vpc-peering-connection --region sa-east-1 --vpc-peering-connection-id pcx-0e15a54db2a1fc8b1
# remover SG
aws ec2 delete-security-group --region sa-east-1 --group-id sg-0fb9bcad750d59434
```
