def resources_acquire(self): if self.resource_lock: raise TypeError('Server resource lock already set') self.resource_lock = _resource_locks[self.server.id] self.resource_lock.acquire() self.interface = utils.interface_acquire( 'tap' if self.server.network_mode == BRIDGE else 'tun') if self.server.network_mode == BRIDGE: self.bridge_interface = utils.interface_acquire('br')
def resources_acquire(self): if self.interface: raise TypeError('Server resource already acquired') _instances_lock.acquire() try: instance = _instances.get(self.server.id) if instance: logger.warning( 'Stopping duplicate instance', 'server', server_id=self.server.id, instance_id=instance.id, ) try: instance.stop_process() except: logger.exception( 'Failed to stop duplicate instance', 'server', server_id=self.server.id, instance_id=instance.id, ) time.sleep(5) _instances[self.server.id] = self finally: _instances_lock.release() self.interface = utils.interface_acquire(self.server.adapter_type)
def generate_client_conf(self): if not os.path.exists(self._temp_path): os.makedirs(self._temp_path) ovpn_conf_path = os.path.join(self._temp_path, OVPN_CONF_NAME) self.interface = utils.interface_acquire( self.linked_server.adapter_type) remotes = self.linked_server.get_key_remotes(True) client_conf = OVPN_INLINE_LINK_CONF % ( uuid.uuid4().hex, utils.random_name(), self.interface, self.linked_server.adapter_type, self.linked_server.protocol, remotes, CIPHERS[self.linked_server.cipher], HASHES[self.linked_server.hash], 4 if self.server.debug else 1, 8 if self.server.debug else 3, self.linked_server.ping_interval, self.linked_server.ping_timeout, ) if self.linked_server.lzo_compression != ADAPTIVE: client_conf += 'comp-lzo no\n' if self.server.debug: self.server.output_link.push_message( 'Server conf:', label=self.output_label, link_server_id=self.linked_server.id, ) for conf_line in client_conf.split('\n'): if conf_line: self.server.output_link.push_message( ' ' + conf_line, label=self.output_label, link_server_id=self.linked_server.id, ) client_conf += JUMBO_FRAMES[self.linked_server.jumbo_frames] client_conf += '<ca>\n%s\n</ca>\n' % self.linked_server.ca_certificate if self.linked_server.tls_auth: client_conf += 'key-direction 1\n<tls-auth>\n%s\n</tls-auth>\n' % ( self.linked_server.tls_auth_key) client_conf += ('<cert>\n%s\n' + '</cert>\n') % utils.get_cert_block(self.user.certificate) client_conf += '<key>\n%s\n</key>\n' % ( self.user.private_key.strip()) with open(ovpn_conf_path, 'w') as ovpn_conf: os.chmod(ovpn_conf_path, 0600) ovpn_conf.write(client_conf) return ovpn_conf_path
def generate_client_conf(self): if not os.path.exists(self._temp_path): os.makedirs(self._temp_path) ovpn_conf_path = os.path.join(self._temp_path, OVPN_CONF_NAME) self.interface = utils.interface_acquire( self.linked_server.adapter_type) remotes = self.linked_server.get_key_remotes(True) client_conf = OVPN_INLINE_LINK_CONF % ( uuid.uuid4().hex, utils.random_name(), self.interface, self.linked_server.adapter_type, remotes, CIPHERS[self.linked_server.cipher], HASHES[self.linked_server.hash], 4 if self.server.debug else 1, 8 if self.server.debug else 3, settings.app.host_ping, settings.app.host_ping_ttl, settings.vpn.server_poll_timeout, ) if self.linked_server.lzo_compression != ADAPTIVE: client_conf += 'comp-lzo no\n' if self.server.debug: self.server.output_link.push_message( 'Server conf:', label=self.output_label, link_server_id=self.linked_server.id, ) for conf_line in client_conf.split('\n'): if conf_line: self.server.output_link.push_message( ' ' + conf_line, label=self.output_label, link_server_id=self.linked_server.id, ) client_conf += JUMBO_FRAMES[self.linked_server.jumbo_frames] client_conf += '<ca>\n%s\n</ca>\n' % self.linked_server.ca_certificate if self.linked_server.tls_auth: client_conf += 'key-direction 1\n<tls-auth>\n%s\n</tls-auth>\n' % ( self.linked_server.tls_auth_key) client_conf += ('<cert>\n%s\n' + '</cert>\n') % utils.get_cert_block( self.user.certificate) client_conf += '<key>\n%s\n</key>\n' % (self.user.private_key.strip()) with open(ovpn_conf_path, 'w') as ovpn_conf: os.chmod(ovpn_conf_path, 0o600) ovpn_conf.write(client_conf) return ovpn_conf_path
def resources_acquire(self): if self.resource_lock: raise TypeError('Server resource lock already set') def deadlock(): logger.error( 'Server resource deadlocked, check for mismatching datetime', 'server', server_id=self.server.id, instance_id=self.id, ) timer = threading.Timer(15, deadlock) timer.start() self.resource_lock = _resource_locks[self.server.id] self.resource_lock.acquire() self.interface = utils.interface_acquire(self.server.adapter_type) timer.cancel()
def resources_acquire(self): if self.resource_lock: raise TypeError('Server resource lock already set') self.resource_lock = _resource_locks[self.server.id] self.resource_lock.acquire() self.interface = utils.interface_acquire(self.server.adapter_type)