
Quero configurar meu sistema OSX de forma que todo o tráfego de rede seja feito através de um túnel SSH.
Escrevi um pequeno script para esse propósito e estes são os comandos executados por ele:
# 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
Eu uso redsocks para criar um proxy http para meu túnel ssh (para que eu possa encaminhartodostráfego tcp para ele via ipfw), redsocks.conf se parece com isto:
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;
}
Tudo parece funcionar até agora, todo o tráfego TCP no meu sistema OSX é feito através do túnel ssh, mas o problema é com o tráfego UDP e por causa disso as consultas DNS não estão funcionando.
Como posso fazer com que o DNS da minha máquina local funcione através do túnel SSH?
Responder1
Sua ipfw …
linha encaminha apenas tráfego TCP. Talvez adicione a seguinte linha?
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
Também é uma boa ideia adicionar set -x
(para depuração) e set -e
(para falhar imediatamente se algum dos comandos falhar).
- Geralmente, deve-se usar o termo 'túnel SSH' para se referir a
tun
/tap
com SSH. - O encaminhamento de porta é uma forma específica de tunelamento, mas ainda deve ser chamado apenas de 'encaminhamento de porta' neste contexto.
- Não use tunelamento SSH (como em
-oTunnel
e-oTunnelDevice
), exceto para trabalhos ad-hoc rápidos.- TCP sobre TCP é uma péssima ideia:
- O UDP sobre TCP adiciona latência excessiva aos aplicativos que normalmente o utilizam. Os programas que utilizam UDP devem ter controle total sobre sua própria confiabilidade e controle de congestionamento, como é o caso do RTP.
- O DNS pode usar o TCP como transporte. Não está restrito ao UDP, embora esse seja opreferidotransporte.
Responder2
Usartransporteem vez de? sshuttle afirma lidar com DNS e TCP corretamente, sem essa quantidade de manipulação - apenas a --dns
opção.
IME SOCKS parecia um pouco velho e mal amado. E eu realmente não entendo esse uso de ipfw e redsocks.
No entanto, gostaria de salientar que o SOCKS4 não suporta tunelamento de DNS, por isso não estou surpreso que você esteja tendo problemas. Versões subsequentes do SOCKS suportam isso, então você pode dar uma olhada nisso. E aparentemente o SSH pode suportar SOCKS5.
Responder3
Além do que você já utiliza, o sSH permite tunelar todo o tráfego IP, independente do protocolo da camada 4 empregado. Seu servidor remoto deve ter PermitTunnel yes
e o cliente deve solicitar um túnel usando a Tunnel
diretiva. Então você pode usar esse novo link como seu gateway padrão. Verinstruções detalhadas para o túnel aqui.