1 votes

Transfert via NAT à l'aide d'un VPN avec libvirt

J'ai installé un serveur avec libvirt et j'ai créé une VM de test. Lorsque j'utilise le réseau par défaut pour son interface, elle obtient une IP privée et le NAT semble fonctionner correctement. J'ai installé OpenVPN, donc j'ai une interface tun0 que je veux NATer sur cette VM maintenant (tun0 a une IP privée sur 172.16.0.0, je n'ai aucun contrôle sur le serveur VPN et je n'ai aucun moyen d'obtenir plus d'IPs privées là-bas). J'ai créé le réseau en utilisant les mêmes paramètres que le réseau par défaut, mais en utilisant 10.99.0.0 pour le DHCP (pourquoi pas), mais lorsque j'essaie de pinguer quelque chose sur Internet depuis la VM, j'obtiens un icmp-port-unreachable.

Voici la chaîne forward dans iptables :

0     0 ACCEPT     all  --  tun0   vpn0    0.0.0.0/0            10.99.0.0/16         ctstate RELATED,ESTABLISHED
0     0 ACCEPT     all  --  vpn0   tun0    10.99.0.0/16         0.0.0.0/0           
0     0 ACCEPT     all  --  vpn0   vpn0    0.0.0.0/0            0.0.0.0/0           
0     0 REJECT     all  --  *      vpn0    0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
15 1244 REJECT     all  --  vpn0   *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
0     0 ACCEPT     all  --  eno1   virbr0  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
0     0 ACCEPT     all  --  virbr0 eno1    192.168.122.0/24     0.0.0.0/0           
0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Comme vous pouvez le voir, eno1 est l'interface menant à Internet que le réseau par défaut utilise via virbr0, et tun0 est l'interface VPN utilisée via l'interface vpn0 (c'est ainsi que je l'ai nommée dans la configuration de libvirt). En regardant les numéros, la 5ème règle est celle qui correspond, pour une raison quelconque.

Est-ce possible que libvirt n'utilise pas correctement l'interface tun0 mais au lieu de cela, pour une raison quelconque, essaie de faire du NAT à travers eno1 ?

Voici sa configuration :

  vpn
  2a641009-63db-a0d9-dac2-6204748786db

Je ne vois aucune différence avec le réseau par défaut, sauf que le réseau par défaut fonctionne.

Merci pour l'aide

0voto

DanielB Points 1435

Lorsque libvirt met en place NAT, il ne force pas le trafic à passer par une carte NIC physique spécifique. Les règles de routage de l'hôte contrôlent la direction dans laquelle le trafic NAT va s'écouler. Autrement dit, si vous utilisez le réseau virtuel libvirt par défaut, le trafic devrait pouvoir passer soit par votre carte NIC par défaut eno1 ou par le VPN via tun0, en fonction de l'adresse IP cible à laquelle le client essaie de se connecter. Lorsque vous ajoutez une règle dans votre configuration, cela indique simplement à libvirt de bloquer le trafic vers toute carte NIC sauf tun0. Autrement dit, en supposant que la configuration par défaut originale pour virbr0 n'avait pas de réglage '', alors cela aurait dû "juste fonctionné" avec votre VPN. Vos règles iptables listées montrent 'eno1', ce qui suggère que vous aviez une règle présente - vous pourriez simplement supprimer cette règle

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