SSH는 양말(4/5) 프록시 체인을 건너뜁니다. 호스트->양말 프록시->양말 프록시->대상

SSH는 양말(4/5) 프록시 체인을 건너뜁니다. 호스트->양말 프록시->양말 프록시->대상

좋은 답변을 얻었습니다더 일찍Machine 에 있는 Socks 프록시를 통해 Machine에서 Machine으로 A연결하는 방법에 대한 질문입니다 .CB

머신 B IP가 이라고 가정하면 218.62.97.105포트 1080에서 수신 대기 중입니다.

이에 대한 명령:

ssh -o ProxyCommand='socat - socks:218.62.97.105:HOST_C:21,socksport=1080'

양말 프록시에서 체인을 만드는 것이 가능한지 궁금합니다.

다음 시나리오를 고려하십시오. 머신 A, ->머신 B(양말 프록시 1), ->머신 C(양말 프록시 2), ->머신 D(대상)

머신 B IP: 218.62.97.105포트1080

머신 C IP: 11.11.11.11포트3128

기계 D IP: 55.55.55.55포트8080

누군가가 socat이나 다른 도구에 대한 경험이 있기를 바랍니다. 현재로서는 이것이 매우 복잡해 보입니다.

나에게 유효한 답변을 줄 수 있는 사람에게는 +100입니다.


socat 1 명령 디버깅:

2012/10/02 20:45:00 socat[15641] D read -> 8
2012/10/02 20:45:00 socat[15641] D received socks4 reply data (offset 0): 00 5c 00 50 c1 6b 90 17
2012/10/02 20:45:00 socat[15641] D received all 8 bytes
2012/10/02 20:45:00 socat[15641] I received socks reply VN=0 CD=92 DSTPORT=80 DSTIP=193.107.144.23
2012/10/02 20:45:00 socat[15641] E socks: ident refused by client
2012/10/02 20:45:00 socat[15641] N exit(1)
2012/10/02 20:45:00 socat[15641] I shutdown(4, 2)
2012/10/02 20:45:00 socat[15641] D shutdown()  -> 0
2012/10/02 20:45:00 socat[15641] I shutdown(3, 2)
2012/10/02 20:45:00 socat[15641] D shutdown()  -> 0
2012/10/02 20:45:00 socat[15638] I childdied(signum=17)
2012/10/02 20:45:00 socat[15638] D waitpid(-1, 0xbfbea3fc, 1)
2012/10/02 20:45:00 socat[15638] D waitpid(, {256}, ) -> 15641
2012/10/02 20:45:00 socat[15638] I childdied(17): cannot identify child 15641
2012/10/02 20:45:00 socat[15638] D saving pid in diedunknown1
2012/10/02 20:45:00 socat[15638] W waitpid(): child 15641 exited with status 1
2012/10/02 20:45:00 socat[15638] D waitpid(-1, 0xbfbea3fc, 1)
2012/10/02 20:45:00 socat[15638] D waitpid(, {256}, ) -> -1
2012/10/02 20:45:00 socat[15638] I waitpid(-1, {}, WNOHANG): No child processes
2012/10/02 20:45:00 socat[15638] I childdied() finished

socat 두 번째 명령:

2012/10/02 20:44:38 socat[15640] D socket(2, 1, 6)
2012/10/02 20:44:38 socat[15640] I socket(2, 1, 6) -> 3
2012/10/02 20:44:38 socat[15640] D fcntl(3, 2, 1)
2012/10/02 20:44:38 socat[15640] D fcntl() -> 0
2012/10/02 20:44:38 socat[15640] D connect(3, {2,AF=2 127.0.0.1:22222}, 16)
2012/10/02 20:44:38 socat[15640] D connect() -> 0
2012/10/02 20:44:38 socat[15640] D getsockname(3, 0xbf8111cc, 0xbf811058{112})
2012/10/02 20:44:38 socat[15640] D getsockname(, {AF=2 127.0.0.1:40843}, {16}) -> 0
2012/10/02 20:44:38 socat[15640] N successfully connected from local address AF=2 127.0.0.1:40843
2012/10/02 20:44:38 socat[15640] I sending socks4 request VN=4 DC=1 DSTPORT=21 DSTIP=xx.xxx.xxx.xxx USERID=mnmnc
2012/10/02 20:44:38 socat[15640] D malloc(42)
2012/10/02 20:44:38 socat[15640] D malloc() -> 0x8f1ec80
2012/10/02 20:44:38 socat[15640] D sending socks4(a) request data 04 01 00 15 3e f4 9f 9a 6d 6e 6d 6e 63 00
2012/10/02 20:44:38 socat[15640] D write(3, 0xbf811304, 14)
2012/10/02 20:44:38 socat[15640] D write -> 14
2012/10/02 20:44:38 socat[15640] I waiting for socks reply
2012/10/02 20:44:38 socat[15640] D read(3, 0xbf811234, 8)
2012/10/02 20:45:00 socat[15640] D read -> 0
2012/10/02 20:45:00 socat[15640] E read(): EOF during read of socks reply, peer might not be a socks4 server
2012/10/02 20:45:00 socat[15640] N exit(1)
2012/10/02 20:45:00 socat[15640] I shutdown(3, 2)
2012/10/02 20:45:00 socat[15640] D shutdown()  -> 0
ssh_exchange_identification: Connection closed by remote host

답변1

그리고:

socat tcp-listen:12345,reuseaddr,fork,bind=127.1 socks:218.62.97.105:11.11.11.11:3128,socksport=1080

루프백 인터페이스의 포트 12345에서 TCP 연결을 기다리고 218.62.97.105:1080의 양말 서버를 통해 11.11.11.11:3128로 전달하는 socat를 갖게 됩니다.

그런 다음 이를 사용하여 D:에 연결할 수 있습니다.

ssh -o ProxyCommand='socat - socks:127.1:%h:%p,socksport=12345' -p 8080 55.55.55.55

(테스트되지 않음)

답변2

나는 사용한다양말이 목적을 위해. 모든 연결을 캡처하고 tsocks.conf 파일을 기반으로 전달하는 래퍼입니다. 예를 들어:

server = 127.0.0.1
server_type = 5
server_port = 1338

localhost 포트 1338에 SSH 에이전트를 설정했기 때문입니다. 이 방법을 사용하면 tsocks 래퍼에서 실행되는 다음 SSH 세션이 마치 SSH 연결의 다른 쪽 끝에 있는 것처럼 동작하기 때문에 연결을 중첩할 수 있습니다.

socat을 사용하는 것보다 반드시 더 나은 것은 아니지만 제어하기가 더 쉽다는 것을 알았습니다.

관련 정보