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.