
모든 네트워크 트래픽이 SSH 터널을 통해 이루어지도록 OSX 시스템을 설정하고 싶습니다.
나는 이 목적을 위해 작은 스크립트를 작성했으며, 이 스크립트에 의해 실행되는 명령은 다음과 같습니다.
# setup tunnel
ssh -fN -D 1080 -p 22 user@remote
# start up redsocks
sudo redsocks -c /tmp/redsocks.conf -p /tmp/redsocks.pid
# forward all tcp traffic to tunnel
sudo ipfw add 0010 \
fwd 127.0.0.1,12345 \
tcp from me \
to any not dst-port 12345 \
not dst-port 1080 \
not dst-ip REMOTE_IP
나는 redsocks를 사용하여 ssh-tunnel에 http 프록시를 생성합니다.모두ipfw를 통해 tcp 트래픽을 전송하는 경우 redsocks.conf는 다음과 같습니다.
base {
log_debug = on;
log_info = on;
log = "file:/tmp/redsocks.log";
redirector = generic;
}
redsocks {
local_ip = 127.0.0.1;
local_port = 55660;
ip = 127.0.0.1;
port = 1080;
type = socks4;
}
지금까지 모든 것이 작동하는 것 같습니다. 내 OSX 시스템의 모든 TCP 트래픽은 SSH 터널을 통해 수행되지만 문제는 UDP 트래픽에 있으며 그 때문에 DNS 쿼리가 작동하지 않습니다.
SSH 터널을 통해 로컬 컴퓨터의 DNS가 작동하도록 하려면 어떻게 해야 합니까?
답변1
귀하의 ipfw …
회선은 TCP 트래픽만 전달합니다. 어쩌면 다음 줄을 추가할까요?
sudo ipfw add 0011 fwd 127.0.0.1,12345 \
udp from me \
to any not dst-port 12345 \
not dst-port 1080 \
not dst-ip REMOTE_IP
set -x
(디버깅을 위해) 및 set -e
(명령 중 하나라도 실패하면 즉시 실패하도록)을 추가하는 것도 좋은 생각입니다 .
tun
SSH를 사용하여 /를 지칭하려면 일반적으로 'SSH 터널링'이라는 용어를 사용해야 합니다tap
.- 포트 전달은 터널링의 특정 형태이지만 이 맥락에서는 여전히 '포트 전달'로만 참조되어야 합니다.
- 빠른 임시 작업을 제외하고 SSH 터널링(
-oTunnel
및 에서와 같이)을 사용하지 마십시오 .-oTunnelDevice
- TCP를 통한 TCP는 매우 나쁜 생각입니다.
- TCP를 통한 UDP는 일반적으로 이를 사용하는 애플리케이션에 대기 시간을 과도하게 추가합니다. UDP를 사용하는 프로그램은 RTP의 경우처럼 자체 안정성과 혼잡 제어를 완전히 제어할 수 있어야 합니다.
- DNS는 TCP를 전송 수단으로 사용할 수 있습니다. UDP로 제한되지는 않지만우선의수송.
답변2
사용셔틀대신에? sshuttle은 이 정도의 조작 없이 DNS와 TCP를 올바르게 처리한다고 주장합니다. 단지 --dns
옵션일 뿐입니다.
IME SOCKS는 약간 낡고 사랑받지 못하는 것 같았습니다. 그리고 저는 ipfw와 redsocks의 사용을 정말로 이해하지 못합니다.
그러나 SOCKS4는 터널링 DNS를 지원하지 않으므로 문제가 발생하는 것이 놀랍지 않습니다. SOCKS의 후속 버전에서는 이를 지원하므로 이를 살펴볼 수 있습니다. 그리고 분명히 SSH는 SOCKS5를 지원할 수 있습니다..
답변3
이미 사용하고 있는 것 외에도 SSH는 사용된 레이어 4 프로토콜과 관계없이 모든 IP 트래픽의 터널링을 허용합니다. 원격 서버에는 터널이 있어야 하며 PermitTunnel yes
클라이언트는 지시문을 사용하여 터널을 요청해야 합니다 Tunnel
. 그런 다음 해당 새 링크를 기본 게이트웨이로 사용할 수 있습니다. 보다터널에 대한 자세한 지침은 여기를 참조하세요.