
Intento reenviar tráfico desde un puerto local a una máquina remota a través de SSHapoderado(no túnel). Aprendí que no se puede hacer solo con reglas de iptables (corríjame si no es cierto), así que configuré REDSOCKS para redirigir las conexiones TCP al proxy SSH SOCKS.
Logré transportar el tráfico local a la máquina remota con reglas de iptables en la cadena de SALIDA, pero el mismo concepto en PREROUTING no funciona. El objetivo es hacer que la máquina local vea Internet exterior como lo sería en la red de la máquina remota (como una VPN).
---------- --------------
| inside | <-- 10.0.0.0/24 --> |-> iptables |
---------- | | |
| ˇ |
| redsocks |
| | |
| ˇ | ----------
| ssh -> | <-- internet --> | remote |
-------------- ----------
Nota: ¡No quiero hacer nada (cambiar la configuración, agregar rutas) en la máquina remota!
Conexión SSH establecida con ssh -D 1337 user@remote
.
Redsocks ya está configurado e iniciado, escuchando en el puerto 12345
.
en la máquina del medio:
OUTSIDE_INTERFACE=wlan0
INSIDE_INTERFACE=eth0
SSH_SOCKS_PORT=1337
REDSOCKS_PORT=12345
# set the ip address
ifconfig $INSIDE_INTERFACE 10.0.0.1 netmask 255.255.255.0
# enable ip forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# reset iptables
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -F
iptables -X
# redirect local traffic, except traffic from redsocks to ssh
iptables -t nat -A OUTPUT -p tcp --dport $SSH_SOCKS_PORT -j RETURN
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports $REDSOCKS_PORT
# redirect traffic from inside
iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports $REDSOCKS_PORT
Entonces, después de esto, el tráfico de la máquina local se redirige y veo Internet como si estuviera en la red remota.
Pero la máquina interiorno puedoacceso a Internet.
(La dirección IP en eladentroLa máquina ya está configurada, probada con un ping exitoso).
Lo intenté:
iptables -t nat -A PREROUTING -s 10.0.0.0/24 -p tcp -j REDIRECT --to-ports 12345
- añadiendo
iptables -t nat -A POSTROUTING -o $OUTSIDE_INTERFACE -j MASQUERADE
Si yosoloestablecer la iptables -t nat -A POSTROUTING -o $OUTSIDE_INTERFACE -j MASQUERADE
reglasolo, la máquina interna puede acceder a Internet (pero no a través del proxy).
Después de intentar conectarme, veo las siguientes estadísticas:
# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 10 packets, 641 bytes)
pkts bytes target prot opt in out source destination
42 2184 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 redir ports 12345
Chain INPUT (policy ACCEPT 43 packets, 2244 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 19 packets, 1164 bytes)
pkts bytes target prot opt in out source destination
18 1080 RETURN tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:1337
18 1080 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 redir ports 12345
Chain POSTROUTING (policy ACCEPT 46 packets, 2825 bytes)
pkts bytes target prot opt in out source destination
Según tengo entendido, significa que los paquetes de la máquina interna también se redirigen, pero luego se pierden en alguna parte...
También tengo alguna pregunta
- ¿Por qué la regla no redirige el tráfico ssh
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports $REDSOCKS_PORT
? Sólo filtré el$SSH_SOCKS_PORT
puerto...
Respuesta1
Ok, el problema no estaba en las reglas de iptables, o no principalmente.
Redirección de iptablesHaz lo siguiente:
Redirige el paquete a la propia máquina cambiando la IP de destino a la principaldirección de la interfaz entrante(Los paquetes generados localmente se asignan a la dirección 127.0.0.1).
Y los calcetines rojos, de forma predeterminada, solo escuchan el paquete que llega.127.0.0.1, por lo que los paquetes con destino a una dirección de interfaz no llegarán a redsocks.
Después de cambiar la configuración de redsocks alocal_ip = 0.0.0.0;
funcionó.
(Nota: es solo para TCP, para UDP (como DNS) se necesitan más configuraciones).
Respuesta2
Según su situación, solo necesita monitorear redsocks hasta 10.0.0.1, luego REDIRECT o DNAT, por ejemplo
iptables -t nat -A PREROUTING -p tcp -m tcp --syn -j DNAT --to 10.0.0.1:12345
Encontré el mismo problema que tú. La SALIDA me confundió y seguí escuchando en 127.0.0.1.
Referencia:Enrutar una conexión VPN a un proxy de calcetines en el mismo servidor