web-dev-qa-db-fra.com

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

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

Je vous remercie.

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
21
DrDinosaur

La solution comprend deux parties:

1. Redirige tout le trafic dans le tunnel

La solution la plus simple - utilisez l'option --redirect-gateway autolocal 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 passe dans le tunnel et apparaît à l'extrémité du serveur à partir de l'interface tun0.

Vous devez configurer deux choses pour le faire fonctionner:

a. 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é, rendez le changement permanent dans /etc/sysctl.conf

Assurez-vous également que iptables ne bloque 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

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

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

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

. Testez-le

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

34
MLu