Configuration : J'ai la configuration client/serveur OpenVPN (fichiers de configuration en bas), et je reçois le problème infâme MULTI: bad source address from client [192.168.x.x], packet dropped
Message sur le serveur. Le serveur a une adresse IP publique, tandis que le client est derrière NAT.
Résolution des solutions précédemment proposées : le client-config-dir
défini dans la configuration du serveur est actuellement vide. Les messages précédents (ici et dans OpenVPN Support Forums) suggèrent d'ajouter un fichier nommé DEFAULT
avec les règles appropriées en client-config-dir
, ou ajout d'un fichier par utilisateur avec ces règles pour résoudre le problème.
Cependant, cela ne semble pas être une solution à long terme, car ces règles sont spécifiques à l'emplacement de la clientèle. Donc, je peux ajouter une règle pour permettre aux clients de 192.168.x.0
se connecter. Mais s'ils se connectent d'un autre réseau qui utilise plutôt 192.168.y.0
Pour NAT, une nouvelle règle sera nécessaire.
Questions :
Server config :
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
Config client :
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
Vous avez demandé: " peut que quelqu'un puisse expliquer pourquoi ce problème se produit en premier lieu? "
Sur la base de ce qui est rapporté dans la FAQ officiel OpenVPN Je parie qu'il est causé par un problème de routage dans le moteur OpenVPN.
Pour mieux clarifier le scénario, laissez-moi vous référer au diagramme suivant:
Içi vous pouvez voir:
Aussi
Maintenant, supposons que:
Avec un tel scénario en place, vérifions en détail ce qui se passe lorsque R_PC1 (192.168.1.2) envoie un paquet, comme une demande d'écho, à L_PC1 (10.0.1.2):
Alors tout va bien...
Vérifions maintenant ce qui se passe avec la réponse d'écho que l_pc1 répond à R_PC1.
Maintenant, si nous voulons que OpenVPN Server soit capable d'atteindre le site distant, nous devons définir le routage avec une "route statique". Quelque chose comme:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.10.0.2
Veuillez noter l'adresse P2P utilisée comme passerelle .
Ces itinéraires statiques fonctionneront au niveau du système d'exploitation. En d'autres termes, il est nécessaire que le système d'exploitation ait correctement acheminer le paquet. Cela signifie quelque chose comme: "S'il vous plaît, tout le trafic adressé au sous-réseau 192.168.1.0/24 doit être envoyé au moteur OpenVPN, avec lequel le système d'exploitation est capable de parler via l'adresse P2P". Merci à une telle route statique, maintenant ...
Donc, maintenant, le problème est: Comment, le logiciel de serveur OpenVPN, pourra décider de la route d'un paquet, avec SRC_IP 10.0.1.2 et DST_IP 192.168.1.2 ?
Veuillez noter que, sur la base de la configuration du serveur OpenVPN, il connaît Rien sur le réseau 192.168.1.0/24, ni l'hôte de 192.168.1.2. C'est non un client connecté. C'est non un client local. Et donc? OpenVPN, aussi, sait que c'est non le "os-routeur", donc cela ne veut pas vraiment (et peut ...) envoyer le paquet à la passerelle locale. Donc, la seule option, ici, c'est d'élever une erreur. Exactement l'erreur que vous rencontrez
Pour le dire avec la langue de la FAQ: " ... il ne sait pas comment acheminer le paquet sur cette machine, il est donc de goutte le paquet ... ".
Comme vous pouvez le constater à partir de la documentation officielle , l'option IROUTE sert exactement à notre portée:
--iroute network [netmask]
Generate an internal route to a specific client. The netmask
parameter, if omitted, defaults to 255.255.255.255.
This directive can be used to route a fixed subnet from the server
to a particular client, regardless of where the client is
connecting from. Remember that you must also add the route to the
system routing table as well (such as by using the --route
directive). The reason why two routes are needed is that the
--route directive routes the packet from the kernel to OpenVPN.
Once in OpenVPN, the --iroute directive routes to the specific
client.
Donc, vous avez besoin d'un:
--iroute 192.168.1.0 255.255.255.0
pour être appliqué (sur le serveur) lorsque votre client OpenVPN Connectez-vous, par exemple via un fichier de configuration ad-hoc défini sur le serveur (client-config-dir, etc.).
Si vous vous demandez pourquoi ce problème n'est-il pas sur l'étape 2) ci-dessus, ma compréhension est que le client OpenVPN connaît comment l'acheminer, car Sait que le tunnel VPN est une passerelle par défaut.
La même chose ne peut être faite sur OpenVPN Server, car il y a la passerelle par défaut non remplacée . En outre, considérez que vous pourriez avoir un seul serveur OpenVPN avec beaucoup de client OpenVPN: chaque client sait accéder au serveur, mais ... Comment pouvez-vous, le serveur, décide quel est le client agissant comme une passerelle pour un sous-réseau inconnu?
Quant à votre première question (, les règles requises peuvent être écrites de manière générique/ponctuelle? ), je suis désolé mais je n'ai pas votre problème même. Pouvez-vous reformuler fournir plus de détails?
J'ai eu un problème qui semble semblable, mais je ne suis pas sûr que si c'est la même chose que votre problème. J'essayais de ping d'un client OpenVPN à un ordinateur dans le réseau local du serveur OpenVPN (acheminé dans la configuration du serveur), à ne pas répondre et je pouvais voir le message "Adresse de mauvaise source" du journal OpenVPN du serveur.
Pour le résoudre, je devais faire 2 choses:
Cela a résolu pour moi.