frp 소개 및 활용 방안
frp(Fast Reverse Proxy)는 오픈소스 기반의 리버스 프록시 도구로, 방화벽 뒤에 위치한 내부 네트워크 장치를 외부에서 접근 가능하게 만드는 '내부망 터널링' 솔루션입니다. 예를 들어 저사양의 클라우드 서버(예: 알리바바 클라우드 ECS)를 하나 확보하고, 고성능의 개인 PC를 가정 내에 두면, 이 PC의 자원을 frp를 통해 외부에서 원격으로 사용할 수 있습니다.
이 방식은 자체 소스 코드 저장소(Git 서버), 지속적 통합/배포(CI/CD) 파이프라인, 개인 웹사이트, 소규모 커뮤니티 포럼 또는 실시간 주식 데이터 분석 시스템 등 다양한 개인용 인프라 구축에 적합합니다.
서버 측 설정 (클라우드 인스턴스)
다음은 frp 서버(frps)의 구성 파일 frps.yaml 예시입니다. 이 설정은 클라우드 상의 서버에서 실행됩니다.
bindAddr: "0.0.0.0"
bindPort: 7000
authentication:
method: token
token: "strong_secret_token_123"
log:
level: info
to: /var/log/frps.log
maxDays: 7
webServer:
addr: 0.0.0.0
port: 7500
user: admin
password: securepass
tcpMux:
enable: true
maxPoolCount: 100
- bindAddr: 모든 외부 접속을 허용하기 위해
0.0.0.0으로 설정. - bindPort: 클라이언트가 연결할 기본 TCP 포트.
- token: 보안 인증을 위한 비밀 토큰. 실제 운영 시 복잡한 값 사용 권장.
- webServer: 관리자 대시보드 활성화.
http://<서버IP>:7500으로 접속하여 현재 연결 상태 확인 가능. - tcpMux: 다중 연결을 단일 TCP 연결로 병합하여 성능 향상.
클라이언트 측 설정 (내부 장비)
가정 내 컴퓨터에서 실행되는 frp 클라이언트(frps)는 다음과 같은 frpc.yaml 설정을 사용합니다.
serverAddr: "your_cloud_server_ip"
serverPort: 7000
authentication:
method: token
token: "strong_secret_token_123"
log:
level: info
to: ./frpc.log
maxDays: 7
tcpMux:
enable: true
proxies:
- name: home-ssh
type: tcp
localIP: 127.0.0.1
localPort: 22
remotePort: 7001
- name: internal-web
type: http
localPort: 8200
customDomains: [home.yourdomain.com]
- serverAddr: 클라우드 서버의 공인 IP 주소.
- proxies 섹션:
- TCP 프록시 (SSH): 외부에서는
ssh -p 7001 user@your_cloud_server_ip명령으로 내부 SSH 서비스에 접근 가능. - HTTP 프록시:
home.yourdomain.com도메인을 서버 IP로 DNS 설정 후, 일반 웹 브라우저로 내부 웹 애플리케이션에 접근 가능.
- TCP 프록시 (SSH): 외부에서는
방화벽 및 보안 고려사항
클라우드 서버의 보안 그룹 또는 로컬 방화벽(iptables 등)에서 다음 포트를 개방해야 합니다:
- 7000: 클라이언트 연결용
- 7001: SSH 터널용
- 7500: 관리자 대시보드 (보안상 필요 시 127.0.0.1만 허용하거나 비밀번호 강화)
- 8200: HTTP 서비스용 (선택적)
대시보드는 외부 노출 시 정보 유출 위험이 있으므로, 공개 IP에서 접근 제한을 두거나 HTTPS + 강력한 인증 조합을 사용하는 것이 좋습니다.
실행 방법
서버와 클라이언트 모두 바이너리 파일을 다운로드 후 아래 명령어로 실행합니다:
# 서버 실행
./frps -c ./frps.yaml
# 클라이언트 실행
./frpc -c ./frpc.yaml
시스템 부팅 시 자동 실행이 필요하면 systemd 서비스 또는 launchd 등을 활용해 등록할 수 있습니다.