Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
phantun — UDP stream을 Layer 3 및 Layer 4 (NAPT) 방화벽/NAT를 통과할 수 있는 (가짜) TCP 스트림으로 변환합니다. | Kitploit
도구/GitHubGitHub/dndx/phantun
IDS/IPS EvasionNetwork Security
GitHubdndx/phantun

phantun

UDP stream을 Layer 3 및 Layer 4 (NAPT) 방화벽/NAT를 통과할 수 있는 (가짜) TCP 스트림으로 변환합니다.

저장소 보기
2.4k21710개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Phantun

가벼우면서 빠른 UDP to TCP 난독화 도구입니다.

GitHub Workflow Status docs.rs

목차

  • Phantun
  • 최신 릴리스
  • 개요
  • 사용법
    • 1. 커널 IP 포워딩 활성화
    • 2. 필요한 방화벽 규칙 추가
      • 클라이언트
        • nftables 사용
        • iptables 사용
      • 서버
        • nftables 사용
        • iptables 사용
    • 3. Phantun 바이너리를 루트 권한 없이 실행 (선택사항)
    • 4. Phantun 데몬 시작
      • 서버
      • 클라이언트
  • MTU 오버헤드
    • WireGuard용 MTU 계산
  • 버전 호환성
  • 문서
  • 성능
  • 향후 계획
  • udp2raw와의 비교
  • 라이선스

최신 릴리스

v0.8.1

Phantun의 MIPS 아키텍처 지원

Rust는 2023년부터 MIPS 기반 플랫폼에 대해 Tier 3 지원만 제공합니다. 따라서 Phantun의 MIPS 빌드는 nightly Rust 툴체인을 사용하여 빌드되며, 최선의 노력 기반으로만 제공됩니다.

개요

Phantun은 UDP 패킷을 TCP 연결로 난독화하는 프로젝트입니다. 최소한의 처리 및 캡슐화 오버헤드로 최대 성능을 달성하는 것을 목표로 합니다.

일반적으로 UDP가 차단되거나 제한되지만 TCP는 허용되는 환경에서 사용됩니다.

Phantun은 UDP 패킷 스트림을 난독화된 TCP 스트림 패킷으로 변환합니다. Phantun이 사용하는 TCP 스택은 대부분의 L3/L4 상태 저장/무상태 방화벽/NAT 장치를 통과하도록 설계되었습니다. L7 프록시는 통과할 수 없습니다. 그러나 이 접근 방식의 장점은 재전송 및 흐름 제어와 같은 일반적인 UDP over TCP 성능 저하 요소가 발생하지 않는다는 점입니다. 패킷의 순서가 뒤바뀌는 전송과 같은 기본 UDP 속성은 방화벽/NAT 장치의 관점에서 연결이 TCP 연결처럼 보이더라도 완전히 유지됩니다.

Phantun은 Phantom TUN(Phantom TUN)을 의미하며, 상태 저장 방화벽/NAT를 통해 TCP 패킷처럼 통과할 수 있을 만큼만 UDP 트래픽을 난독화하는 도구입니다.

Phantun은 100% 안전한 Rust로 작성되었습니다. 멀티 코어 시스템에서 잘 확장되도록 광범위하게 최적화되었으며, 빠른 연결에서 모든 가용 CPU 리소스를 포화시키는 데 문제가 없습니다. 벤치마크 결과는 성능 섹션을 참조하세요.

Phantun 벤치마크 결과 트래픽 흐름 다이어그램

사용법

아래 예제에서는 Phantun 서버가 4567 포트(서버의 --local 옵션)에서 들어오는 Phantun 클라이언트 연결을 수신하고, UDP 패킷을 127.0.0.1:1234의 UDP 서버(서버의 --remote 옵션)로 전달한다고 가정합니다.

또한 Phantun 클라이언트가 127.0.0.1:1234(클라이언트의 --local 옵션)에서 들어오는 UDP 패킷을 수신하고, 10.0.0.1:4567(클라이언트의 --remote 옵션)의 Phantun 서버에 연결한다고 가정합니다.

Phantun은 클라이언트와 서버 모두에 TUN 인터페이스를 생성합니다. 클라이언트의 경우, Phantun은 기본적으로 IP 주소 192.168.200.2 및 fcc8::2를 할당합니다. 서버의 경우, 기본적으로 192.168.201.2 및 fcc9::2를 할당합니다. 따라서 커널에서 IPv4/IPv6 포워딩이 활성화되어 있어야 하며, 물리적 NIC 주소와 Phantun의 Tun 인터페이스 주소 간의 NAT를 위해 적절한 iptables/nftables 규칙을 설정해야 합니다.

Phantun이 생성하는 Tun 인터페이스의 이름과 할당된 주소는 사용자 정의할 수 있습니다. 변경 방법을 보려면 -h 옵션으로 실행 파일을 실행하십시오.

이 네트워크 토폴로지를 이해하는 또 다른 방법은 다음과 같습니다(위의 다이어그램 참조).

Phantun 클라이언트는 라우터 뒤에 있는 개인 IP 주소(192.168.200.2/fcc8::2)를 가진 머신과 같습니다. 인터넷에 접속하려면 트래픽이 NIC를 떠나기 전에 개인 IP 주소를 SNAT해야 합니다.

Phantun 서버는 라우터 뒤에 있는 개인 IP 주소(192.168.201.2/fcc9::2)를 가진 서버와 같습니다. 인터넷에서 접속하려면 라우터에서 수신 포트를 DNAT하고 대상 IP 주소를 서버가 들어오는 연결을 수신하는 주소로 변경해야 합니다.

이러한 경우 Phantun을 실행하는 머신/iptables가 Phantun이 개인 IP 주소를 사용하여 외부와 통신할 수 있도록 하는 "라우터" 역할을 합니다.

Phantun v0.4.1부터 IPv6는 TCP 및 UDP 양쪽에서 완전히 지원됩니다. IPv6 주소를 지정하려면 명령줄 옵션에서 [::1]:1234 형식을 사용하세요. AAAA 레코드 확인도 지원됩니다. IPv6 동작을 제어하는 방법에 대한 자세한 옵션을 보려면 -h로 프로그램을 실행하십시오.

목차로 돌아가기

1. 커널 IP 포워딩 활성화

/etc/sysctl.conf를 편집하고 net.ipv4.ip_forward=1을 추가한 후 sudo sysctl -p /etc/sysctl.conf를 실행합니다.

IPv6 전용 설정

net.ipv6.conf.all.forwarding=1도 설정해야 합니다.

목차로 돌아가기

2. 필요한 방화벽 규칙 추가

클라이언트

클라이언트는 물리적 인터페이스에서 SNAT를 활성화하여 Phantun의 주소를 물리적 네트워크에서 사용할 수 있는 주소로 변환하기만 하면 됩니다. 이는 masquerade를 사용하여 간단히 수행할 수 있습니다.

참고: eth0을 실제 물리적 인터페이스 이름으로 변경하십시오.

목차로 돌아가기

nftables 사용

root@kitploit:~
table inet nat {
    chain postrouting {
        type nat hook postrouting priority srcnat; policy accept;
        iifname tun0 oif eth0 masquerade
    }
}

참고: 위 규칙은 테이블 패밀리 유형으로 inet을 사용하므로 IPv4 및 IPv6 사용과 모두 호환됩니다.

목차로 돌아가기

iptables 사용

root@kitploit:~
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

목차로 돌아가기

서버

서버는 TCP 수신 포트를 Phantun의 TUN 인터페이스 주소로 DNAT해야 합니다.

참고: eth0을 실제 물리적 인터페이스 이름으로, 4567을 Phantun 서버가 사용하는 실제 TCP 포트 번호로 변경하십시오.

목차로 돌아가기

nftables 사용

root@kitploit:~
table inet nat {
    chain prerouting {
        type nat hook prerouting priority dstnat; policy accept;
        iif eth0 tcp dport 4567 dnat ip to 192.168.201.2
        iif eth0 tcp dport 4567 dnat ip6 to fcc9::2
    }
}

목차로 돌아가기

iptables 사용

root@kitploit:~
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 4567 -j DNAT --to-destination 192.168.201.2
ip6tables -t nat -A PREROUTING -p tcp -i eth0 --dport 4567 -j DNAT --to-destination fcc9::2

목차로 돌아가기

3. Phantun 바이너리를 루트 권한 없이 실행 (선택사항)

네트워크 관련 애플리케이션을 루트 사용자로 실행하는 것은 권장되지 않습니다. Phantun은 cap_net_admin 기능을 사용하여 완전히 루트가 아닌 사용자로 실행될 수 있습니다.

root@kitploit:~
sudo setcap cap_net_admin=+pe phantun_server
sudo setcap cap_net_admin=+pe phantun_client

목차로 돌아가기

4. Phantun 데몬 시작

참고: 자세한 옵션을 보려면 -h 옵션으로 Phantun 실행 파일을 실행하십시오.

목차로 돌아가기

서버

참고: 4567은 Phantun이 수신할 TCP 포트이며 위에서 지정한 DNAT 규칙과 일치해야 합니다. 127.0.0.1:1234는 새 연결을 위해 연결할 UDP 서버입니다.

root@kitploit:~
RUST_LOG=info /usr/local/bin/phantun_server --local 4567 --remote 127.0.0.1:1234

또는 --remote와 함께 호스트 이름 사용:

root@kitploit:~
RUST_LOG=info /usr/local/bin/phantun_server --local 4567 --remote example.com:1234

참고: 서버는 기본적으로 Tun 인터페이스에 IPv4 및 IPv6 개인 주소를 모두 할당합니다. IPv6를 사용하지 않으려면 위의 IPv6 DNAT 규칙을 생성하지 않으면 되며, Tun 인터페이스에 IPv6 주소가 있어도 서버에 부작용이 없습니다.

목차로 돌아가기

클라이언트

참고: 127.0.0.1:1234는 Phantun이 수신할 UDP 주소 및 포트입니다. 10.0.0.1:4567은 연결할 Phantun 서버입니다.

root@kitploit:~
RUST_LOG=info /usr/local/bin/phantun_client --local 127.0.0.1:1234 --remote 10.0.0.1:4567

또는 --remote와 함께 호스트 이름 사용:

root@kitploit:~
RUST_LOG=info /usr/local/bin/phantun_client --local 127.0.0.1:1234 --remote example.com:4567
IPv6 전용 설정
root@kitploit:~
RUST_LOG=info /usr/local/bin/phantun_client --local 127.0.0.1:1234 --remote [fdxx::1234]:4567

AAAA 레코드가 있는 도메인 이름도 지원됩니다.

목차로 돌아가기

MTU 오버헤드

Phantun은 터널링 오버헤드를 최소화하는 것을 목표로 합니다. 일반 UDP 패킷과 비교한 오버헤드는 다음과 같습니다(아래는 IPv4 예제).

표준 UDP 패킷: 20바이트 IP 헤더 + 8바이트 UDP 헤더 = 28바이트

난독화된 패킷: 20바이트 IP 헤더 + 20바이트 TCP 헤더 = 40바이트

Phantun은 상태 저장 패킷 검사를 통과하기 위해 IP 및 TCP 헤더 외에 추가 헤더를 추가하지 않습니다!

Phantun의 추가 오버헤드: 12바이트. 즉, Phantun을 사용할 때 UDP 패킷의 사용 가능한 페이로드가 12바이트 감소합니다. 이는 이러한 종류의 난독화에서 가능한 최소 오버헤드입니다.

패킷 헤더 다이어그램

목차로 돌아가기

WireGuard용 MTU 계산

Phantun을 사용하여 WireGuard® UDP 패킷을 터널링하는 경우 WireGuard 인터페이스에 사용할 올바른 MTU를 결정하는 방법에 대한 지침은 다음과 같습니다.

root@kitploit:~
WireGuard MTU = 링크 MTU - IPv4 헤더 (20바이트) - TCP 헤더 (20바이트) - WireGuard 오버헤드 (32바이트)

또는

root@kitploit:~
WireGuard MTU = 링크 MTU - IPv6 헤더 (40바이트) - TCP 헤더 (20바이트) - WireGuard 오버헤드 (32바이트)

예를 들어, MTU가 1500바이트인 네트워크 링크의 경우 WireGuard 인터페이스 MTU는 다음과 같이 설정해야 합니다.

IPv4: 1500 (링크 MTU) - 20 - 20 - 32 = 1428바이트

IPv6: 1500 (링크 MTU) - 40 - 20 - 32 = 1408바이트

결과적으로 생성되는 Phantun TCP 데이터 패킷은 1500바이트로 인터페이스 MTU 1500을 초과하지 않습니다.

Phantun은 패킷 크기가 링크 MTU를 초과하면 제대로 작동할 수 없습니다. Phantun은 IP 단편화 및 재조립을 수행하지 않기 때문입니다. 같은 이유로 Phantun은 중간 장치가 패킷을 단편화하는 것을 방지하기 위해 항상 IP 헤더에 DF(단편화 금지, Don't Fragment) 비트를 설정합니다.

또한 WireGuard 터널의 양쪽 끝에서 동일한 인터페이스 MTU를 사용하는 것이 강력히 권장됩니다. 그렇지 않으면 예상치 못한 패킷 손실이 발생할 수 있으며 이러한 문제는 일반적으로 디버깅하기가 매우 어렵습니다.

목차로 돌아가기

버전 호환성

TCP 스택은 상당히 안정적이지만, 일반적으로 최대 호환성을 보장하려면 양쪽 끝에서 동일한 부 버전의 Phantun 서버/클라이언트를 실행해야 합니다.

목차로 돌아가기

문서

자체 프로젝트 내에서 fake-tcp 라이브러리를 사용하려는 사용자는 다음 라이브러리 문서를 참조하십시오. https://docs.rs/fake-tcp.

목차로 돌아가기

성능

성능은 LAN을 통해 4개의 vCPU와 5Gb/s NIC를 갖춘 2개의 AWS t4g.xlarge 인스턴스에서 테스트되었습니다. nftables를 사용하여 iperf3의 UDP 스트림을 두 테스트 인스턴스 간의 Phantun/udp2raw 터널을 통과하도록 리디렉션했으며, 단편화를 피하기 위해 MTU를 조정했습니다.

Phantun v0.3.2 및 udp2raw_arm_asm_aes 20200818.0이 사용되었습니다. 이는 2022년 4월 기준 두 프로젝트의 최신 릴리스입니다.

테스트 명령: iperf3 -c <IP> -p <PORT> -R -u -l 1400 -b 1000m -t 30 -P 5

이러한 성능 결과를 달성하기 위해 Phantun에서 사용된 일부 기술에 대한 설명: Writing Highly Efficient UDP Server in Rust.

목차로 돌아가기

향후 계획

  • 단일 UDP 스트림을 여러 TCP 스트림으로 로드 밸런싱
  • 통합 테스트
  • 필요한 방화벽 규칙 자동 추가/제거

목차로 돌아가기

udp2raw와의 비교

udp2raw는 @wangyu-의 또 다른 인기 프로젝트로, Phantun이 할 수 있는 것과 매우 유사합니다. 실제로 저는 Phantun의 영감을 udp2raw에서 얻었습니다. Phantun을 개발한 가장 큰 이유는 udp2raw를 실행할 때의 성능 부족(특히 Raspberry Pi와 같은 멀티 코어 시스템에서) 때문입니다. 그러나 목표는 udp2raw만큼 기능이 완벽해지는 것이 아니라 가장 일반적인 사용 사례만 지원하는 것입니다. 특히 UDP over ICMP 및 UDP over UDP 모드는 지원하지 않으며, 안티 리플레이 및 암호화 지원도 없습니다. 이점은 TCP 페이로드 내에 추가 헤더가 없기 때문에 전반적으로 훨씬 더 나은 성능과 더 적은 MTU 오버헤드입니다.

다음은 선택에 도움이 되도록 두 가지를 비교한 간략한 개요입니다.

목차로 돌아가기

라이선스

Copyright 2021-2025 Datong Sun ([email protected])

Apache 라이선스 버전 2.0(<LICENSE-APACHE 또는 https://www.apache.org/licenses/LICENSE-2.0>) 또는 MIT 라이선스 (<LICENSE-MIT 또는 https://opensource.org/licenses/MIT>)에 따라 선택적으로 라이선스가 부여됩니다. 프로젝트 내 파일은 해당 조건에 따라 복사, 수정 또는 배포될 수 없습니다.

목차로 돌아가기

도구 다운로드
모드전송 속도수신 속도전체 CPU 사용률
직접 연결 (1 스트림)3.00 Gbits/초2.37 Gbits/초25% (1코어 100%)
Phantun (1 스트림)1.30 Gbits/초1.20 Gbits/초60% (1코어 100%, 3코어 50%)
udp2raw (cipher-mode=none auth-mode=none disable-anti-replay) (1 스트림)1.30 Gbits/초715 Mbits/초40% (1코어 100%, 1코어 50%, 2코어 유휴)
직접 연결 (5 스트림)5.00 Gbits/초3.64 Gbits/초25% (1코어 100%)
Phantun (5 스트림)5.00 Gbits/초2.38 Gbits/초95% (모든 코어 사용)
udp2raw (cipher-mode=none auth-mode=none disable-anti-replay) (5 스트림)5.00 Gbits/초770 Mbits/초50% (2코어 100%)
Phantunudp2raw
UDP over FakeTCP 난독화✅✅
UDP over ICMP 난독화❌✅
UDP over UDP 난독화❌✅
멀티 스레드✅❌
처리량더 나음좋음
계층 3 모드TUN 인터페이스Raw 소켓 + BPF
터널링 MTU 오버헤드12바이트44바이트
각 UDP 연결에 대한 별도의 TCP 연결클라이언트/서버서버 전용
안티 리플레이, 암호화❌✅
IPv6✅✅