Quiero usar mi computadora como proxy SOCKS. ¿Solo tienes que hacer ssh -D port_number hostname? ¿Tengo que poner mi nombre de usuario de Linux como hostname?
tl; dr: busca el texto en negrita a continuación.
Nota: utilizo el $prefijo para las cadenas que debe sustituir con los valores deseados. Esta sintaxis no está destinada a ser totalmente compatible con variables en ningún shell.
El uso de ssh -Des realmente así:
ssh -D $port_number $hostname
o
ssh -D $port_number $username@$hostname
Donde $hostnameidentifica alguna máquina; puede ser una dirección IP, una dirección que se puede resolver mediante DNS o mediante un /etc/hostsarchivo o mediante un ssh_configarchivo, etc. El primer comando utilizará su nombre de usuario actual (local) a menos que su ssh_configarchivo indique lo contrario (por defecto no lo hace). Debe proporcionar credenciales (como me gusta $usernamey contraseña cuando se le solicite) válidas para la $hostnamemáquina.
Esto abrirá el $port_numberpuerto TCP en su computadora local y establecerá un servidor SOCKS en él. Tenga en cuenta que es posible que no se le permita abrir algunos puertos como usuario normal, especialmente por debajo 1024, use un número más alto entonces.
En general, la situación sin proxy SOCKS proporcionada por sshes así:
A -> D
donde Aes un cliente (por ejemplo, navegador web), Des un servidor (por ejemplo, servidor web). Pero con proxy esto es lo siguiente:
A -> B -> C -> D
dónde:
Arepresenta un único cliente que usa B:$port_numbercomo dirección SOCKS; Puede haber muchos clientes.Bes la máquina donde se ssh -D $port_number Cejecuta y donde el TCP $port_numberescucha las conexiones entrantes de cualquiera A.Ces el se $hostname Bconecta a; la comunicación que normalmente va Ddesde Aahora llega Ddesde C.Des cualquier servidor, ve comunicación desde Cy puede no ser consciente de eso Ay Bestá involucrado; Puede haber muchos servidores.Algunas de estas cartas pueden referirse a la misma máquina en algunos casos de uso particulares. Obviamente, cualquier caso donde A= Cno ofrece una ventaja directa sobre la A -> Dconexión simple , pero hay otros casos útiles.
Digamos que ejecuta el sshcomando que se muestra arriba y le dice a su navegador local que use SOCKS en localhost:$port_number. Este es el caso donde A= B. El tráfico de su navegador será reenviado y los sitios que visite ( D) verán la comunicación proveniente de $hostname( C) como si su navegador funcionara allí.
Si desea que otras computadoras se conecten a su puerto abierto ( A≠ B, las usarán $your_IP:$port_numbercomo la dirección del servidor SOCKS) debe:
$port_number;-gopción con ssh -D;o
sshconexión por separado , de modo que sus conexiones parezcan locales (como si A= B) a su sistema en ejecución, por ssh -D ...lo que el firewall no interfiere ni -ges necesario; esto se puede hacer ssh -L $some_port:localhost:$port_number $your_IPinvocando a su lado o ssh -R $some_port:localhost:$port_number $their_IPinvocado a su lado; los clientes usarán localhost:$some_portcomo la dirección del servidor SOCKS en sus navegadores.No hay ninguna razón $hostnameno puede ser B's localhost; puede. En este caso B= C. Esto no tiene sentido cuando usa este proxy SOCKS con su navegador local ( A= B= C) pero si permite conexiones desde el exterior, entonces tiene mucho sentido. Supongo que esto es lo que quieres hacer. El comando puede ser:
ssh -g -f -N -D $port_number localhost
Es posible que desee establecer una autenticación basada en claves para que esta sshconexión de localhosta localhostno solicite su contraseña. La observación anterior con respecto al firewall se encuentra. Cualquier persona que pueda usar $your_IP:$port_numbercomo dirección de servidor SOCKS será visto por los servidores que visite como si estuvieran en su computadora.
Fragmentos relevantes de man 1 ssh:
-D [bind_address:]port
Especifica un reenvío de puerto a nivel de aplicación "dinámico" local. Esto funciona asignando un socket para escucharporten el lado local, opcionalmente vinculado al especificadobind_address. Cada vez que se realiza una conexión a este puerto, la conexión se reenvía a través del canal seguro, y el protocolo de aplicación se utiliza para determinar dónde conectarse desde la máquina remota. Actualmente, los protocolos SOCKS4 y SOCKS5 son compatibles ysshactuarán como un servidor SOCKS. Solo root puede reenviar puertos privilegiados. [...]
-f
Solicitudessshpara pasar a segundo plano justo antes de la ejecución del comando. [...]
-g
Permite que los hosts remotos se conecten a puertos locales reenviados.
-N
No ejecute un comando remoto. Esto es útil solo para reenviar puertos. [...]
my_iprefiere ni dónde está el enrutador de su red ni qué hace. Aunque creo que te estás perdiendo-g. Si desea que su computadora portátil Linux actúe como un único relé, entoncesssh -g -D 5050 $username@localhostdebería ser el primer paso. Si la computadora portátil está detrás de un enrutador que implementa NAT y si los posibles clientes no están en la misma LAN, entonces debe configurar el reenvío de puertos allí.ssh -p $forwarded_port -D $port_number $username@$external_IP_of_home. CALCETINES configuración del proxy en el navegador "viajar":localhost:$port_number. Este es el caso que comienza con "Digamos" en mi respuesta.