OpenVPN bypass sur certains ports

J'ai un server exécutant Debian 7 et je voudrais me connecter à un VPN et laisser passer tout le trafic via le VPN à l'exception de certains ports (SSH, sites hébergés, etc.).

J'ai cherché quelque time maintenant sur Internet, mais rien ne semble fonctionner comme prévu.

Je ne suis pas un expert iptables / network, alors peut-être que je manque quelque chose …

Voici mes scripts:

Avant le script VPN

Voici le script commencé avant le VPN, il est utilisé pour bloquer tout le trafic sortant / in sans passer via le VPN, à l'exception de certains ports (SSH ici).

Si je commence seulement ce script, il fait son travail. Je peux me connecter à mon server via SSH, mais tous les autres ports sont bloqués et le server ne peut pas accéder à Internet (car le VPN n'est pas lancé).

#!/bin/bash # Flush iptables iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X # Default policy iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP # Accept packets through VPN iptables -A INPUT -i tun+ -j ACCEPT iptables -A OUTPUT -o tun+ -j ACCEPT # Accept local connections iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Accept connection to/from VPN servers iptables -A INPUT -s xxx.xxx.xxx.xxx -j ACCEPT iptables -A OUTPUT -d xxx.xxx.xxx.xxx -j ACCEPT # Disable Reverse Path Filtering on all network interfaces for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 0 > $i done # Open ports on iptable iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT 

Route-up OpenVPN script

Voici le script appelé via l'option "route-up" OpenVPN. C'est le script qui devrait rendre les ports ignorer le VPN.

 #!/bin/bash WAN_GATEWAY="xxx.xxx.xxx.xxx" echo 1 > /proc/sys/net/ipv4/ip_forward # Delete table 100 and flush all existing rules ip route flush table 100 ip route flush cache iptables -t mangle -F PREROUTING # Table 100 will route all traffic with mark 1 to WAN (no VPN) ip route add default table 100 via $WAN_GATEWAY dev eth0 ip rule add fwmark 1 table 100 ip route flush cache # Mark packets on port 22 iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE 

Fichier de configuration OpenVPN

Voici le file de configuration du client OpenVPN.

 client dev tun proto udp resolv-retry infinite nobind tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 persist-key persist-tun comp-lzo verb 3 redirect-gateway def1 user nobody group nogroup script-security 2 auth-user-pass /path/to/config/login.conf route-up /path/to/scripts/vpn_up.sh remote xxx.xxx.xxx.xxx 443 ca /path/to/config/certs/ch.crt 

Mon problème est que lorsque le VPN augmente, je ne peux plus accéder à mon server.

Qu'est-ce que je fais mal?

Merci beaucoup pour votre aide !

Après un peu plus de search, j'ai trouvé ce fil: https://forum.linode.com/viewtopic.php?p=50114&sid=b440414422596bb7dbc96cf7c9ee511f#p50114

J'ai maintenant modifié mon script OpenVPN "route-up" comme suit, et ça fonctionne finalement! J'ai supprimé toutes les autres règles désordonnées (iptable PREROUTING, MASQUERADE, etc.).

Voici mon dernier script "route-up":

 ip route flush table 100 ip route flush cache ip rule add from xxxx table 100 ip route add table 100 to yyyy/y dev ethX ip route add table 100 default via zzzz 

Lorsque xxxx est l'adresse IP publique de mon server, yyyy / y est le sous-réseau de l'adresse IP publique de mon server, ethX est l'interface Ethernet publique de mon server et zzzz est la passerelle par défaut.

J'espère que cela pourrait aider quelqu'un d'autre.

Après avoir traversé la même épreuve, j'ai trouvé au less un problème avec le script route-up.

 iptables -t mangle -A PREROUTING ... 

devrait être:

 iptables -t mangle -A OUTPUT ... 

Lisez la raison pour laquelle: http://www.iptables.info/fr/structure-of-iptables.html

Je n'ai pas eu à activer le renvoi IP.