8
votes

Vouloir mettre en œuvre un VPN pour une seule application

Je cherche Ajouter un soutien à un VPN pour mon logiciel,

J'ai connu PPTP et OpenVPN, les deux constituent une liaison à l'échelle du système, installant un pilote de robinet afin que toutes les applications achètent leur trafic à ce moment-là.

Comment pourrais-je mettre en œuvre un support VPN pour juste ma candidature? Il y a une bibliothèque, un exemple, un indice ou un moyen de le faire?

Mon logiciel est réellement effectué en C ++ / MFC. En utilisant le casyncsocket standard.


2 commentaires

Pourquoi n'utilisez-vous pas simplement SSL / TLS si ce n'est qu'à une seule application?


Ne pouvait pas être SSL parce que j'ai besoin de ports en avant. Le VPN sera utilisé pour l'anonymisation d'un logiciel P2P.


3 Réponses :


13
votes

Forwading Les connexions des à votre application sont relativement faciles:

  • Stunnel vous permet de transférer le trafic sur des ports spécifiques via un tunnel SSL. Cela nécessite que vous l'exécutions aux deux extrémités, cependant.

  • la plus décente clients SSH , tels que openssh ou Puty Support également le transfert de port, avec l'avantage supplémentaire que tout serveur SSH distant peut généralement agir comme l'autre extrémité du tunnel sans aucune modification.

  • Vous pouvez également utiliser OpenVPN et d'autres solutions VPN, mais cela nécessite des règles de transfert spécifiques à ajouter au serveur distant.

    Transfert Les connexions suivantes sont plus difficiles sans modifier votre application. La bonne façon de le faire est d'implémenter le Socks protocole, de préférence socks5 . Vous pouvez également utiliser une application externe, telle que freecap , pour rediriger les connexions de votre application.

    Après cela, vous pouvez transférer vos connexions à n'importe quel serveur SOCKS. La plupart des clients SSH, par exemple, vous permettent de Utilisez le protocole de chaussettes pour acheminer les connexions sortantes via le serveur distant.

    Comme Sidenote, les serveurs OpenVPN ne deviennent pas nécessairement la passerelle par défaut pour tout votre trafic. Certains poussent une telle entrée de table de route aux clients, mais cela peut être changé. Dans ma propre configuration OpenVPN, je n'utilise que le VPN pour accéder au réseau privé et ne pas tout raccourcir tout.

    Si vous pouvez forcer votre application à lier toutes les sockets sortants à un ou plusieurs ports spécifiques , vous pouvez utiliser des règles de filtrage IP sur votre système pour acheminer toutes les connexions de ces ports via le VPN.

    EDIT:

    tunneling Les paquets UDP sont un peu plus difficiles. En règle générale, vous avez besoin d'un processus de proxy sur le serveur distant et le client local qui permet de canaliser des connexions entrantes et sortantes via une connexion TCP persistante.

    Votre meilleur choix serait une implémentation complète du client SOCKS5 dans votre application, y compris la commande UDP-Associate des paquets UDP. Ensuite, vous devrez trouver un proxy Socks5 qui prend en charge le tunneling.

    J'ai occasionnellement utilisé délégué qui semble être le couteau de poche suisse de proxies. Pour autant que je sache, il prend en charge la commande UDP-Associate dans sa mise en œuvre SOCKS5 et prend également en charge la connexion de deux processus de délégués via une connexion TCP. Il est également disponible pour Linux et Windows. Je ne me souviens pas si cela peut également crypter cette connexion TCP, mais vous pourriez toujours tunnel que l'un à travers Stunnel ou SSH si vous en avez besoin.

    Si vous avez des droits d'administrateur système sur un serveur VPN distant, vous pouvez probablement avoir une configuration plus simple:

    • Demandez à votre application P2P LIENNEZ-VOUS SOIR LES SOCKETS UDP sortantes à l'interface VPN client. Vous avez beaucoup besoin de configurer un itinéraire par défaut secondaire pour cette interface. De cette façon, les paquets sortants de votre application passeront via le serveur distant.

    • Demandez au serveur distant vers l'avant versant des paquets UDP entrants vers des ports spécifiques via la connexion VPN à vous.

      Cela devrait être une configuration plus simple, bien que si vous vous souciez vraiment de l'anonymat, vous pourriez être intéressé à vous assurer que votre application P2P ne fuit pas DNS ou d'autres demandes pouvant être suivies.


2 commentaires

Utiliser SSH / Putty est probablement la solution la plus facile. Si le port de port doit être mis en œuvre à tout prix, vous pouvez jeter un coup d'œil sur ce code.


Très bon Anwser, mais c'est un P2P, il utilise des ports TCP et UDP. La prise en charge des chaussettes pour UDP est de manière vive inexistante. Il y a un opcode pour la liaison UDP dans Socks5 mais que personne ne l'implente. Notez également que mon logiciel fonctionne sous Windows. Le serveur pourrait être sous Linux ou Windows.



0
votes

Mettez la connectivité SSH dans votre application ou utilisez SSL. Vous devrez utiliser un protocole / service au lieu de la technologie VPN. Bonne chance!


0 commentaires

-1
votes

Je pense que vous avez simplement besoin de SSL: http://www.openssl.org/

OpenVPN est basé sur SSL - mais c'est un VPN complet.

La question est de savoir de quoi avez-vous besoin? Si vous avez besoin de cryptage (connexion privée d'application) - et non un VPN (réseau privé virtuel), optez pour SSL.

Les notes peuvent être trouvées ici:

Ajout de la prise en charge SSL au code TCP et UDP existant?

http://sctp.fh-muenster.de/dtls-samples.html

http://fixunix.com/openssl/152877-sssl-udp -Traffic.html


0 commentaires