VoIP Zoo — Bereitstellung

Einleitung

Eines Tages genehmigte die Geschäftsführung ein Experiment zur Einführung von IP-Telefonie in unserem Büro. Da meine Erfahrung in diesem Bereich minimal war, weckte die Aufgabe mein großes Interesse, und ich tauchte ein in die verschiedenen Aspekte des Themas. Nach Abschluss meiner Forschungsphase wollte ich das neu gewonnene Wissen teilen – in der Hoffnung, dass es einige nützliche Einblicke bietet. Also…

Rohdaten

Für die IP-TK-Anlage wurde Asterisk ausgewählt und implementiert. Der Telefonpark besteht aus Cisco 7906g, Panasonic UT-KX123B, Grandstream GXP1400 und Dlink DPH-150S(E)/F3, Yealink T19 und T21. Diese Vielfalt entstand, weil wir im Rahmen des Experiments beschlossen haben, verschiedene Modelle auszuprobieren, um eine eigene Meinung über das Verhältnis von Preis, Qualität und Benutzerfreundlichkeit zu bilden.

Ziel

Das Ziel war es, den Prozess der Konfiguration neuer Endgeräte so einfach und einheitlich wie möglich zu gestalten. Alle Telefone sollten zeitlich synchronisiert sein, ein telefonbuch zur Verfügung stellen, das von Server geladen wird, und Zugang zu den Einstellungen für den Administrator bieten.

Die Lösung für diese Aufgabe ist einfach – die automatisierte Konfiguration der Telefone, auch Provisioning genannt, zu realisieren. Tatsächlich wird in diesem Artikel meine Umsetzung dieser großartigen Funktion behandelt.

Konfiguration von tftpd, dhcpd

Für die Bereitstellung von Einstellungen an die Telefone habe ich TFTP als universelle Lösung gewählt, die von allen Plattformen unterstützt wird und einfach einzurichten und zu verwalten ist.

Für TFTP war keine spezifische Konfiguration erforderlich. Ich habe den standardmäßigen TFTPD installiert und alle notwendigen Dateien in dessen Stammverzeichnis abgelegt.
Die Konfigurationsdateien habe ich in Verzeichnissen entsprechend dem Hersteller des Telefons abgelegt. Leider wollte das Gerät von Cisco nicht in seinen eigenen Ordner greifen, also musste ich es im Stammverzeichnis aufbewahren.

Um den Telefonen den Standort des TFTP-Servers anzugeben, habe ich Option 66 verwendet. Zudem habe ich sie nach Herstellern in verschiedene Klassen unterteilt. Jede Klasse erhielt einen eigenen Adressraum und einen individuellen Ordner für die Konfigurationsdateien. Übrigens musste ich die Geräte von D-Link anhand ihrer MAC-Adressen ermitteln, da sie keine Herstellerinformationen in der DHCP-Anfrage bereitstellen.

Ausschnitt aus der dhcpd.conf

# Указываем необходимые опции 
option option-66 code 66 = text;

class "panasonic" {
	match if substring (option vendor-class-identifier,0,9) = "Panasonic";
	option option-66 "10.1.1.50/panasonic/";
}
class "cisco" {
	match if substring (option vendor-class-identifier,0,36) = "Cisco Systems, Inc. IP Phone CP-7906";
	option option-66 "10.1.1.50/cisco/";
}

class "grandstream" {
 match if substring (option vendor-class-identifier,0,11) = "Grandstream";
 option option-66 "10.1.1.50/grandstream/";
}

class "dlink" {
	match if (binary-to-ascii (16,8,":",substring(hardware,1,4)) = "c8:d3:a3:8d") or
	(binary-to-ascii (16,8,":",substring(hardware,1,4)) = "90:94:e4:72");
	option option-66 "10.1.1.50/dlink/";
}

class "yealink" {
                match if substring (option vendor-class-identifier,0,7) = "Yealink";
                option option-66 "10.1.1.50/yealink/";
        }

Die Telefone musste ich gezwungenermaßen aus dem allgemeinen Pool ausschließen. Andernfalls wollten sie nicht in ihren eigenen „Bungalow“ wechseln.
Beispiel für die Einstellungen des Subnetzes

Subnet 10.1.1.0 Netmask 255.255.255.0 {
        Option Routers 10.1.1.1;
        Pool {
                Deny Members of "cisco";
                Deny Members of "panasonic";
                Deny Members of "dlink";
                Range 10.1.1.230 10.1.1.240;
        }
        Pool {
                Allow Members of "cisco";
                Range 10.1.1.65 10.1.1.69;
        }
        Pool {
                Allow Members of "panasonic";
                Range 10.1.1.60 10.1.1.64;
        }
        Pool {
                Allow Members of "dlink";
                Range 10.1.1.55 10.1.1.59;
        }
}

Nach dem Neustart aller betroffenen Dienste haben sich die Telefone уверенно mit den Einstellungen zum vorgesehenen TFTP-Server verbunden. Man musste sie dort nur noch bereitstellen.

Cisco 7906

Diese Geräte habe ich neu in der Originalverpackung erhalten. Ich musste sie umprogrammieren, um sie mit Asterisk kompatibel zu machen. Aber das ist eine andere Geschichte. Im konkreten Fall habe ich gemäß der Anleitung die Datei SEPAABBCCDDEEFF.cnf.xml im Stammverzeichnis des TFTP-Servers erstellt, wobei AABBCCDDEEFF die MAC-Adresse des Geräts ist.

Über die Konfiguration von Cisco-Telefonen wurde bereits häufig geschrieben, daher lasse ich einfach die funktionierende Datei mit den Einstellungen hier.
Einstellungen für Cisco

true
 SIP
 root
 ADMIN_PWD

 
 D-M-Y
 Zentrale Pazifische Standardzeit
     
         
             10.1.1.4
              Unicast
          
     
 

   
 10.1.1.50
 
 2000
 5060
 5061
 
 10.1.1.50
   
 

 Deaktivieren


120
 

 
 true
 x-cisco-serviceuri-cfwdall
 x-cisco-serviceuri-pickup
 x-cisco-serviceuri-opickup
 x-cisco-serviceuri-gpickup
 x-cisco-serviceuri-meetme
 x-cisco-serviceuri-abbrdial
 false
 2
 true
 true
 2
 2
 0
 true
 false
 
 
 6
 10
 180
 3600
 5
 120
 120
 5
 500
 4000
 70
 true
 None
 
1
 false
 true
 false
 false
 none
 101
 3
avt
 3
 false
 false
 Cisco Phone
 2
 false
 15000
10
 true
 false
 16384
 32766

 
 9
 10.1.1.50
 5060
  2 
 3
 false
 3
 
 4
 5
 
 true
 true
 false
 true
 

 Benutzer #103
 103
 103
 SIP_PWD
 
 
$num
5060
 184
 0
 dialplan.xml
 

 *0#
 true
 2
 


 false
 false
 1
 0
 1
 0
 0
 0
 1
 0
 1,7
 09:00
 12:00
 01:00
 1
 2
 10.1.1.50
 0
 100
 50
 
 0
 0
 5
 1
 10.1.1.50
 0
 0
 0
 0
 0
 0
 1
 1
 
1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37

 Deutsch_Deutschland
 de_DE
 
 utf-8
 

 
 
 
 
1
 0
 
 http://10.1.1.50/provisioning/cisco-services.xml
 
 
 
 
 http://10.1.1.50/provisioning/cisco-services.xml
 96
 0
 96
 2
 0
 0
 
 3804
 <!-- 10.1.1.50 -->
  

 false
 1

D-Link DPH-150S/F3

Wenn Sie gerade dabei sind, ein Telefon dieser Serie zu erwerben, beachten Sie bitte, dass die automatische Konfiguration nur bei den Geräten 150S/F3 unterstützt wird. Bei dem mir vorliegenden Gerät 150S/F2 habe ich diese Funktionalität nicht gefunden.

Die Konfigurationsdatei kann sowohl im xml-Format als auch im herkömmlichen Textformat vorliegen. Für xml gibt es eine Anforderung: Der Tag muss am Anfang der Zeile stehen; andernfalls ignoriert der Parser ihn, und der Wert des entsprechenden Parameters bleibt unverändert.

Für die Konfiguration des Telefons werden zwei Dateien verwendet. f0D00580000.cfg – zur Speicherung der Einstellungen aller Telefone und 00112233aabb.cfg (MAC-Adresse in Kleinbuchstaben) für individualisierte Einstellungen. Individualisierte Einstellungen haben natürlich Vorrang.

Der vollständige Satz an Einstellungen umfasst über eintausend Zeilen. Um den Artikel nicht zu überladen, beschreibe ich einen minimal ausreichenden Satz an Einstellungen.

Der Wurzelknoten ist obligatorisch. VOIP_CONFIG_FILE und der darin eingebettete Knoten version. Die Einstellungen werden nur angewendet, wenn die Version der Datei höher ist als die aktuellen Einstellungen des Geräts. Sie können diesen Wert über das Web-Interface des Telefons im Bereich Wartung (Systemverwaltung) herausfinden. Für Telefone mit Werkskonfiguration beträgt dieser Wert in beiden Fällen 2.0002. Darüber hinaus muss die Version der individuellen Datei höher sein als die der allgemeinen Datei.

Zunächst stelle ich die Datei mit der allgemeinen Konfiguration für alle Telefone vor. Im Wesentlichen speichert sie alle Einstellungen; die individuelle Datei ist nur für die Telefonnummer und die Anzeige auf dem Bildschirm verantwortlich.

In den beiden unten aufgeführten Blöcken werden die Parameter für die Zeitzone und die Zeitsynchronisation, der Startport für RTP festgelegt und eine Netzwerkbrücke zwischen den WAN- und LAN-Anschlüssen des Geräts aktiviert.

Fragment Nr. 1

DHCP
2
1
1
0
VOIP
10000
200
10.1.1.4
1


0
60
12
1500


1
1

Die Namen der Konfigurationseinstellungen sind selbsterklärend und bedürfen keiner detaillierten Beschreibung.
SIP für eine Leitung

5060


SIP1
10.1.1.50
5060
3600
1
10.1.1.50
1
0
G711A,G711U,G722

Einstellungen für die Fernverwaltung

23
80
0
443
1
0



Item1
10.1.1.152
10.1.1.160




Account1
admin
ADMIN_PWD
10


Account2
guest
GUEST_PWD
5

Telefonausstattungen

123
123

0
112
Unternehmen
5
1
30
0

1
0,,1
0
0
1


XML-PBook1
Telefonbuch
http://10.1.1.50/provisioning/dlink-phonebook.xml
:
0
0


freund,zuhause,arbeit,geschäft,kommilitone,kollege

Alle anderen Einstellungen bleiben auf 'Standard'. Jedes Dlink-Telefon, das mit dem Netzwerk verbunden ist, nimmt sofort das gemeinsame Set an Parametern an. Um individuelle Einstellungen für das Gerät vorzunehmen, ist eine separate Datei erforderlich. In dieser müssen lediglich die erforderlichen Einstellungen für den einzelnen Teilnehmer angegeben werden.
Teilnehmer-Einstellungen

2.0006



SIP1
Benutzer #117
117
5060
117
SIP_PWD
3600
1
5060
117
SIP_PWD

Panasonic UT-KX123B

Diese Geräte erhalten die Einstellungen nach einem etwas anderen Schema. Die Konfiguration wird in Textdateien gespeichert. Die maximale Größe der Konfigurationsdatei beträgt 120 KB. Unabhängig von der Anzahl der Dateien darf ihre Gesamtsumme 120 KB nicht überschreiten.
Die Konfigurationsdatei besteht aus einer Reihe von Zeilen, auf die die folgenden Bedingungen angewendet werden:

  • Immer an erster Stelle steht eine Kommentarzeile, die die folgende Zeichenfolge enthält (44 Byte):
    # Panasonic SIP Phone Standard Format File #
    Die hexadezimale Darstellung dieser Zeichenfolge:
    23 20 50 61 6E 61 73 6F 6E 69 63 20 53 49 50 20 50 68 6F 6E 65 20 53 74 61 6E 64 61 72 64 20 46 6F 72 6D 61 74 20 46 69 6C 65 20 23
    Um zufällige Änderungen der festgelegten Zeichensequenz zu vermeiden, wird empfohlen, die Konfigurationsdatei mit der Zeile zu beginnen:
    # Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE!
  • Die Konfigurationsdateien müssen mit einer leeren Zeile enden.
  • Jede Zeile muss mit der Sequenz "" enden.
  • Die maximale Zeilenlänge beträgt 537 Bytes, einschließlich der Sequenz "".
  • Die folgenden Zeilen werden ignoriert:
    • Zeilen, die das Limit von 537 Bytes überschreiten;
    • leere Zeilen;
    • Kommentarzeilen, die mit dem Zeichen "#" beginnen;
  • Die Zeile für jeden Parameter wird in der Form XXX="yyy" geschrieben (XXX: Name des Parameters, yyy: sein Wert). Der Wert muss in doppelte Anführungszeichen gesetzt werden.
  • Das Aufteilen von Parameterzeilen in mehrere Zeilen ist nicht erlaubt. Dies führt zu einem Fehler bei der Verarbeitung der Konfigurationsdatei und damit zu einem Fehler bei der Initialisierung.
  • Die Werte einiger Parameter müssen für jede Leitung getrennt angegeben werden. Ein Parameter mit dem Suffix "_1" im Namen ist der Parameter für Leitung 1; "_2" – für Leitung 2 usw.
  • Die maximale Länge des Parameternamens beträgt 32 Zeichen.
  • Die maximale Länge des Parameterwerts beträgt 500 Zeichen, ausgenommen doppelte Anführungszeichen.
  • Leerzeichen in der Zeile sind nicht gestattet, es sei denn, der Wert umfasst ein Leerzeichen.
  • Einige Parameterwerte können "leer" angegeben werden, um einen leeren Parameterwert festzulegen.
  • Die Parameter werden in beliebiger Reihenfolge angegeben.
  • Wenn derselbe Parameter im Konfigurationsfile mehr als einmal angegeben wird, gilt der zuerst angegebene Wert.

Diese strengen Anforderungen an die Konfigurationsdatei haben mich ehrlich gesagt enttäuscht. Meiner Meinung nach ist die Interaktion mit dem Server durch der Verwaltung der Panasonic-Telefone äußerst unpraktisch. In dieser Hinsicht hat das Telefon andere Modelle deutlich geschlagen.
Beim ersten Einschalten des Geräts (oder nach einem Zurücksetzen auf die Werkseinstellungen) versucht es, die sogenannte Produktdatei (in diesem Fall KX-UT123RU.cfg) zu laden, die Pfade zu anderen Konfigurationsdateien enthalten sollte.
Produktdatei# Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE!

CFG_STANDARD_FILE_PATH="tftp://10.1.1.50/panasonic/{mac}.cfg"
CFG_PRODUCT_FILE_PATH="tftp://10.1.1.50/panasonic/KX-UT123RU.cfg"
CFG_MASTER_FILE_PATH="tftp://10.1.1.50/panasonic/master.cfg"

Nach diesem Vorgang zeigt das Telefon eine Meldung über den erfolgreichen Abschluss der Vorbereitung an und wartet, bis es neu gestartet wird. Nach dem Neustart beginnt es mit der Verarbeitung der erforderlichen Konfigurationsdateien.

In der Datei master.cfg sollten die allgemeinen Einstellungen für alle Telefone angegeben werden. Wie bei Dlink werde ich nur einige Parameter angeben. Die Namen der anderen Parameter und deren Werte sind in der Dokumentation auf der Website des Herstellers zu finden.
master.cfg############################################################
# System Settings #
############################################################
## Login Account Settings
ADMIN_ID=«admin»
ADMIN_PASS=«ADMIN_PWD»
USER_ID=«user»
USER_PASS=«USER_PWD»

## System Time Settings
NTP_ADDR=«10.1.1.4»
TIME_ZONE=«660»
DST_ENABLE=«N»
DST_OFFSET=«60»
DST_START_MONTH=«3»
DST_START_ORDINAL_DAY=«2»
DST_START_DAY_OF_WEEK=«0»
DST_START_TIME=«120»
DST_STOP_MONTH=«10»
DST_STOP_ORDINAL_DAY=«2»
DST_STOP_DAY_OF_WEEK=«0»
DST_STOP_TIME=«120»
LOCAL_TIME_ZONE_POSIX=""

## Syslog Settings
SYSLOG_ADDR=«10.1.1.50»
SYSLOG_PORT=«514»
SYSLOG_EVENT_SIP=«6»
SYSLOG_EVENT_CFG=«6»
SYSLOG_EVENT_VOIP=«6»
SYSLOG_EVENT_TEL=«6»

## Provisioning Settings
OPTION66_ENABLE=«Y»
OPTION66_REBOOT=«N»
PROVISION_ENABLE=«Y»
CFG_STANDARD_FILE_PATH="tftp://10.1.1.50/panasonic/{mac}.cfg"
CFG_PRODUCT_FILE_PATH="tftp://10.1.1.50/panasonic/KX-UT123RU.cfg"
CFG_MASTER_FILE_PATH="tftp://10.1.1.50/panasonic/master.cfg"

############################################################
# Network Settings #
############################################################
## IP Settings
CONNECTION_TYPE=«1»
HOST_NAME=«UT123»
DHCP_DNS_ENABLE=«Y»
STATIC_IP_ADDRESS=""
STATIC_SUBNET=""
STATIC_GATEWAY=""
USER_DNS1_ADDR=""
USER_DNS2_ADDR=""

## DNS Settings
DNS_QRY_PRLL=«Y»
DNS_PRIORITY=«N»
DNS1_ADDR=«10.1.1.1»
DNS2_ADDR=""

## HTTP Settings
HTTPD_PORTOPEN_AUTO=«Y»
HTTP_VER=«1»
HTTP_USER_AGENT=«Panasonic_{MODEL}/{fwver} ({mac})»
HTTP_SSL_VERIFY=«0»
CFG_ROOT_CERTIFICATE_PATH=""

## XML Application Settings
XML_HTTPD_PORT=«6666»
XMLAPP_ENABLE=«Y»
XMLAPP_USERID=""
XMLAPP_USERPASS=""
XMLAPP_START_URL=""
XMLAPP_INITIAL_URL=" "
XMLAPP_INCOMING_URL=""
XMLAPP_TALKING_URL=""
XMLAPP_MAKECALL_URL=""
XMLAPP_CALLLOG_URL=""
XMLAPP_IDLING_URL=""
XMLAPP_LDAP_URL=«10.1.1.50/provisioning/panasonic-phonebook.xml»
XMLAPP_LDAP_USERID=""
XMLAPP_LDAP_USERPASS=""

In der individuellen Konfigurationsdatei des Geräts bleiben traditionell nur die Abonnenteneinstellungen.
aabbccddeeff.cfgDISPLAY_NAME_1=«Benutzer #168»

PHONE_NUMBER_1=«168»
SIP_URI_1=«168»
LINE_ENABLE_1=«Aktiviert»
PROFILE_ENABLE_1=«Aktiviert»
SIP_AUTHID_1=«168»
SIP_PASS_1=«SIP_PWD»

Grandstream GXP-1400

Die Parameter dieser Telefone werden in einer XML-Datei mit dem Namen cfg{mac}.xml gespeichert. Oder in einer normalen Textdatei mit dem Namen cfg{mac}. Dieses Telefon fordert nur die individuelle Konfigurationsdatei an, daher ist eine Optimierung der Einstellungen durch Auslagerung in eine gemeinsame Datei nicht möglich. Eine weitere Besonderheit der Grandstream-Konfiguration ist die Benennung der Parameter. Alle sind nummeriert und werden als P### bezeichnet. Zum Beispiel:

P1650 – steuert die Weboberfläche zur Verwaltung des Telefons (0 – HTTPS, 1 – HTTP)
P47 – Adresse des SIP-Servers zur Verbindung.

Wenn die Konfiguration in einer Textdatei gespeichert ist, benötigen die Parameter keine Gruppierung und können in beliebiger Reihenfolge angeordnet werden. Zeilen, die mit # beginnen, werden als Kommentare betrachtet.

Wenn die Einstellungen im XML-Format bereitgestellt werden, müssen sie innerhalb des Knotens geschachtelt sein, der wiederum in enthalten sein muss. Alle Parameter werden in Form entsprechender Tags mit dem Wert des Parameters innerhalb angegeben.
Beispiel der Einstellungen

1
    
    109
    
    109
    
    109
    
    SIP_PWD
    
    Benutzer# 109

        10.1.1.50
        2
   10.1.1.50
   0
   ADMIN_PWD
   USER_PWD
   de
        0
        10.1.1.50/grandstream
   1
   TZc-11
   10.1.1.4
        1
        http://10.1.1.50/provisioning/grandstream
        30

Yealink T19 und T21

Die Geräte dieser Modelle unterstützen individuelle Konfigurationsdateien für Geräte sowie allgemeine für die Modelle. In meinem Fall musste ich die allgemeinen Parameter in den Dateien y000000000031.cfg und y000000000034.cfg ablegen. Individuelle Konfigurationsdateien werden nach der MAC-Adresse benannt: 00112233aabb.cfg.

Die Einstellungen für Yealink-Geräte werden im Textformat gespeichert. Die einzige zwingende Anforderung ist die Angabe der Dateiversion in der ersten Zeile im Format #!version:1.0.0.1.

Alle Parameter werden im Format parameter = wert aufgezeichnet. Kommentare müssen mit dem Zeichen "#" beginnen. Die Namen der Parameter und deren Werte sind in der Dokumentation auf der Webseite des Herstellers zu finden.
allgemeine Einstellungen#!version:1.0.0.1
#Configure the WAN port type; 0-DHCP (default), 1-PPPoE, 2-Static IP Address;
network.internet_port.type = 0
#Configure the PC port type; 0-Router, 1-Bridge (default);
network.bridge_mode = 1
#Configure the access type of the web server; 0-Disabled, 1-HTTP & HTTPS(default), 2-HTTP Only, 3-HTTPS Only;
network.web_server_type = 3
#Configure the maximum local RTP port. It ranges from 0 to 65535, the default value is 11800.
network.port.max_rtpport = 10100
#Configure the minimum local RTP port. It ranges from 0 to 65535, the default value is 11780.
network.port.min_rtpport = 10000
security.user_name.admin = root
security.user_password = root:ADMIN_PWD
security.user_name.user = user
security.user_password = user:USER_PWD
#Specify the web language, the valid values are: English, Chinese_S, Turkish, Portuguese, Spanish, Italian, French, Russian, Deutsch and Czech.
lang.wui = Russisch
#Specify the LCD language, the valid values are: English (default), Chinese_S, Chinese_T, German, French, Turkish, Italian, Polish, Spanish and Portuguese.
lang.gui = Russisch
#Configure the time zone and time zone name. The time zone ranges from -11 to +12, the default value is +8.
#The default time zone name is China(Beijing).
#Refer to Yealink IP Phones User Guide for more available time zones and time zone names.
local_time.time_zone = +11
local_time.time_zone_name = Wladiwostok
#Configure the domain name or the IP address of the NTP server. The default value is cn.pool.ntp.org.
local_time.ntp_server1 = 10.1.1.4
#Configure the logo mode of the LCD screen; 0-Disabled (default), 1-System logo, 2-Custom logo;
phone_setting.lcd_logo.mode = 1
#Configure the access URL and dispaly name of the remote phonebook. X ranges from 1 to 5.
remote_phonebook.data.1.url = 10.1.1.50/provisioning/yealink-phonebook.xml
remote_phonebook.data.1.name = Telefonbuch
features.remote_phonebook.flash_time = 3600

individuelle Einstellungen#!version:1.0.0.1
#Enable or disable the account1, 0-Disabled (default), 1-Enabled;
account.1.enable = 1
#Configure the label displayed on the LCD screen for account1.
account.1.label = Testtelefon
#Configure the display name of account1.
account.1.display_name = Benutzer 998
#Configure the username and password for register authentication.
account.1.auth_name = 998
account.1.password = 998
#Configure the register user name.
account.1.user_name = 998
#Configure the SIP server address.
account.1.sip_server_host = 10.1.1.50
#Specify the port for the SIP server. The default value is 5060.
account.1.sip_server_port = 5060

Dank der hervorragenden Auto-Provisionierungsfunktion in den von mir erwähnten Telefonen gab es beim Anschluss neuer Geräte an das Netzwerk keinerlei Probleme. Es ging lediglich darum, die MAC-Adresse des Telefons zu ermitteln und eine Konfigurationsdatei anhand einer Vorlage zu erstellen.

Ich hoffe, dass Sie bis zum Ende gelesen haben und nützliche Informationen gewonnen haben.

Vielen Dank für Ihre Aufmerksamkeit.

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster