• Eigenständig gehostete oder lokal installierte Instanzen sind komplexer in der Einrichtung und Fehlerbehebung und erfordern daher kostenpflichtigen technischen Support. Kostenlosen Support erhalten Sie mit 3CX StartUP oder einer gehosteten 3CX-Installation mit einen unterstützten SIP-Trunk-Anbieter.

Eigener FQDN - aktuelle Anleitung

bitn2

Gold Partner
Advanced Certified
Mitglied seit
10. Juli 2020
Beiträge
4.820
Hallo, gibt es eine aktuelle Anleitung zum vorgehen bei der Installation mit eigenem FQDN? Ich konnte dazu nichts finden.
 
Fehlt es direkt an der / einer Anleitung oder habt ihr ein Problem?

Ich konnte dazu nichts finden.
richtig, gibt es schon eine Weile nicht mehr schlüssig
Das wurde in etwa zum Zeitpunkt der Einführung des lustigen roten Banner über den Unterforen Eigenständig gehostet und On-Premise und zusammen mit den 3CX Schulungsunterlagen entfernt
 
Fehlt es direkt an der / einer Anleitung oder habt ihr ein Problem?


richtig, gibt es schon eine Weile nicht mehr schlüssig
Das wurde in etwa zum Zeitpunkt der Einführung des lustigen roten Banner über den Unterforen Eigenständig gehostet und On-Premise zusammen mit den 3CX Schulungsunterlagen entfernt
Super! :-D Wird das denn noch offiziell unterstützt?
 
  • Like
Reaktionen: bitn2
Tipps zur Einrichtung? Der Kunde hat zwar einen Linux Spezi vor Ort der auch die anderen 3CX Anlagen eingerichtet hat, ich würde mich aber trotzdem gerne vorher informieren zur Installation.
 
Tipps zur Einrichtung?
Nein, nicht wirklich. Ist alles wie früher. Sinnvoll ist es, wenn die Linux Maschine den gleichen hostnamen hat wie der FQDN, z.B. pbx.meinedomain.de. So funktionieren bei uns alle Skripte.

Den Ersteinrichtungsassistent durchlaufen lassen, Product Key eingeben, in einem der nächsten Dialoge danach kann man immer noch einen eigenen FQDN angeben, dann wird nach einem Zertifikat gefragt (Cert und Key) und der Rest ist wie gehabt.

Das Cert und der Key müssen noch nicht einmal gültig sein und können auch auf einen anderen Namen lauten. Das wird erst einmal nur benötigt, um die Ersteinrichtung abzuschließen.

Als einen der nächsten Schritte spielen wir unseren Automatismus (s.u. Spoiler) zum Einspielen von LE Zertifkaten ein. Der setzt auf jeden Fall immer das richtige Zertifkat für den 3CX Webserver und den SIP Server. Das ist ein Skript was als cron job täglich läuft. Die Zertifikate kommen aktuell von einer zentralen Stelle (i.d.R. der Firewall), welche alle LE verwaltet (acme client und haproxy) und diese per ssh auf die Client Systeme ausrollt. Damit ist der Automatismus dort abgehakt. Der Rest ist wie üblich: Split DNS der Domäne einrichten, gern ein separates Netz für die gesamte Telefonie, DHCP Option 66 dort nutzen usw..

Bash:
#!/bin/bash
#
# AKTUELLE VERSION: vorab und fremdes Ausstellen des Cert auf der pfSense und von da aus Upload in die 3CX als User sshuser
#
# dieses Skript pflegt die von der pfSense bereitgestellten LE Zertifikate nur in die 3CX ein
#
# bash Skript zum Einpflegen extern bereitgestellter LE Zertifikate auf einem Client (hier: unter Debian 3CX, z.B. )
#
# Problem:
# - es wird ein weiterer ssh Benutzer in der 3CX benoetigt, es geht nicht anders, das ist ueblicherweise der Benutzer sshuser
# - nur root kann vmtl. im Debian div. Dienste neu starten lassen, daher laeuft dieses Skript im Debian mit root Rechten
# - die Zertifikate werden vorab irgendwo anders (i.d.R. auf der pfSense Firewall) erstellt, verlaengert und dem Client hier bereitgestellt
#
# die Ausfuehrung ist daher leider zweigeteilt
# Teil 1:
# - auf der pfSense wird die Zertifikatverlaengerung angestossen und durchgefuehrt falls erforderlich
# - im Anschluss daran werden die Zertifikate als eingeschraenkter Benutzer in die 3CX geladen
# Teil 2:
# - auf der 3CX laeuft dieses Skript, welches die bereitgestellten und die aktuell verwendeten Zertifikate ueberprueft
# - falls erforderlich, werden diese umbenannt, an die richtigen Stellen kopiert, die Rechte entspr. gesetzt und Dienste
#     neu gestartet
#
#
# es wird auf dem 3CX Client Computer (debian) benoetigt:
# - ein extra Benutzer mit ssh Zugang, i.d.R. der Benutzer sshuser, anlegen wie folgt:
#       adduser --disabled-password --gecos "" sshuser; adduser sshuser users; echo sshuser:passwortsuperstrenggeheim | chpasswd
# - dieses Skript, es sollte unter /root liegen und ausfuehrbar sein
# - ein cron job: (crontab -l ; echo "30  3  *  *  * /root/clientcert-renew-pbx.domain.de.sh >/dev/null 2>&1") | crontab -
#
# es wird auf der pfSense benoetigt:
# - installiertes Paket cron
# - Paket haproxy und Paket acme, alles vorab umfassend eingerichtet,
#       bei der Zertifikatverlaengerung kommt in die Actions list folgende Zeile:
#       scp /conf/acme/pbx.* sshuser@pbxip:/home/sshuser
# - vorab noch die Einrichtung des passwortlosen ssh Zuganges von der pfSense auf die 3CX,
#   dazu in der pfSense unter Diagnostics / Command Prompt / Execute Shell Command diese folgenden Zeilen je einzeln  ausfuehren:
#       ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -q -N ''     # generiere einen key fuer ssh, ohne Passphrase (root Kennwort) WENN ES DAS NICHT SCHON GIBT
#       ssh-keyscan pbxip >> ~/.ssh/known_hosts                 # hole den hostkey des Zielsystems
#       ssh-copy-id -i ~/.ssh/id_rsa.pub sshuser@pbxip          # per ssh von einer Shell aus ausführen!
#       scp /conf/acme/pbx.* sshuser@pbxip:/home/sshuser        # bei Bedarf: die Zertifikate auf den Zielcoputer kopieren
#
#   Kontrolle ob ssh key schon besteht und das Zielsystem bereits in der Liste ist:
#       ls -ahl ~/.ssh/; cat ~/.ssh/known_hosts
#
#
# Suchstichworte: pfsense haproxy letsencrypt upload automatisch skript script shell bash debian 3cx pbx remote
#

_sshusername="sshuser"                          # der auf der 3CX extra angelegte Benutzer
_sshpassword="superstrenggeheim"                # dessen Passwort, wird hier im Skript gar nicht benoetigt :)
_fqdn=$(hostname -f)                            # der FQDN des Letsenrypt Zertifikates abgeleitet vom vollstaendigen Namen der Maschine, ist auch genau so unter diesem Namen in der pfSense drin
_doupdate=$false

_actcerthash=$(cat /home/$_sshusername/$_fqdn.fullchain | md5sum)
_actkeyhash=$(cat /home/$_sshusername/$_fqdn.key | md5sum)

_tcxcerthash=$(cat /var/lib/3cxpbx/Bin/nginx/conf/Instance1/$_fqdn-crt.pem | md5sum)
_tcxkeyhash=$(cat /var/lib/3cxpbx/Bin/nginx/conf/Instance1/$_fqdn-key.pem | md5sum)
_sipcerthash=$(cat /var/lib/3cxpbx/Instance1/Bin/Cert/domain_cert_$_fqdn.pem | md5sum)
_sipkeyhash=$(cat /var/lib/3cxpbx/Instance1/Bin/Cert/domain_key_$_fqdn.pem | md5sum)

if [[ ($_tcxcerthash != $_actcerthash) || ($_sipcerthash != $_actcerthash) || ($_tcxkeyhash != $_actkeyhash) || ($_sipkeyhash != $_actkeyhash) ]]; then
    rm /var/lib/3cxpbx/Bin/nginx/conf/Instance1/$_fqdn-crt.pem
    rm /var/lib/3cxpbx/Bin/nginx/conf/Instance1/$_fqdn-key.pem
    cp /home/$_sshusername/$_fqdn.fullchain /var/lib/3cxpbx/Bin/nginx/conf/Instance1/$_fqdn-crt.pem # nicht cert.pem ?!?
    cp /home/$_sshusername/$_fqdn.key /var/lib/3cxpbx/Bin/nginx/conf/Instance1/$_fqdn-key.pem
    chown phonesystem:phonesystem /var/lib/3cxpbx/Bin/nginx/conf/Instance1/$_fqdn-crt.pem
    chown phonesystem:phonesystem /var/lib/3cxpbx/Bin/nginx/conf/Instance1/$_fqdn-key.pem
    chmod 644 /var/lib/3cxpbx/Bin/nginx/conf/Instance1/$_fqdn-crt.pem
    chmod 644 /var/lib/3cxpbx/Bin/nginx/conf/Instance1/$_fqdn-key.pem

    /etc/init.d/nginx reload

    rm /var/lib/3cxpbx/Instance1/Bin/Cert/domain_cert_$_fqdn.pem
    rm /var/lib/3cxpbx/Instance1/Bin/Cert/domain_key_$_fqdn.pem
    cp /home/$_sshusername/$_fqdn.fullchain /var/lib/3cxpbx/Instance1/Bin/Cert/domain_cert_$_fqdn.pem
    cp /home/$_sshusername/$_fqdn.key /var/lib/3cxpbx/Instance1/Bin/Cert/domain_key_$_fqdn.pem
    chown phonesystem:phonesystem /var/lib/3cxpbx/Instance1/Bin/Cert/domain_cert_$_fqdn.pem
    chown phonesystem:phonesystem /var/lib/3cxpbx/Instance1/Bin/Cert/domain_key_$_fqdn.pem
    chmod 644 /var/lib/3cxpbx/Instance1/Bin/Cert/domain_cert_$_fqdn.pem
    chmod 644 /var/lib/3cxpbx/Instance1/Bin/Cert/domain_key_$_fqdn.pem

    systemctl stop 3CXPhoneSystem01
    # _services=$(systemctl list-unit-files --state=enabled |grep -i 3cx |awk '{printf "%s\n", $1}')
    # for _service in $_services; do systemctl is-active --quiet $_service || systemctl start $_service; done
    for _service in $(systemctl list-unit-files --state=enabled |grep -i service |awk '{printf "%s\n", $1}'); do systemctl is-active --quiet $_service || systemctl start $_service; done
    _doupdate=$true
fi

exit 1
 
Zuletzt bearbeitet:
Alles klar, dann hat sich ja nichts geändert. Vielen Dank
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
21.367
Beiträge
107.435
Mitglieder
70.525
Neuestes Mitglied
Elison Santana
Holen Sie sich 3CX - völlig kostenlos!

Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX register cta
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.