OpenVPN n'est pas la passerelle par défaut pour tout le trafic

21

J'essaie de faire en sorte que mon client transfère tout le trafic via un VPS exécutant OpenVPN. Comme vous pouvez le voir, il autorisera les pings vers les domaines et les adresses IP brutes, mais il n'autorisera pas le trafic comme celui effectué via curl et traceroute ne génère rien. Le trafic fonctionne correctement lorsqu'il n'est pas connecté au VPN.

Toutes les informations sont ici: https://pastebin.com/tGspNefn

Merci.

Configurations de travail grâce à la solution ci-dessous:

Serveur:

port <integer>
proto udp
dev tun
ca ca.crt
cert vpnserver.crt
key vpnserver.key  # This file should be kept secret
dh dh4096.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway autolocal"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

Client:

client
dev tun
proto udp
remote x.x.x.x <port number>
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert vpnclient.crt
key vpnclient.key
tls-auth ta.key 1
ns-cert-type server
cipher AES-256-CBC
comp-lzo
verb 3
DrDinosaur
la source
/sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 10.8.0.5 pourquoi netmask 128.0.0.0?
Antony Gibbs
Merci DrDinosaur d'avoir signalé serverfault.com/questions/312860/…
Antony Gibbs
3
La prochaine fois, extrayez les informations pertinentes et incluez-les dans la question. Les extraits de code Pastebin ont une durée de vie limitée.
MLu

Réponses:

34

La solution comprend deux parties:

1. Redirigez tout le trafic dans le tunnel

La solution la plus simple - utilisez l' --redirect-gateway autolocaloption d'OpenVPN (ou placez-la dans le fichier de configuration sous redirect-gateway autolocal.

2. Traitez le trafic sur le serveur OpenVPN

Maintenant que le tunnel est en place, tout le trafic entre dans le tunnel et apparaît à l'extrémité du serveur depuis l' tun0interface.

Vous devez configurer deux choses pour le faire fonctionner:

une. Activer le transfert de paquets

Par défaut dans la plupart des distributions, le transfert de paquets est désactivé, par conséquent, les paquets provenant de l'interface de tunnel ne parviennent jamais à l'interface publique. Vous devez activer le transfert avec:

~ # sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

Une fois testé, rendre le changement permanent /etc/sysctl.conf

Assurez-vous également que iptablesne bloquent pas le trafic transféré:

~ # iptables -I FORWARD -j ACCEPT

C'est assez bon pour les tests - en production, vous voudrez rendre les règles de pare-feu un peu plus spécifiques, mais cela est hors de portée ici.

b. NAT les paquets sortants du tunnel

Avec le transfert activé, les paquets sont transférés par défaut avec leur adresse source inchangée, c'est dans votre cas 10.8.0.6- ces paquets sont soit abandonnés sur la passerelle ISP ou même s'ils arrivent à destination, la réponse ne retrouve jamais le chemin du retour. Ces adresses privées ne sont pas routables sur Internet.

La solution consiste à NAT le trafic de sortie, c'est-à-dire remplacer l' 10.8.0.6adresse privée par l' adresse IP publique du serveur VPN. Cela garantira que les réponses parviennent au serveur VPN et là, elles seront renvoyées dans le tunnel.

~ # iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

3. Testez-le

Essayez maintenant à ping 8.8.4.4partir de votre client VPN. Vous devriez voir une réponse. Faites-nous savoir si non :)

MLu
la source
Cela fonctionne parfaitement maintenant. Merci beaucoup pour la réponse de haute qualité.
DrDinosaur
Côté client, ajoutez add pull au fichier client.conf ou ou ajoutez l'option --pull à la ligne de commande pour que le client accepte la configuration poussée par le serveur. De plus, si le client s'exécute sous Windows Vista ou plus récent, désactivez l'UAC, sinon le service openpn exécuté sur le client ne pourra pas définir de routes.
Viktor
> b. NAT les paquets sortants du tunnel Cela m'a été utile.
FelikZ
Tenez vraiment compte du fait que la règle FORWARD -j ACCEPT fait du serveur un routeur ouvert entre toutes ses interfaces. Il ne doit pas être utilisé sur les systèmes de production. Mais pour un HowTo qui le fait fonctionner rapidement, un très bon ensemble d'instructions.
Sprinterfreak
Est-ce que l' Redirect all the traffic into the tunnelétape de configuration du client?
avion