Raw Socket을 사용하여 UDP 트래픽을 암호화된 FakeTCP/UDP/ICMP 트래픽으로 변환하는 터널은 UDP 방화벽(또는 불안정한 UDP 환경)을 우회하는 데 도움이 됩니다.
단독으로 사용하면 udp2raw는 UDP 트래픽만 터널링합니다. 그럼에도 불구하고 udp2raw와 모든 UDP 기반 VPN을 함께 사용하면 모든 트래픽(TCP/UDP/ICMP 포함)을 터널링할 수 있으며 현재 OpenVPN/L2TP/ShadowVPN 및 TinyfecVPN이 지원되는 것으로 확인되었습니다.
또는
udp2raw 위키
简体中文
루트 계정 또는 cap_net_raw 기능이 있는 Linux 호스트(데스크탑 Linux, Android 휴대폰/태블릿, OpenWRT 라우터 또는 Raspberry PI 포함).
Windows 및 MacOS 사용자의 경우 이 저장소의 udp2raw를 사용하십시오.
ICMP/FakeTCP 헤더는 일부 ISP에서 UDP 차단, UDP QOS 또는 부적절한 UDP NAT 동작을 우회하는 데 도움이 됩니다. ICMP 헤더 모드에서 udp2raw는 ICMP 터널처럼 작동합니다.
UDP 헤더도 지원됩니다. UDP 헤더 모드에서는 일반 UDP 터널처럼 작동하며 다른 기능(암호화, 재생 방지 또는 연결 안정화 등)만 사용할 수 있습니다.
FakeTCP 헤더 모드에서 udp2raw는 연결을 설정하는 동안 3방향 핸드셰이크를 시뮬레이션하고, 데이터를 전송하는 동안 seq 및 ack_seq를 시뮬레이션합니다. 또한 MSS
, sackOk
, TS
, TS_ack
, wscale
과 같은 몇 가지 TCP 옵션을 시뮬레이션합니다. 방화벽은 FakeTCP를 TCP 연결로 간주하지만 본질적으로 UDP입니다. 이는 실시간/비순차적 전달(일반 UDP와 마찬가지로)을 지원하며 정체 제어 또는 재전송을 지원하지 않습니다. 따라서 OpenVPN을 사용할 때 TCP over TCP 문제가 발생하지 않습니다.
암호화에 관한 참고 사항
연결 실패는 하트비트로 감지됩니다. 시간이 초과되면 클라이언트는 자동으로 포트 번호를 변경하고 다시 연결합니다. 재연결에 성공하면 이전 연결이 복구되고 기존 UDP 대화는 모두 유효한 상태로 유지됩니다.
예를 들어, udp2raw + OpenVPN을 사용하는 경우 네트워크 케이블을 다시 연결하거나 WiFi 액세스 포인트가 변경되더라도 OpenVPN은 다시 연결한 후에도 연결이 끊어지지 않습니다.
멀티플렉싱 하나의 클라이언트는 모두 동일한 원시 연결을 공유하는 여러 UDP 연결을 처리할 수 있습니다.
여러 클라이언트 하나의 서버에 여러 클라이언트가 있을 수 있습니다.
NAT 지원 3가지 모드는 모두 NAT 환경에서 작동합니다.
OpenVZ 지원은 BandwagonHost VPS에서 테스트되었습니다.
구축 용이 종속성 없음. udp2raw를 크로스 컴파일하려면 툴체인을 다운로드하고, 툴체인을 가리키도록 makefile을 수정하고, make cross
실행하면 모든 작업이 완료됩니다.(참고: 데스크톱용 사전 컴파일된 바이너리, RaspberryPi, Android, 일부 Openwrt 라우터는 이미 릴리스에 포함되어 있습니다.
Bypass UDP QoS
Bypass UDP Blocking
Bypass OpenVPN TCP over TCP problem
OpenVPN over ICMP
UDP to ICMP tunnel
UDP to TCP tunnel
UDP over ICMP
UDP over TCP
https://github.com/wangyu-/udp2raw-tunnel/releases에서 바이너리 릴리스를 다운로드하세요.
UDP가 차단되었거나 QOS가 적용되었거나 지원이 제대로 이루어지지 않았다고 가정해 보세요. 서버 IP가 44.55.66.77이고 UDP 포트 7777에서 수신 대기하는 서비스가 있다고 가정합니다.
# Run at server side:
./udp2raw_amd64 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -k " passwd " --raw-mode faketcp -a
# Run at client side
./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -k " passwd " --raw-mode faketcp -a
(위 명령은 루트로 실행해야 합니다. 더 나은 보안을 위해 몇 가지 추가 단계를 통해 루트가 아닌 사용자로 udp2raw를 실행할 수 있습니다. 자세한 내용은 이 링크를 확인하세요.)
이제 TCP 포트 4096을 통해 클라이언트와 서버 간에 암호화된 원시 터널이 설정되었습니다. 클라이언트 측에서 UDP 포트 3333에 연결하는 것은 서버 측에서 포트 7777에 연결하는 것과 같습니다. UDP 트래픽은 노출되지 않습니다.
Android에서 실행하려면 Android_Guide를 확인하세요.
-a
옵션은 자동으로 iptables 규칙(또는 몇 가지 iptables 규칙)을 추가하며, udp2raw는 이 iptables 규칙을 사용하여 안정적으로 작동합니다. -a
잊지 마세요(일반적인 실수입니다). udp2raw가 iptables 규칙을 자동으로 추가하는 것을 원하지 않으면 수동으로 추가하고( -g
옵션 살펴보기) -a
생략할 수 있습니다.
udp2raw-tunnel
git version:6e1df4b39f build date:Oct 24 2017 09:21:15
repository: https://github.com/wangyu-/udp2raw-tunnel
usage:
run as client : ./this_program -c -l local_listen_ip:local_port -r server_address:server_port [options]
run as server : ./this_program -s -l server_listen_ip:server_port -r remote_address:remote_port [options]
common options,these options must be same on both side:
--raw-mode <string> avaliable values:faketcp(default),udp,icmp
-k,--key <string> password to gen symetric key,default:"secret key"
--cipher-mode <string> avaliable values:aes128cbc(default),xor,none
--auth-mode <string> avaliable values:hmac_sha1,md5(default),crc32,simple,none
-a,--auto-rule auto add (and delete) iptables rule
-g,--gen-rule generate iptables rule then exit,so that you can copy and
add it manually.overrides -a
--disable-anti-replay disable anti-replay,not suggested
client options:
--source-ip <ip> force source-ip for raw socket
--source-port <port> force source-port for raw socket,tcp/udp only
this option disables port changing while re-connecting
other options:
--conf-file <string> read options from a configuration file instead of command line.
check example.conf in repo for format
--fifo <string> use a fifo(named pipe) for sending commands to the running program,
check readme.md in repository for supported commands.
--log-level <number> 0:never 1:fatal 2:error 3:warn
4:info (default) 5:debug 6:trace
--log-position enable file name,function name,line number in log
--disable-color disable log color
--disable-bpf disable the kernel space filter,most time its not necessary
unless you suspect there is a bug
--sock-buf <number> buf size for socket,>=10 and <=10240,unit:kbyte,default:1024
--force-sock-buf bypass system limitation while setting sock-buf
--seq-mode <number> seq increase mode for faketcp:
0:static header,do not increase seq and ack_seq
1:increase seq for every packet,simply ack last seq
2:increase seq randomly, about every 3 packets,simply ack last seq
3:simulate an almost real seq/ack procedure(default)
4:similiar to 3,but do not consider TCP Option Window_Scale,
maybe useful when firewall doesnt support TCP Option
--lower-level <string> send packets at OSI level 2, format:'if_name#dest_mac_adress'
ie:'eth0#00:23:45:67:89:b9'.or try '--lower-level auto' to obtain
the parameter automatically,specify it manually if 'auto' failed
--gen-add generate iptables rule and add it permanently,then exit.overrides -g
--keep-rule monitor iptables and auto re-add if necessary.implys -a
--clear clear any iptables rules added by this program.overrides everything
-h,--help print this help message
-a
및 -g
이 프로그램은 원시 소켓을 통해 패킷을 보냅니다. FakeTCP 모드에서는 Linux 커널 TCP 패킷 처리가 양쪽에서 iptables 규칙에 의해 차단되어야 합니다. 그렇지 않으면 커널이 인식되지 않은 TCP 패킷에 대해 자동으로 RST를 보내므로 안정성/성능 문제가 발생하지 않습니다. -a
옵션을 사용하면 프로그램이 시작/종료 시 iptables 규칙을 자동으로 추가/삭제하도록 할 수 있습니다. -g
옵션을 사용하여 iptables 규칙을 생성하고 수동으로 추가할 수도 있습니다.
--cipher-mode
및 --auth-mode
보안을 극대화하려면 aes128cbc
+ hmac_sha1
사용하는 것이 좋습니다. 라우터에서 프로그램을 실행하려면 xor
+ simple
시도하면 됩니다. 이는 대부분의 경우 방화벽에 의한 패킷 검사를 속일 수 있지만 심각한 공격으로부터 사용자를 보호할 수는 없습니다. 모드 없음은 디버깅 목적으로만 사용됩니다. cipher-mode 또는 auth-mode를 none으로 설정하는 것은 권장되지 않습니다.
--seq-mode
FakeTCP 모드는 실제 TCP 연결과 100% 동일하게 동작하지 않습니다. ISP는 시뮬레이션된 TCP 트래픽과 실제 TCP 트래픽을 구별할 수 있습니다(비용이 많이 들지만). seq-mode는 seq 증가 동작을 약간 변경하는 데 도움이 됩니다. 연결 문제가 발생하면 값을 변경해 보세요.
--lower-level
--lower-level
사용하면 OSI 레벨 2(링크 레벨)에서 패킷을 보낼 수 있으므로 로컬 iptables 규칙을 우회할 수 있습니다. udp2raw와 충돌하는 복잡한 iptables 규칙이 있고 iptables 규칙을 편집할 수 없거나 너무 게으른 경우 --lower-level
매우 유용할 수 있습니다. 매개변수를 자동으로 감지하려면 --lower-level auto
시도하세요. auto
실패하면 수동으로 지정할 수 있습니다.
수동 형식 if_name#dest_mac_adress
, 즉: eth0#00:23:45:67:89:b9
.
--keep-rule
필요한 경우 iptables를 모니터링하고 iptables 규칙을 자동으로 다시 추가합니다(커널 TCP 처리 차단용). 특히 iptables 규칙이 다른 프로그램에 의해 지워질 수 있는 경우에 유용합니다(예를 들어, openwrt를 사용하는 경우 설정을 변경하고 커밋할 때마다 iptables 규칙 삭제 및 재구성될 수 있습니다.)
--conf-file
ps
명령에서 비밀을 유지하기 위해 구성 파일에서 옵션을 로드할 수도 있습니다.
예를 들어, 위의 server
예제(시작하기 섹션)에 대한 옵션을 구성 파일에 다시 작성합니다.
server.conf
-s
# You can add comments like this
# Comments MUST occupy an entire line
# Or they will not work as expected
# Listen address
-l 0.0.0.0:4096
# Remote address
-r 127.0.0.1:7777
-a
-k passwd
--raw-mode faketcp
-k
매개변수에 주의하세요. 명령줄 모드에서 비밀번호 앞뒤의 따옴표는 쉘에 의해 제거됩니다. 구성 파일에서는 따옴표를 제거하지 않습니다.
그런 다음 다음으로 서버를 시작하십시오.
./udp2raw_amd64 --conf-file server.conf
--fifo
실행 중인 프로그램에 명령을 보내려면 fifo(명명된 파이프)를 사용하세요. 예를 들면 --fifo fifo.file
입니다.
클라이언트 측에서는 echo reconnect >fifo.file
사용하여 클라이언트를 강제로 다시 연결할 수 있습니다. 현재 서버에 대해 구현된 명령이 없습니다.
OpenVPN을 통한 iperf3 TCP + udp2raw(이 문제에서 언급된 버그로 인해 iperf3 UDP 모드는 사용되지 않습니다: esnet/iperf#296 . 대신 성능을 테스트하기 위해 OpenVPN을 통해 TCP 트래픽을 UDP로 패키징합니다. 자세한 내용은 애플리케이션을 참조하세요.
iperf3 -c 10.222.2.1 -P40
iperf3 -c 10.222.2.1 -P40 -R
raw_mode: faketcp cipher_mode: xor auth_mode: 단순
(역방향 속도는 비슷하고 업로드되지 않았습니다)
raw_mode: faketcp cipher_mode: aes128cbc auth_mode: md5
(역방향 속도는 비슷하고 업로드되지 않았습니다)
자세한 내용은 위키를 확인하세요.
https://github.com/wangyu-/udp2raw-tunnel/wiki