VPN: Difference between revisions

From Grid5000
Jump to navigation Jump to search
(minor edits because some of the dialog boxes have changed)
 
(54 intermediate revisions by 7 users not shown)
Line 1: Line 1:
= Présentation CT =
{{Portal|User}}
== Principe ==
{{Portal|Tutorial}}
{{TutorialHeader}}
Grid'5000 Virtual Private Network (VPN) allows to connect your workstation or personal computer to Grid'5000 network, while preserving security.


* Connecter des hôtes/réseaux distants "comme si" ils appartiennent au même réseau local
When connected to Grid'5000 VPN, your computer will be "inside" the Grid'5000 network, thus it won't be required to perform several SSH hops or tunnels to access Grid'5000 nodes, since direct connections are possible.
* Chiffrer / Authentifier tout ce qui passe sur les réseaux publiques
* Intêret pour G5K
** S'affranchir de la passerelle SSH
** Accès au monde extérieur (à un serveur, à un réseau)


== Implémentation ==
Grid'5000 VPN is based on [http://openvpn.net OpenVPN].


* OpenVPN: Interfaces virtuelles, Linux, portage Windows, SSL, flexible
{{Warning|text=There is no performance guarantee on the VPN infrastructure. It's fine to use the VPN to access and configure your nodes, but avoid running performance-sensitive experiments over the VPN: the results would be unreliable and not reproducible. If you need to access your nodes directly from the Internet, we provide a [[Reconfigurable_Firewall|reconfigurable IPv6 firewall]] service.}}
* L2 VPN:
** Encapsulation de la trame Ethernet (L2) ou paquet IP (L3)
** Fonctionnement des applications non-IP
* Réseau VPN VLAN dédié
** meilleur isolation, pas le VLAN de production
** besoin de configuration des routeurs G5K {{Yes}}
* Encapsulation dans
** UDP {{Yes}}
** TCP fallback {{Yes}}


== Configuration client ==
== Getting started ==
 
* addresse IP dans réseau VPN {{Yes}}
* persistence:
** Par nom de certificat / login {{Yes}}
** DNS name:
*** vpn1.grid5000.fr, vpn2.grid5000.fr {{No}}
***  <login>.vpn.grid5000.fr ? {{Inprogress}} : Besoin de DNS dynamique
* routes G5K (Golden rules !)
** 172.16.0.0/16 {{Yes}}
** 10.0.0.0/8 ? {{Yes}}
* Configuratiuon DNS G5K du client
** Linux CLI: {{Yes}}
** Linux Network Manager: {{Yes}} (pas DOMAIN)
** Windows: {{No}}
** OSX: {{No}}
* Authentification Client
** Génération certificat Client à la demande {{Yes}}
** Révocation et regénération des certificats {{Inprogress}}
 
== Securité ==
 
* Serveur : Idem access nationale {{Yes}}
** Interfaces:
*** interface DMZ Publique (pour connexion client VPN depuis Internet)
*** interface DMZ Privée (pour administration G5K)
*** interface VLAN VPN, sans adresse IP (pour acheminement sur VLAN VPN)
** Utilisation des classes puppet DMZ
*** fail2ban {{No}}
 
= L2 Ethernet Networks =
 
Some additional VLAN is needed :
* <code class='host'>VPN</code> : Hosts connected to Grid5000 using VPN access use a dedicated VLAN implemented in sophia site. {{Yes}}
 
== Vlan number ==
{|class="karafon"
! VLAN number        !! Usage                        !! Name                   
|-
| 600    || <code class="host">VPN network</code> || <code class="host">VPN</code>
|}
 
= L3 IP Networks =
 
== Routing policy ==
The following table gives detail about the routing policy of each L2 VLAN :
{|
|- style="background-color: #cccccc; border:1px solid #c9c9c9;"
! Network  !! Routed locally !! Routed globally                   
|-
| VPN network || {{Yes}} || {{Yes}}
|}
 
== Addressing plan ==
=== About VPN ===
{|
|- style="background-color: #cccccc; border:1px solid #c9c9c9;"
! Site        !! VPN
|-
| Sophia    || <code class="host">172.20.0.0/16</code>
|}
 
= Configuration =
 
== DomU ==
 
=== Network interfaces configuration ===
{{Managed by Puppet|classes=networkg5k|note=}}
 
=== Iptables configuration ===
{{Managed by Puppet|classes=iptablesg5k|note=}}
 
=== OpenVPN configuration ===
{{Managed by Puppet|classes=openvpn,openvpng5k|note=}}
 
=== OpenVPN SSL Certificates management ===
{{Managed by Puppet|classes=openvpng5k::sll|note=Deployed on ums.grid5000.fr}}
 
== Dom0 ==
{{Managed by Puppet|classes=networkg5k|note=}}
 
== Network Equipment ==


=== On equipment hosting VPN {{Yes}}===
To start using Grid'5000 VPN, you first need to get a certificate:


vlan 600 name VPN by port
* Go to your [https://api.grid5000.fr/ui/account account management page], in the "My account" tab and go to "VPN Certificates" on the left.
  tagged 7/19
* If you do not have a certificate yet, click on "Create new certificate".
  router-interface ve 60
** To generate a new certificate click on "Create with Passphrase" (recommended).
** If you already generated a certificate by yourself, click on "Create from public key", paste your public key in the text field and finally "Sign".
* Your certificate appears in the list. Click on "Zip file" to download an archive which includes the certificates and an OpenVPN configuration file.
* Extract the archive content in your workstation. Please choose a secure place to store those files: an attacker could use them to steal your identity in Grid'5000.


interface ve 60
== Configure your VPN connection ==
  port-name VPN
The Grid'5000 VPN settings are the following:
  ip address 172.20.255.254 255.255.0.0
* '''Gateway:''' vpn.grid5000.fr
* '''Gateway port:''' UDP 1194 or TCP 443
* '''Device type:''' tun (Layer 3 VPN)
* '''Authentication type:''' Certificate (TLS)
* '''CA certificate:''' cavpn.crt
* '''User certificate:''' <username>.crt
* '''User private key:''' <username>.key
* '''Additional TLS authentication file:''' ta.key (no direction)
* '''Grid'5000 VPN routes:''' 172.16.0.0/16, 10.0.0.0/8 and 172.20.0.0/16 (use Grid'5000 VPN for these networks only)
* '''Grid'5000 VPN DNS:''' 172.20.255.254


=== On other sites' routers {{Yes}} ===
Depending on your operation system or work environement, the configuration and start of the Grid'5000 VPN varies. See below.


  ip route 172.20.0.0 255.255.0.0 192.168.4.12
=== Linux (using network-manager) ===
You can connect to the Grid'5000 VPN using "Network Manager", for instance using the Network manager applet in the status bar of a gnome graphical environment (you may require to install a package such as "network-manager-openvpn-gnome").


= VPN User Documentation {{ Inprogress }} =
To configure the Grid'5000 VPN in Network Manager, go the the "Network Settings" application, add a Network Connection and select "VPN". Choose "OpenVPN" and set the following parameters:
* '''Name:''' as you wish, e.g. ''Grid'5000''
* '''Gateway:''' choose ''vpn.grid5000.fr''
* '''Type:''' choose ''Certificates (TLS)''
* '''User Certificate:''' use your ''<username>.crt'' file
* '''CA Certificate:''' your ''cavpn.crt'' file
* '''Private Key:''' use your ''<username>.key'' file
* '''Private Key Password:''' enter the password needed to unlock your private key


Grid'5000 Virtual Private Network (VPN) allows to connect to Grid'5000 network from your personal computer, while preserving security by encrypting your communications.  
Then, click on the '''Advanced''' button:
* Select '''Configure type of network device''' (also called '''Set virtual device type''') to use '''TUN'''.
* If you prefer to use TCP (recommended if your network is filtered, and UDP does not work), select ''Use TCP'' and under ''Use a specific port'' (also called ''Use custom gateway port''), choose ''443''.
* In the '''TLS Authentication''' tab, enable '''Use additional TLS authentication''' with mode '''TLS-Auth''' and set the ''ta.key'' file as '''Key File'''.


When connected to Grid'5000 VPN, your computer will be "inside" the Grid'5000 network thus you won't require to perform several SSH hops to access Grid'5000 nodes and frontends.
Finally, go to the '''IPv4''' tab:
* Click the '''Routes...''' button
* Check the '''Use this connection only for resources on its network'''


Grid'5000 VPN is based on OpenVPN http://openvpn.net.
You're done. You can connect to the VPN from Network Manager applet usually present in some corner of your screen. If you need to troubleshoot potential problems, diagnostics can be printed with '''sudo journalctl -fu NetworkManager'''


{{Note|text=Network manager provides an import function which unfortunately does not work well with the configuration we provide in the zip file. Please configure your VPN as described above instead of using that import function.}}


== Getting started ==
=== Linux (using command line) ===
From the directory where you extracted the ZIP archive, you only have to execute this as root:


To start using Grid'5000 VPN, you first need to get a certificate. {{Inprogress}}. You will download a ZIP archive including certificates and configuration file needed for VPN connexion. You must extract the archive content onto your computer. Choose a secure place to store those files, as an attacker could use them to steal your identity in Grid'5000.
{{Term|location=workstation| cmd=<code class="command">sudo openvpn</code> Grid5000_VPN.ovpn}}


Note that the OpenVPN linux client does not support the DNS VPN configuration natively. In most distributions, installing resolvconf package and uncommenting last lines of the ''Grid5000_VPN.ovpn'' file should enable the automatic DNS VPN configuration.


== Launch a connection ==
If you prefer to use TCP (recommended if your network is filtered, and UDP does not work), comment the second line and uncomment the fourth.


The procedure to start a connection to Grid'5000 VPN depends on your Operating System :
There is also a bug in the generated config file, you must change "dev tap" by "dev tun".


* Windows
=== MAC OS X ===
{{No}}
On OS X systems, we recommend downloading and installing [https://tunnelblick.net/ Tunnelblick] as OpenVPN client.


Then, from the folder where you extracted the ZIP archive, double click on the ''Grid5000_VPN.ovpn'' file to install Grid'5000 VPN configuration inside Tunnelblick.


* Linux (using command line)
To connect to the VPN, select Grid5000_VPN from Tunnelblick application (top right on the screen).
From the folder where you extracted the ZIP archive, you only have to execute this as root:
openvpn <username>_vpnclient.conf


Note that OpenVPN linux client does not support DNS VPN configuration natively (see ??). In most distributions, installing resolvconf package and uncommenting last lines of <username>_vpnclient.conf file should enable automatic DNS VPN configuration.
In case of troubles, check the connection logs inside "VPN details, Grid5000 VPN, Messages"


=== Windows ===
If you have not done it yet, [https://openvpn.net/index.php/open-source/downloads.html download and install OpenVPN for Windows] (default installation options should be fine).


* Linux (using network-manager)
Extract the zip file into C:/Users/<your_user>/OpenVPN/config/ and import file "Grid5000_VPN.ovpn" from OpenVPN GUI.
You can also connect to Grid'5000 as normal user using the "Network Manager" applet (you may require to install packages like "network-manager-openvpn-gnome").


Refer to [[Grid'5000 VPN parameters]] to know how to configure it.
* Common errors on Windows :
** The users can't import files into OpenVPN GUI if the directory permissions has changed.
** The last Grid5000_VPN.ovpn lines need to be commented for Windows configuration.
* If the program stays frozen with a message such as <code>... UDPv4 link remote: [AF_INET]194.254.60.14:1194</code>, this means that your local network is probably blocking the UDP conenction to the VPN.
** You need to edit the ''Grid_5000_VPN'' file (with notepad++ or any editor that knows how to handle UNIX text file, the file should show multiple line, not just one).
** Comment the second line (add a #) and uncomment the fourth (remove the #) to switch the connection to TCP instead of UDP.


<syntaxhighlight lang="bash" line="line" highlight="2,4">
client
#remote vpn.grid5000.fr 1194 udp
# In case of problem with UDP connexion, you can use TCP.
remote vpn.grid5000.fr 443 tcp
dev tun


* MAC OS
ca cavpn.crt
{{No}}
cert sdelamare.crt
key sdelamare.key
tls-auth ta.key


# On Linux systems, you can uncomment following lines to automatically use Grid'5000 DNS (openresolv package needed)
#script-security 2
#up /etc/openvpn/update-resolv-conf
#down /etc/openvpn/update-resolv-conf
</syntaxhighlight>


== Testing your connection ==
== Testing your connection ==


When your VPN connexion is established, you will be able to connect directly to any Grid'5000 node or frontend. Try it with:
When your VPN connexion is established, you should be able to connect directly to any Grid'5000 frontend. Make a try with:
ssh <username>@frontend.lyon.grid5000.fr
{{Term|location=workstation| cmd=<code class="command">ssh</code> <code class="replace"><your Grid'5000 username></code>@frontend.lyon.grid5000.fr}}
 
 
== Grid'5000 VPN parameters ==
 
* Gateway: vpn.grid5000.fr
* Gateway port: 1194 UDP
* Device type: tap (Ethernet Bridging / Layer 2 VPN)
* Authentication type: Certificate (TLS)
* User certificate: <username>.crt
* CA certificate: cavpn.crt
* User private key: <username>.key
* Additional TLS authentication file: ta.key (no direction)
* Grid'5000 VPN routes: 172.20.0.0/20 and 10.0.0.0/8 (use Grid'5000 VPN for these networks only)
* Grid'5000 VPN DNS: 172.16.143.101
 
 
Here is an example configuration file :
client
remote vpn.grid5000.fr 1194
remote vpn.grid5000.fr 443 tcp
proto udp
dev tap
ca cavpn.crt
cert sdelamare.crt
key sdelamare.key
tls-auth ta.key
# On Linux systems, you can uncomment following lines to automatically use Grid'5000 DNS (resolvconf binary needed)
#script-security 2
#up /etc/openvpn/update-resolv-conf
#down /etc/openvpn/update-resolv-conf

Latest revision as of 17:22, 11 March 2024

Note.png Note

This page is actively maintained by the Grid'5000 team. If you encounter problems, please report them (see the Support page). Additionally, as it is a wiki page, you are free to make minor corrections yourself if needed. If you would like to suggest a more fundamental change, please contact the Grid'5000 team.

Grid'5000 Virtual Private Network (VPN) allows to connect your workstation or personal computer to Grid'5000 network, while preserving security.

When connected to Grid'5000 VPN, your computer will be "inside" the Grid'5000 network, thus it won't be required to perform several SSH hops or tunnels to access Grid'5000 nodes, since direct connections are possible.

Grid'5000 VPN is based on OpenVPN.

Warning.png Warning

There is no performance guarantee on the VPN infrastructure. It's fine to use the VPN to access and configure your nodes, but avoid running performance-sensitive experiments over the VPN: the results would be unreliable and not reproducible. If you need to access your nodes directly from the Internet, we provide a reconfigurable IPv6 firewall service.

Getting started

To start using Grid'5000 VPN, you first need to get a certificate:

  • Go to your account management page, in the "My account" tab and go to "VPN Certificates" on the left.
  • If you do not have a certificate yet, click on "Create new certificate".
    • To generate a new certificate click on "Create with Passphrase" (recommended).
    • If you already generated a certificate by yourself, click on "Create from public key", paste your public key in the text field and finally "Sign".
  • Your certificate appears in the list. Click on "Zip file" to download an archive which includes the certificates and an OpenVPN configuration file.
  • Extract the archive content in your workstation. Please choose a secure place to store those files: an attacker could use them to steal your identity in Grid'5000.

Configure your VPN connection

The Grid'5000 VPN settings are the following:

  • Gateway: vpn.grid5000.fr
  • Gateway port: UDP 1194 or TCP 443
  • Device type: tun (Layer 3 VPN)
  • Authentication type: Certificate (TLS)
  • CA certificate: cavpn.crt
  • User certificate: <username>.crt
  • User private key: <username>.key
  • Additional TLS authentication file: ta.key (no direction)
  • Grid'5000 VPN routes: 172.16.0.0/16, 10.0.0.0/8 and 172.20.0.0/16 (use Grid'5000 VPN for these networks only)
  • Grid'5000 VPN DNS: 172.20.255.254

Depending on your operation system or work environement, the configuration and start of the Grid'5000 VPN varies. See below.

Linux (using network-manager)

You can connect to the Grid'5000 VPN using "Network Manager", for instance using the Network manager applet in the status bar of a gnome graphical environment (you may require to install a package such as "network-manager-openvpn-gnome").

To configure the Grid'5000 VPN in Network Manager, go the the "Network Settings" application, add a Network Connection and select "VPN". Choose "OpenVPN" and set the following parameters:

  • Name: as you wish, e.g. Grid'5000
  • Gateway: choose vpn.grid5000.fr
  • Type: choose Certificates (TLS)
  • User Certificate: use your <username>.crt file
  • CA Certificate: your cavpn.crt file
  • Private Key: use your <username>.key file
  • Private Key Password: enter the password needed to unlock your private key

Then, click on the Advanced button:

  • Select Configure type of network device (also called Set virtual device type) to use TUN.
  • If you prefer to use TCP (recommended if your network is filtered, and UDP does not work), select Use TCP and under Use a specific port (also called Use custom gateway port), choose 443.
  • In the TLS Authentication tab, enable Use additional TLS authentication with mode TLS-Auth and set the ta.key file as Key File.

Finally, go to the IPv4 tab:

  • Click the Routes... button
  • Check the Use this connection only for resources on its network

You're done. You can connect to the VPN from Network Manager applet usually present in some corner of your screen. If you need to troubleshoot potential problems, diagnostics can be printed with sudo journalctl -fu NetworkManager

Note.png Note

Network manager provides an import function which unfortunately does not work well with the configuration we provide in the zip file. Please configure your VPN as described above instead of using that import function.

Linux (using command line)

From the directory where you extracted the ZIP archive, you only have to execute this as root:

Terminal.png workstation:
sudo openvpn Grid5000_VPN.ovpn

Note that the OpenVPN linux client does not support the DNS VPN configuration natively. In most distributions, installing resolvconf package and uncommenting last lines of the Grid5000_VPN.ovpn file should enable the automatic DNS VPN configuration.

If you prefer to use TCP (recommended if your network is filtered, and UDP does not work), comment the second line and uncomment the fourth.

There is also a bug in the generated config file, you must change "dev tap" by "dev tun".

MAC OS X

On OS X systems, we recommend downloading and installing Tunnelblick as OpenVPN client.

Then, from the folder where you extracted the ZIP archive, double click on the Grid5000_VPN.ovpn file to install Grid'5000 VPN configuration inside Tunnelblick.

To connect to the VPN, select Grid5000_VPN from Tunnelblick application (top right on the screen).

In case of troubles, check the connection logs inside "VPN details, Grid5000 VPN, Messages"

Windows

If you have not done it yet, download and install OpenVPN for Windows (default installation options should be fine).

Extract the zip file into C:/Users/<your_user>/OpenVPN/config/ and import file "Grid5000_VPN.ovpn" from OpenVPN GUI.

  • Common errors on Windows :
    • The users can't import files into OpenVPN GUI if the directory permissions has changed.
    • The last Grid5000_VPN.ovpn lines need to be commented for Windows configuration.
  • If the program stays frozen with a message such as ... UDPv4 link remote: [AF_INET]194.254.60.14:1194, this means that your local network is probably blocking the UDP conenction to the VPN.
    • You need to edit the Grid_5000_VPN file (with notepad++ or any editor that knows how to handle UNIX text file, the file should show multiple line, not just one).
    • Comment the second line (add a #) and uncomment the fourth (remove the #) to switch the connection to TCP instead of UDP.
client
#remote vpn.grid5000.fr 1194 udp
# In case of problem with UDP connexion, you can use TCP.
remote vpn.grid5000.fr 443 tcp
dev tun

ca cavpn.crt
cert sdelamare.crt
key sdelamare.key
tls-auth ta.key

# On Linux systems, you can uncomment following lines to automatically use Grid'5000 DNS (openresolv package needed)
#script-security 2
#up /etc/openvpn/update-resolv-conf
#down /etc/openvpn/update-resolv-conf

Testing your connection

When your VPN connexion is established, you should be able to connect directly to any Grid'5000 frontend. Make a try with:

Terminal.png workstation:
ssh <your Grid'5000 username>@frontend.lyon.grid5000.fr