Configuration:
J'ai une configuration client / serveur openvpn (fichiers de configuration en bas), et je reçois le fameux 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.
Lacunes des solutions précédemment proposées:
La client-config-dir
définition dans la configuration du serveur est actuellement vide. Les articles précédents (ici et dans les forums de support openvpn) suggèrent d'ajouter soit un fichier nommé DEFAULT
avec les règles appropriées dans client-config-dir
, soit ajouter 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 du client. Je peux donc ajouter une règle pour autoriser les clients 192.168.x.0
à se connecter. Mais s'ils se connectent à partir d'un autre réseau qui utilise à la place 192.168.y.0
pour NAT, une nouvelle règle sera requise.
Des questions:
- Les règles requises peuvent-elles être écrites de manière générique / ponctuelle?
- Quelqu'un peut-il expliquer pourquoi ce problème se produit en premier lieu?
Configuration du serveur:
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
Configuration 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
192.168.x.0
et un client qui est sur le192.168.y.0
réseau? Ils sont tous dans le même192.168.x.x/16
réseau que vous avez défini ... (?)Réponses:
Vous avez demandé: " Quelqu'un peut-il expliquer pourquoi ce problème se produit en premier lieu? "
Sur la base de ce qui est rapporté dans la FAQ officielle d'OpenVPN, je parie que cela est dû à un problème de routage dans le moteur OpenVPN.
Pour mieux clarifier le scénario, je me réfère au schéma suivant:
Içi vous pouvez voir:
Aussi
Supposons maintenant 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...
Voyons maintenant ce qui se passe avec l'écho-réponse que L_PC1 répond à R_PC1.
Maintenant, si nous voulons qu'OpenVPN Server puisse 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 routes statiques fonctionneront au niveau du système d'exploitation. En d'autres termes, il est nécessaire que le système d'exploitation achemine correctement 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 transmis au moteur OpenVPN, avec lequel le système d'exploitation est capable de parler via l'adresse P2P". Grâce à cette route statique, maintenant ...
Donc, maintenant, le problème est: comment, le logiciel serveur openvpn, pourra-t-il décider de l'itinéraire d'un paquet, avec SRC_IP 10.0.1.2 et DST_IP 192.168.1.2 ?
Veuillez noter que, basé sur la configuration du serveur OpenVPN, il ne sait rien du réseau 192.168.1.0/24, ni de l'hôte 192.168.1.2. Ce n'est pas un client connecté. Ce n'est pas un client local. Et donc? OpenVPN sait également que ce n'est pas le "OS-Router", donc il ne veut pas vraiment (et peut ....) renvoyer le paquet à la passerelle locale. Donc, la seule option, ici, est de déclencher une erreur. Exactement l'erreur que vous rencontrez
Pour le dire avec le langage de la FAQ: " ... il ne sait pas comment acheminer le paquet vers cette machine, donc il laisse tomber le paquet ... ".
Comment pouvons-nous résoudre le problème?
Comme vous pouvez le voir dans la documentation officielle , l'option iroute sert exactement à notre portée:
Vous avez donc besoin d'un:
à appliquer (au serveur) lorsque votre client OpenVPN se connecte, 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 ne se produit pas à l'étape 2) ci-dessus, je comprends qu'OpenVPN Client sait comment l'acheminer, car il sait que le tunnel VPN est une passerelle par défaut.
La même chose ne peut pas être faite sur OpenVPN Server, car là, la passerelle par défaut n'est généralement pas remplacée. En outre, considérez que vous pourriez avoir un seul serveur OpenVPN avec beaucoup de clients OpenVPN: chaque client sait comment atteindre le serveur mais ... comment le serveur peut-il décider quel client fait office de passerelle pour un sous-réseau inconnu?
Quant à votre première question ( les règles requises peuvent-elles être écrites de manière générique / ponctuelle? ), Je suis désolé mais je ne reçois pas votre problème. Pouvez-vous reformuler en fournissant plus de détails?
la source
J'ai eu un problème qui semble similaire, mais je ne sais pas si c'est le même que votre problème. J'essayais d'envoyer une requête ping d'un client openvpn à un ordinateur dans le réseau local du serveur openvpn (acheminé dans la configuration du serveur), sans obtenir de réponse et je pouvais voir le message "mauvaise adresse source" dans le journal openvpn du serveur.
Pour le résoudre, j'ai dû faire 2 choses:
Cela m'a arrangé.
la source