He configurado Dante sockd para reenviar tráfico a través de múltiples interfaces IP. La configuración es básicamente esta:
logoutput: /var/log/sockd.log
debug: 1
socksmethod: username none
internal: eth0 port = 60000
external: eth0
internal: eth0:0 port = 60000
external: eth0:0
internal: eth0:1 port = 60000
external: eth0:1
internal: eth0:2 port = 60000
external: eth0:2
...
external.rotation: same-same
client pass {
from: 0.0.0.0/0 port 1-65535 to: 0.0.0.0/0
socksmethod: username
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
socksmethod: username
protocol: tcp udp
}
Con 'external.rotation = Same.same' el tráfico deshabilitado pasa a través del servidor pero solo sale de una dirección. Cuando está habilitado, aparece el siguiente error al usar curl:
curl: (7) Can't complete SOCKS5 connection to x.x.x.x:80. (3)
y este error en los registros:
May 15 07:38:38 (1431689918.007569) sockd[4887]: info: block(1): tcp/accept ]: x.x.x.x.56066 y.y.y.y.60000: request was not performed due to error: could not get address to use on external side: using external.rotation = same-same, local address x.x.x.x was selected for forwarding from our local client x.x.x.x.56066 to target z.z.z.z.80, but that local address is not set on our external interface(s). Configuration error in /etc/sockd.conf?
xxxx es mi dirección IP, yyyy es la dirección del lado del servidor y zzzz es la dirección de destino.
Eso me sugiere que el servidor espera hacerse pasar por mi dirección pero que no está configurado, lo cual es correcto ya que quiero que se vea que el tráfico proviene de la dirección yyyy donde hay más de cien para elegir.
No puedo encontrar nada en la documentación que coincida con el error que estoy viendo y sospecho que se necesita algún tipo de configuración de operación por turnos, pero tampoco puedo encontrarla. ¿Alguien ha hecho que esto funcione de esta manera?
Respuesta1
Lo siguiente me funcionó con Dante 1.4.2 en CentOS 6.x 64 bits, aunque no uso autenticación porque accedo a Dante a través de túneles SSH (las IP de mi servidor son 1.1.1.1, 2.2.2.2 y 3.3.3.3):
logoutput: syslog stdout stderr /var/log/sockd.log
internal: eth0:0 port = 1080
internal: eth0:1 port = 1080
internal: eth0:2 port = 1080
external: eth0:0
external: eth0:1
external: eth0:2
external.rotation: same-same
user.privileged: root
user.unprivileged: sockd
#user.libwrap: sockd
clientmethod: none
socksmethod: none
client pass {
from: 1.1.1.1/32 to: 0.0.0.0/0
log: error # connect disconnect
}
client pass {
from: 2.2.2.2/32 to: 0.0.0.0/0
log: error # connect disconnect
}
client pass {
from: 3.3.3.3/32 to: 0.0.0.0/0
log: error # connect disconnect
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bind connect udpassociate
log: error # connect disconnect iooperation
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bindreply udpreply
log: error # connect disconnect iooperation
}
Luego creé tres túneles locales desde mi máquina cliente:
ssh -L 10801:1.1.1.1:1080 -L 10802:2.2.2.2:1080 -L 10803:3.3.3.3:1080 [email protected]
Creo que la mayoría de los problemas que tuve con la configuración se debieron a problemas de permisos (pase de cliente y pase de calcetines).
Si aún tienes problemas, puedes probar una alternativa a Dante: 3Proxy.
Configurarías 3proxy de esta manera:
nserver 8.8.8.8
auth none
daemon
socks -p1080 -i1.1.1.1 -e1.1.1.1
socks -p1080 -i2.2.2.2 -e2.2.2.2
socks -p1080 -i3.3.3.3 -e3.3.3.3
pidfile /var/run/3proxy.pid
log /dev/null
Espero que esto ayude.
Respuesta2
¿Has intentado habilitar el reenvío de IP para tu sistema operativo?
sysctl -w net.ipv4.ip_forward=1
o
echo 1 > /proc/sys/net/ipv4/ip_forward
Más información @http://linuxconfig.org/how-to-turn-on-off-ip-forwarding-in-linux