
포트 포워딩 및 인트라넷 프록시를 위한 도구
English | 中文
포트 포워드 및 인트라넷 프록시를 위한 도구로, lcx/ew와 비슷하지만 더 나은 기능을 제공합니다.
lcx와 ew는 훌륭하지만 개선의 여지가 있습니다.
처음 사용했을 때, tran, slave, rcsocks, sssocks...와 같은 복잡한 매개변수를 오래 기억하지 못했습니다. 작업 모드는 명확한데 왜 이런 식으로 매개변수를 설계했을까요? (특히 ew의 -l -d -e -f -g -h)
게다가 네트워크 프로그래밍 로직도 최적화될 수 있다고 생각합니다.
예를 들어, lcx -listen 8888 9999 명령을 실행할 때 클라이언트는 먼저 :8888에 연결한 다음 :9999에 연결해야 하지만, iox에서는 두 포트에 대한 연결 순서에 제한이 없습니다.
또한 lcx -slave 1.1.1.1 8888 1.1.1.1 9999 명령을 실행할 때 lcx는 두 호스트에 순차적으로 연결하지만, iox처럼 동시에 연결하는 것이 더 효율적입니다.
게다가 iox는 트래픽 암호화 기능을 제공합니다 (대상에 IDS가 있을 때 유용합니다). 실제로 iox를 간단한 ShadowSocks처럼 사용할 수 있습니다.
또한 iox는 UDP 트래픽 포워딩도 지원합니다.
물론 iox는 Go로 작성되었기 때문에 정적 링크 프로그램이 약간 큽니다. 원시 프로그램은 2.2MB입니다 (UPX 압축 후 800KB).
모든 매개변수가 통일되어 있음을 알 수 있습니다. -l/--local은 로컬 포트에서 수신 대기하고, -r/--remote는 원격 호스트에 연결함을 의미합니다.
참고: v0.4 이후로 -l/--local은 수신 대기할 IP를 지정할 수 있습니다. 포트만 지정하면 기본값은 0.0.0.0:PORT입니다.
-l 127.0.0.1:9999 -l *127.0.0.1:9999 # 127.0.0.1:9999
-l 9999 -l *9999 # 0.0.0.0:9999
`-l :9999` is also OK, but it's not recommended. Because `-l *:9999`(listen on 0.0.0.0:9999 with encryption) is ambiguous
0.0.0.0:8888 및 0.0.0.0:9999에서 수신 대기, 두 연결 간 트래픽 포워딩
./iox fwd -l 8888 -l 9999
0.0.0.0:8888에서 수신 대기, 1.1.1.1:9999로 트래픽 포워딩
./iox fwd -l 8888 -r 1.1.1.1:9999
1.1.1.1:8888 및 1.1.1.1:9999에 연결, 두 연결 간 포워딩
./iox fwd -r 1.1.1.1:8888 -r 1.1.1.1:9999
0.0.0.0:1080에서 Socks5 서버 시작
./iox proxy -l 1080
제어 대상 호스트에서 Socks5 서버를 시작한 다음 인터넷 VPS로 포워딩
VPS에서 0.0.0.0:9999를 0.0.0.0:1080으로 포워딩
역방향 연결을 제어하는 간단한 프로토콜이 포함되어 있으므로 쌍으로 사용해야 합니다.
./iox proxy -r 1.1.1.1:9999
./iox proxy -l 9999 -l 1080 // notice, the two port are in order
for ew:
./ew -s rcsocks -l 1080 -e 9999
./ew -s rssocks -d 1.1.1.1 -e 9999
그런 다음 인트라넷 호스트에 연결
# proxychains.conf
# socks5://1.1.1.1:1080
$ proxychains rdesktop 192.168.0.100:3389
예를 들어, 인트라넷의 3389 포트를 VPS로 포워딩합니다.
// be-controller host
./iox fwd -r 192.168.0.100:3389 -r *1.1.1.1:8888 -k 656565
// our VPS
./iox fwd -l *8888 -l 33890 -k 656565
이해하기 쉽습니다: 제어 대상 호스트와 VPS:8888 간의 트래픽이 암호화됩니다. 사전 공유 비밀 키는 'AAA'이며, iox는 이를 사용하여 시드 키와 논스를 생성합니다. (일반적으로 논스는 재사용되어서는 안 됩니다. 그러나 iox의 암호화는 IDS 우회용일 뿐이므로, 추가 공간을 할당하지 않기 위해 TCP 스트림 암호화는 논스를 재사용합니다.) 그런 다음 Xchacha20으로 암호화합니다 (v0.3 버전에서 AES-CTR을 Xchacha20으로 대체).
따라서 *는 쌍으로 사용해야 합니다.
./iox fwd -l 1000 -r *127.0.0.1:1001 -k 000102
./iox fwd -l *1001 -r *127.0.0.1:1002 -k 000102
./iox fwd -l *1002 -r *127.0.0.1:1003 -k 000102
./iox proxy -l *1003 -k 000102
$ curl google.com -x socks5://127.0.0.1:1000
iox를 간단한 ShadowSocks로 사용하기
// ssserver
./iox proxy -l *9999 -k 000102
// sslocal
./iox fwd -l 1080 -r *VPS:9999 -k 000102
CLI 옵션 -u만 추가하면 됩니다.
./iox fwd -l 53 -r *127.0.0.1:8888 -k 000102 -u
./iox fwd -l *8888 -l *9999 -k 000102 -u
./iox fwd -r *127.0.0.1:9999 -r 8.8.8.8:53 -k 000102 -u
주의: 다단계 연결을 만들 때 Remote2Remote-UDP-mode는 마지막에 시작되어야 합니다. 위 예제의 3번째 명령입니다.
UDP 포워딩은 예상과 다르게 동작할 수 있습니다. 실제로 현재 GitHub에는 로컬 리스너를 원격 호스트로 포워딩하는 예제만 있으므로, 제 이해에 따라 구현할 수밖에 없었습니다.
소스 코드에서 이유를 확인할 수 있습니다. 아이디어가 있으면 PR / 이슈를 환영합니다.
MIT 라이선스