2 votes

Comment configurer iptables pour un VPN dial-up avec OpenVPN et deux interfaces ?

J'ai une instance AWS EC2, exécutant Amazon Linux, à laquelle sont attachées deux interfaces réseau élastiques (ENI) : eth0 et eth1. Je me connecte à l'IP publique sur eth0. Tout fonctionne parfaitement, sauf que je voudrais acheminer le trafic non crypté à partir de eth1. Par exemple, le client se connecte à eth0 pour configurer un tunnel VPN crypté, puis son trafic Internet non crypté est acheminé vers/depuis eth1 et revient à travers le tunnel sur eth0.

Je ne m'y connais pas assez en iptables pour que cette configuration fonctionne, même si j'ai essayé pendant plusieurs heures. J'espère qu'il s'agit d'une configuration simple ?

J'ai installé la dernière version d'OpenVPN à partir des sources et j'ai fait ce qui suit :

  1. Vérification source/dest désactivée sur les interfaces
  2. Ajouté ce qui suit à "rc.local" : echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
  3. Ajouté les commandes iptables suivantes : iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 443 -j ACCEPT iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t nat -A POSTROUTING -s 10.18.14.0/24 -o eth0 -j MASQUERADE

Le fichier de configuration de mon serveur ressemble à ceci :

port 443
proto tcp-server
dev tun
tls-server
server 10.18.14.0 255.255.255.0

ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/vpnserver.crt
key /etc/openvpn/pki/vpnserver.key
dh /etc/openvpn/pki/dh.pem

ifconfig-pool-persist ipp2.txt 
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

keepalive 5 15
comp-lzo
max-clients 5
persist-key
persist-tun
status openvpn-status.log
log-append  /var/log/openvpn\_road.log
verb 6 
mute 20

tun-mtu 1500
auth SHA1
keysize 128
cipher BF-CBC

0 votes

En FORWARD et POSTROUTING Les règles essaient de changer eth0 en eth1. De plus, je pense que vous n'avez pas besoin de la deuxième règle FORWARD (tun+, RELATED,ESTABLISHED) que celle qui la précède correspond à chaque fois.

2voto

von Stack Points 81

Vous devez configurer le routage, vos règles semblent correctes mais vous devez modifier la règle MASQ.

iptables -t nat -A POSTROUTING -s 10.18.14.0/24 -o eth1 -j MASQUERADE

Je suggérerais également des règles plus simples pour vos paquets d'origine.

# Allows packets from connections initiated by the box or already established
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

Maintenant, en ce qui concerne le routage, je suppose que vous voulez seulement que les clients OpenVPN sortent via eth1 et non le serveur lui-même qui, je suppose, a sa route par défaut via eth0. Nous devons créer une nouvelle table de routage pour vos clients OpenVPN, nous l'appellerons ovpn-inet.

Editar /etc/iproute2/rt_tables insérez le texte suivant à la fin et enregistrez.

1 ovpn-inet

Ensuite, créez /etc/sysconfig/network-scripts/route-eth1 avec le contenu suivant, en remplaçant <gw on eth1> et d'autres attributs dans <> .

default via <gw for eth1> dev eth1 table ovpn-inet
<local network on eth1> dev eth1 src <eth1 ip adress> table ovpn-inet

Créez maintenant /etc/sysconfig/network-scripts/rule-eth1

from <ip address of eth1>/32 table ovpn-inet
from 10.18.14.0/24 table ovpn-inet
to <ip address of eth1>/32 table ovpn-inet

Une suggestion serait également de passer OpenVPN en UDP pour des raisons de performances. Cela vous permettra également d'exécuter un serveur HTTPS si vous en avez besoin sur TCP. Pensez également à utiliser un tls-crypt dans la configuration de votre serveur OpenVPN comme un moyen simple de faire un peu de durcissement sur votre installation.

proto udp4

Redémarrez maintenant votre réseau pour que les changements soient effectifs.

/etc/init.d/network restart

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