Le problème suivant n'est qu'un morceau de la solution la plus importante avec laquelle j'ai un problème. Tous les autres éléments semblent fonctionner jusqu'à présent, je vais donc essayer de décrire une toute petite pièce avec laquelle j'ai un problème.
J'ai une machine Linux, avec tun0 (interface de tunneling) et eth0 (qui est ma passerelle par défaut vers Internet).
Objectif: mon objectif est de recevoir les paquets entrants de tun0 et de les transmettre à la passerelle par défaut. Donc, en fait, un cas NAT assez simple, où je veux "partager" Internet avec tun0 qui simule une interface physique.
Tun a été créé en utilisant
sudo openvpn --mktun --dev tun0 --user USER
sudo ip addr add 10.2.0.1/24 dev tun0
sudo ip link set tun0 up
Je l'ai donc opérationnel, je peux le cingler, etc. En outre, j'ai une application C ++, qui s'attache à ce périphérique TUN, peut lire et écrire dessus. (fti: voici un tutoriel que j'ai suivi: http://backreference.org/2010/03/26/tuntap-interface-tutorial/ )
J'ai vidé une requête ICMP (ping) correcte faite à 8.8.8.8 dans le tableau d'octets en C ++. Maintenant, en utilisant mon programme, je l'écris sur le périphérique tun0. La demande ICMP a
- source (10.2.0.10) - pour que le noyau connaisse la route de retour (le même sous-réseau)
- destination (8.8.8.8) - DNS de Google
- somme de contrôle correcte, etc. (dans Wireshark / TShark, il apparaît correctement sur tun0)
Ensuite, j'ai les itinéraires suivants:
iptables -F # flush
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface tun0 -j ACCEPT
Et ici, je suis coincé :( Le paquet n'est pas transmis au gw par défaut (tshark le voit uniquement sur tun0 tel qu'il est reçu, ce qui, je suppose, est correct)
Qu'est-ce qui manque? Peut-être une autre approche (mais cela doit être fait en utilisant un périphérique tun et je dois pouvoir le r / w). Information additionnelle:
- le transfert est activé (/ proc / sys / net / ipv4 / ip_forward)
- 8.8.8.8 est accessible via eth0 (depuis le local)
- la passerelle par défaut est correcte (du FAI via eth0)
- j'ai essayé de désactiver rp_tables (echo 0> / proc / sys / net / ipv4 / conf / eth5 / rp_filter)
- et plein d'autres...
Merci d'avance pour tout indice!
Réponses:
Une solution alternative consisterait à utiliser
bridge
.Par conséquent, vous pouvez relier votre tun0 à eth0 et il n'est pas nécessaire de définir nat ou ip sur tun0.Commandes de configuration d'un pont:
www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/set-up-the-bridge
la source
J'ai récemment rencontré ce problème (en suivant la même mention d'article dans la question) et après avoir bidouillé un peu, j'ai trouvé que la commande suivante permettait le transfert local des paquets pour le périphérique tun.
Je sais que c'est très tard, je poste juste ici pour que toute personne confrontée au même problème puisse avoir une sorte d'aide.
la source