netfilter를 사용하여 UDP를 TCP로 변환하는 방법은 무엇입니까?

netfilter를 사용하여 UDP를 TCP로 변환하는 방법은 무엇입니까?

저는 모든 UDP 트래픽(자체 DNS 서버에 대한 DNS 제외)을 차단하는 뛰어난 ISP를 보유하고 있습니다.

하지만 VPN 솔루션에 UDP를 사용하고 싶습니다. 두 VPN 엔드포인트 모두에 대한 루트 액세스 권한이 있으며 둘 다 Linux를 사용합니다.

내 생각은 나가는 UDP 패킷의 패킷 유형 필드를 재정의하여 TCP처럼 보이게 만들고 서버 측에서는 그 반대를 수행하는 것입니다.

따라서 내 멋진 ISP의 라우터/방화벽에는 잘못된 TCP 패킷이 표시되는 반면 내 VPN 프로세스는 UDP를 통해 통신할 수 있습니다.

나는 ISP의 방화벽이 일부 문제를 감지할 만큼 똑똑하지 않다고 강하게 의심합니다.

물론 이것은 더러운 속임수이지만 두 번째로 가장 많이 사용되는 IP 프로토콜을 단순히 금지하고 이를 일반 인터넷 연결로 판매하는 것보다 더 더러운 것은 아닙니다.

내가 아는 한, 이 작업을 수행할 수 있는 몇 가지 iptables 규칙이 있는데, 어떤 규칙인가요?

답변1

아마도 작동하지 않을 것입니다. 방화벽은 올바른 TCP 연결에 필요한 TCP 설정 패킷(SYN, SYN-ACK, ACK)을 확실히 추적하며, 수정된 UDP 패킷만 사용하는 경우 이러한 패킷은 손실됩니다.

당신이 할 수 있는 일은 한쪽에서 UDP를 얻고, TCP를 통해 다른 쪽으로 연결하고, 다른 애플리케이션은 들어오는 TCP 연결을 받아들이고 TCP 트래픽을 UDP로 전달하는 작은 애플리케이션을 작성하는 것입니다.

답변2

TCP와 UDP는 근본적으로 다른 프로토콜이기 때문에 이것만으로는 충분하지 않습니다 iptables.

이 경우(ISP 차단) IPsec VPN 설정을 잊어버릴 수도 있습니다.모두UDP 포트).

모든 트래픽은 ICMP를 통해 터널링됩니다. (내가 아는 가장 오래된 솔루션입니다. 많은 조직에서는 여전히 어떤 종류의 ICMP도 필터링하지 않습니다.)https://github.com/DhavalKapil/icmptunnel

"icmptunnel"은 IP 트래픽을 ICMP 에코 패킷으로 캡슐화하고 이를 자체 프록시 서버로 보내는 방식으로 작동합니다. 프록시 서버는 패킷의 캡슐화를 해제하고 IP 트래픽을 전달합니다. 클라이언트로 향하는 수신 IP 패킷은 다시 ICMP 응답 패킷에 캡슐화되어 클라이언트로 다시 전송됩니다. IP 트래픽은 ICMP 패킷의 "데이터" 필드로 전송됩니다.

RFC 792는 ICMP 패킷을 관리하는 IETF 규칙으로, 임의의 데이터 길이를 가진 모든 유형 0(에코 응답) 또는 8(에코 메시지) ICMP 패킷을 허용합니다.

따라서 기본적으로 클라이언트 시스템은 ICMP 프로토콜을 사용하여 프록시 서버와만 통신합니다. 클라이언트 컴퓨터에서 실행되는 응용 프로그램은 이 사실을 인식하지 못하고 원활하게 실행됩니다.

또한 AB가 지적했듯이 UDP-원시 터널링 소프트웨어는 다음 위치에 있습니다.https://github.com/wangyu-/udp2raw-tunnel

또는 OpenVPN 솔루션을 설정하세요. 외부와 통신할 수 있다면 포트 53/UDP를 통해 OpenVPN을 실행하고, 해당 포트가 없는 경우 TCP를 통해 실행하세요. TCP를 통한 VPN 설정은 UDP보다 느리지만 작동합니다.

IP 필드 변경의 실제 문제는 iptables의 mangle 테이블을 보고 싶지만 다음과 같습니다.

  1. 귀하의 ISP도 이를 차단한 것 같습니다.
  2. mangle이 일부 IP 필드 수정을 지원한다는 것을 알고 있지만 어떤 IP 필드가 필요한지 잘 모르겠습니다. 바라보다https://serverfault.com/questions/467756/what-is-the-mangle-table-in-iptables

더 많은 대안을 보려면 GRE 터널링(프로토콜 47)을 시도해 볼 수 있습니다.https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.tunnel.gre.html(애플리케이션을 개발하는 것보다 쉽습니다.) 일부 조직에서는 이를 방지합니다. 기본적으로 프로토콜 47을 통해 IP/ICMP/UDP를 캡슐화합니다.

또는 다른 모든 방법이 실패하면 SSH를 통해 IP를 통해 터널링할 수 있습니다(TCP 포트가 아닌 SSH를 통해 터널링한다는 점에 유의하세요). Tun을 사용하여 SSH를 통해 IP 터널 설정을 참조하세요.http://www.marcfargas.com/posts/ip-tunnel-over-ssh-with-tun/그런데, 이 스레드의 모든 방법이나 SSH를 통한 TUN을 감지하고 차단할 수 있는 스마트/적응형/심층 검사 트래픽 셰이퍼/방화벽 기술은 없습니다.

추신. ISP가 UDP뿐만 아니라 NTP 및 DNS UDP 포트도 차단한다고 믿기 어렵습니다.

관련 정보