Configuración:
Tengo una configuración de cliente / servidor openvpn (archivos de configuración en la parte inferior), y recibo el MULTI: bad source address from client [192.168.x.x], packet dropped
mensaje infame en el servidor. El servidor tiene una dirección IP pública, mientras que el cliente está detrás de NAT.
Deficiencias de las soluciones propuestas anteriormente:
La client-config-dir
definida en la configuración del servidor está actualmente vacía. Las publicaciones anteriores (aquí y en los foros de soporte de openvpn) sugieren agregar un archivo DEFAULT
con las reglas adecuadas client-config-dir
o agregar un archivo por usuario con esas reglas para resolver el problema.
Sin embargo, esto no parece ser una solución a largo plazo, porque estas reglas son específicas de la ubicación del cliente. Entonces, puedo agregar una regla para permitir que los clientes se 192.168.x.0
conecten. Pero si se conectan desde otra red que en su lugar utiliza 192.168.y.0
para NAT, se requerirá una nueva regla.
Preguntas:
- ¿Se pueden escribir las reglas requeridas de forma genérica / única?
- ¿Alguien puede explicar por qué este problema ocurre en primer lugar?
Configuración del servidor:
port 1234
proto tcp
dev tun
ca ca.crt
cert openvpn.crt
key openvpn.key
dh dh2048.pem
server 10.78.96.0 255.255.255.0
keepalive 10 120
comp-lzo
cipher CAMELLIA-128-CBC
user nobody
group nogroup
persist-key
persist-tun
client-cert-not-required
plugin /usr/lib/openvpn/openvpn-auth-pam.so login
status openvpn-status.log
push "redirect-gateway def1"
push "remote-gateway 1.2.3.4"
push "dhcp-option DNS 8.8.8.8"
client-config-dir ccd
verb 4
Configuración del cliente:
ca ca.crt
client
dev tun
proto tcp
remote 1.2.3.4 1234
auth-user-pass
script-security 2
keepalive 5 60
topology subnet
resolv-retry infinite
nobind
persist-key
persist-tun
ns-cert-type server
cipher CAMELLIA-128-CBC
comp-lzo
verb 4
192.168.x.0
y un cliente que está192.168.y.0
conectado a la red? Todos están en la misma192.168.x.x/16
red que ha definido ... (?)Respuestas:
Usted preguntó: " ¿Alguien puede explicar por qué este problema ocurre en primer lugar? "
Según lo informado en las preguntas frecuentes oficiales de OpenVPN , apuesto a que es causado por un problema de enrutamiento dentro del motor de OpenVPN.
Para aclarar mejor el escenario, permítanme referirme al siguiente diagrama:
Aquí puedes ver:
también
Ahora, supongamos que:
Con tal escenario en su lugar, verifiquemos en detalle qué sucede cuando R_PC1 (192.168.1.2) envía un paquete, como una solicitud de eco, a L_PC1 (10.0.1.2):
Entonces todo está bien ...
Ahora verifiquemos qué sucede con la respuesta de eco que L_PC1 responde a R_PC1.
Ahora, si queremos que OpenVPN Server pueda llegar al sitio remoto, debemos definir el enrutamiento con una "ruta estática". Algo como:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.10.0.2
Tenga en cuenta la dirección P2P utilizada como puerta de enlace .
Dichas rutas estáticas operarán a nivel del sistema operativo. En otras palabras, es necesario que el sistema operativo enrute correctamente el paquete. Significa algo como: "Por favor, todo el tráfico dirigido a la subred 192.168.1.0/24 debe reenviarse al motor OpenVPN, con el que el sistema operativo puede comunicarse a través de la dirección P2P". Gracias a esa ruta estática, ahora ...
Entonces, ahora, el problema es: ¿cómo, el software del servidor openvpn, podrá decidir la ruta de un paquete, con SRC_IP 10.0.1.2 y DST_IP 192.168.1.2 ?
Tenga en cuenta que, según la configuración del servidor OpenVPN, no sabe nada acerca de la red 192.168.1.0/24 ni del host 192.168.1.2. Es no un cliente conectado. Es no un cliente local. ¿Y entonces? OpenVPN, también, sabe que es no el "OS-Router", por lo que en realidad no quiere (y puede ....) enviar el paquete de regreso a la puerta de enlace local. Entonces, la única opción, aquí, es generar un error. Exactamente el error que estás experimentando
Para decirlo con el lenguaje de las preguntas frecuentes: " ... no sabe cómo enrutar el paquete a esta máquina, por lo que deja caer el paquete ... ".
Cómo podemos resolver el problema?
Como puede ver en la documentación oficial , la opción iroute sirve exactamente para nuestro alcance:
Entonces necesitas un:
se aplicará (al servidor) cuando su cliente OpenVPN se conecte, por ejemplo, a través de un archivo de configuración ad-hoc definido en el servidor (client-config-dir, etc.).
Si se pregunta por qué este problema no ocurre en el paso 2) anterior, entiendo que OpenVPN Client sabe cómo enrutarlo, porque sabe que el túnel VPN es una puerta de enlace predeterminada.
No se puede hacer lo mismo en OpenVPN Server, porque allí la puerta de enlace predeterminada normalmente no se anula. Además, considere que podría tener un único servidor OpenVPN con un montón de clientes OpenVPN: cada cliente sabe cómo llegar al servidor pero ... ¿cómo puede, el servidor, decidir cuál es el cliente que actúa como puerta de enlace para una subred desconocida?
En cuanto a su primera pregunta ( ¿Pueden escribirse las reglas requeridas de forma genérica / única? ), Lo siento, pero no entiendo su problema. ¿Puedes reformular proporcionando más detalles?
fuente
Tuve un problema que parece similar, pero no estoy seguro si es el mismo que tu problema. Intenté hacer ping desde un cliente openvpn a una computadora en la red local del servidor openvpn (enrutada en la configuración del servidor), no obtuve respuesta y pude ver el mensaje de "dirección de origen incorrecta" en el registro openvpn del servidor.
Para resolverlo, tuve que hacer 2 cosas:
Eso me lo arregló.
fuente