2 votes

Comment acheminer le trafic via OpenVPN pour le serveur uniquement ?

J'ai un certain nombre de services fonctionnant sur mon serveur auxquels je veux restreindre l'accès à ceux qui se connectent par OpenVPN. J'ai réussi à faire fonctionner le routage vers une deuxième IP que j'ai ajoutée à la machine, mais ce n'est pas idéal.

*.*.*.1 est l'IP publique primaire. Elle est liée à l'IP locale 172.31.20.102 . *.*.*.2 est l'IP secondaire sur la même machine que celle créée pour les tests. Elle est liée à l'IP locale 172.31.20.103 . Cela se fait dans l'interface Amazon EC2, pas sur le serveur.

Note : Les *s servent juste à masquer l'adresse IP ici. La vraie configuration contient les adresses IP publiques réelles.

Voici les éléments pertinents de la configuration du serveur OpenVPN :

dev tun
server 172.16.128.32 255.255.255.240
#push "route *.*.*.1 255.255.255.255 net_gateway"
push "route *.*.*.2 255.255.255.255"

J'ai essayé à la fois avec et sans le push "route *.*.*.1 255.255.255.255 net_gateway" c'est pourquoi je l'ai commenté dans cet exemple. Notez que le routage fonctionne vers *.*.*.2 dans la configuration actuelle.

L'IP du serveur sur le VPN est 172.16.128.33 .

Voici la ligne pertinente de sysctl.conf :

net.ipv4.ip_forward = 1

Voici les extraits pertinents de iptables-save :

*nat
-A PREROUTING -p tcp -m state --state NEW -m tcp --dport 22 -j DNAT --to-destination 172.16.128.33
-A POSTROUTING -s 172.16.128.32/28 -o eth0 -j MASQUERADE
COMMIT
*filter
-A FORWARD -i tun0 -s 172.16.128.32/28 -d *.*.*.1 -j ACCEPT
-A FORWARD -i tun0 -s 172.16.128.32/28 -d *.*.*.2 -j ACCEPT
-A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 172.16.128.32/28 -j ACCEPT
-A INPUT -s 172.31.20.100/28 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

-A PREROUTING -p tcp -m state --state NEW -m tcp --dport 22 -j DNAT --to-destination 172.16.128.33 m'a permis de me connecter en SSH à l'interface alternative. Ajouter une de ces lignes pour chaque port n'est pas idéal, mais serait acceptable s'il n'y a pas d'autres options.

Je veux pouvoir accéder au port 22, par exemple, sur *.*.*.1 . Je préférerais que la connexion provienne de *.*.*.1 plutôt que mon adresse IP publique. Je réalise que je ne peux pas acheminer TOUT le trafic par le tunnel, car le tunnel lui-même doit être maintenu, mais je veux que tout le reste passe par le tunnel.

Faites-moi savoir si j'ai manqué des informations utiles.

0voto

Andrew Domaszek Points 5073

Pour autant que je sache, EC2 ne met pas en œuvre le bouclage nat, ce qui explique l'échec des connexions vers vous-même.

La solution la plus simple est d'ajouter l'IP publique à une interface fictive ou de DNATer tout ce qui serait redirigé vers l'IP publique vers votre adresse interne.

Interface factice :

ip link add dummy0 type dummy
ip addr add *.*.*.1/32 dev dummy0
ip link set dummy0 up
iptables -A OUTPUT -s *.*.*.1/32 -o eth+ -j REJECT
iptables -A FORWARD -i tun+ -o dummy0 -j ACCEPT
iptables -A FORWARD -i dummy0 -o tun+ -j ACCEPT

ou NAT :

iptables -t nat -A PREROUTING -i tun+ -p tcp -d *.*.*.1 -m state --state NEW -j DNAT --to-destination 172.16.128.33

Une solution plus courante consiste à mettre en œuvre un DNS à horizon partagé, ce qui vous permettra de faire fonctionner votre réseau sécurisé par nom avec des IP internes et externes. Cela facilitera considérablement le routage et la gestion automatiques à l'avenir, au fur et à mesure que votre réseau évoluera.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X