> ## Documentation Index
> Fetch the complete documentation index at: https://frp.xdr.ooo/llms.txt
> Use this file to discover all available pages before exploring further.

# 방화벽 & NAT

> 공인 IP 직접 구성과 방화벽/NAT 뒤 배포의 차이

# 방화벽 & NAT

원격 **Client**에는 일반적으로 inbound port forwarding이 필요하지 않습니다. 반대로 **FRP Server 측 public entry point**는 control, enrollment, published service를 받을 수 있어야 합니다.

## 구성 A — Server가 공인 IP를 직접 가짐

```mermaid theme={null}
flowchart LR
    C[Remote Client\nNAT 뒤] -->|outbound 443 / 6099| S[FRP Server\nPublic IP]
    U[Internet user] -->|assigned 6000-6098 port| S
```

Direct 기본:

```text theme={null}
TCP 443       FRP control
TCP 6099      Enrollment / management HTTPS
TCP 6000-6098 Published services
```

## 구성 B — Server가 Firewall/NAT 뒤 private IP

```mermaid theme={null}
flowchart LR
    C[Remote Client] -->|public 8443 / 9443| F[Firewall / NAT\n203.0.113.10]
    U[Internet user] -->|public service port| F
    F -->|8443 -> 443| S[FRP Server\n192.0.2.50]
    F -->|9443 -> 6099| S
    F -->|6000-6098 -> same ports| S
```

예시 DNAT:

```text theme={null}
203.0.113.10:8443       -> 192.0.2.50:443
203.0.113.10:9443       -> 192.0.2.50:6099
203.0.113.10:6000-6098  -> 192.0.2.50:6000-6098
```

Client에는 내부 IP가 아니라 **외부에서 보이는 public control/enrollment endpoint**를 사용해야 합니다.

## Published service port는 가능하면 1:1

```mermaid theme={null}
flowchart LR
    R[Server registry\nservice port 6001] --> F[Firewall]
    F -->|6001 -> 6001| S[Private FRP Server]
```

Registry의 persistent port reservation과 실제 사용자가 접속하는 Internet port를 일치시키면 운영과 troubleshooting이 훨씬 단순해집니다.

## 누가 무엇을 설정하나요?

| 항목                              | FRP Auto Deploy가 자동 설정? |
| ------------------------------- | ----------------------- |
| FRP server/client config        | **예**                   |
| Service public-port reservation | **예**                   |
| AWS Security Group              | 아니오                     |
| OCI Security List/NSG           | 아니오                     |
| 외부 Firewall/DNAT                | 아니오                     |
| UFW/firewalld/iptables          | 아니오                     |
| DNS record                      | 아니오                     |
| SSH account/key                 | 아니오                     |

## Hairpin NAT / Split DNS

내부 사용자가 `fw.example.com`을 조회했을 때 public IP로 돌아가면 firewall이 hairpin NAT를 지원해야 내부 FRP server로 다시 들어올 수 있습니다.

```mermaid theme={null}
flowchart LR
    I[Internal user] -->|public hostname| F[Firewall]
    F -. hairpin NAT needed .-> S[Internal FRP Server]
```

지원하지 않는다면 split DNS 같은 내부 DNS 설계를 고려하세요.

## NAT 문제 확인 순서

1. Public DNS/IP가 올바른 firewall을 가리키는지
2. Public control port가 내부 FRP control listen port로 DNAT되는지
3. Public enrollment HTTPS가 allocator/listen port로 DNAT되는지
4. Published service port가 열려 있고 가능하면 1:1인지
5. Client가 자기 네트워크에서 **public endpoint**에 도달 가능한지
6. Server `frpctl doctor`가 topology 문제를 보고하는지
