diff --git a/xos/core/admin.py b/xos/core/admin.py
index b66f5a6..5a00cf7 100644
--- a/xos/core/admin.py
+++ b/xos/core/admin.py
@@ -264,9 +264,6 @@
     def backend_status_text(self, obj):
         return mark_safe(backend_text(obj))
 
-    def script_link(self, obj):
-        return mark_safe('<a href="/static/vpn/%s" target="_blank">Script link</a>' % obj.script)
-
     def backend_status_icon(self, obj):
         return mark_safe(backend_icon(obj))
     backend_status_icon.short_description = ""
diff --git a/xos/services/vpn/admin.py b/xos/services/vpn/admin.py
index 8691a24..26c793d 100644
--- a/xos/services/vpn/admin.py
+++ b/xos/services/vpn/admin.py
@@ -125,9 +125,9 @@
     fieldsets = [(None, {'fields': ['backend_status_text', 'kind',
                                     'provider_service', 'instance', 'creator',
                                     'server_network', 'vpn_subnet', 'is_persistent',
-                                    'clients_can_see_each_other', 'script_link'],
+                                    'clients_can_see_each_other'],
                          'classes': ['suit-tab suit-tab-general']})]
-    readonly_fields = ('backend_status_text', 'instance', 'script_link')
+    readonly_fields = ('backend_status_text', 'instance')
     form = VPNTenantForm
 
     suit_form_tabs = (('general', 'Details'),)
diff --git a/xos/services/vpn/models.py b/xos/services/vpn/models.py
index 33a4b3a..1a81b5a 100644
--- a/xos/services/vpn/models.py
+++ b/xos/services/vpn/models.py
@@ -1,3 +1,5 @@
+import time
+
 from core.models import Service, TenantWithContainer
 from django.db import transaction
 
@@ -121,15 +123,6 @@
         self.set_attribute("clients_can_see_each_other", value)
 
     @property
-    def script(self):
-        """string: The file name of the client script"""
-        return self.get_attribute("script", self.default_attributes['script'])
-
-    @script.setter
-    def script(self, value):
-        self.set_attribute("script", value)
-
-    @property
     def ca_crt(self):
         """str: the string for the ca certificate"""
         return self.get_attribute("ca_crt", self.default_attributes['ca_crt'])
@@ -147,6 +140,60 @@
     def port_number(self, value):
         self.set_attribute("port", value)
 
+    @property
+    def script(self):
+        """string: the location of the client script that is generated when
+           this method is called.
+        """
+        script_name = time.time() + ".vpn"
+        create_client_script(script_name)
+        return script_name
+
+    def create_client_script(self, script_name):
+        script = open("/opt/xos/core/static/vpn/" + script_name, 'w')
+        # write the configuration portion
+        script.write("printf \"%b\" \"")
+        for line in self.generate_client_conf().splitlines():
+            script.write(line + r"\n")
+        script.write("\" > client.conf\n")
+        script.write("printf \"%b\" \"")
+        for line in self.generate_login().splitlines():
+            script.write(line + r"\n")
+        script.write("\" > login.up\n")
+        script.write("printf \"%b\" \"")
+        for line in self.ca_crt:
+            script.write(line.rstrip() + r"\n")
+        script.write("\" > ca.crt\n")
+        # make sure openvpn is installed
+        script.write("apt-get update\n")
+        script.write("apt-get install openvpn\n")
+        script.write("openvpn client.conf &\n")
+        # close the script
+        script.close()
+
+    def generate_login(self):
+        return str(time.time()) + "\npassword\n"
+
+    def generate_client_conf(self):
+        """str: Generates the client configuration to use to connect to this VPN server.
+        """
+        conf = ("client\n" +
+            "auth-user-pass login.up\n" +
+            "dev tun\n" +
+            "proto udp\n" +
+            "remote " + str(self.nat_ip) + " " + str(self.port_number) + "\n" +
+            "resolv-retry infinite\n" +
+            "nobind\n" +
+            "ca ca.crt\n" +
+            "comp-lzo\n" +
+            "verb 3\n")
+
+        if self.is_persistent:
+            conf += "persist-tun\n"
+            conf += "persist-key\n"
+
+        return conf
+
 
 
 def model_policy_vpn_tenant(pk):
