×

Sign In

Sign in with your username and password to access your account.
×

SIP Telephony with IZPBX

Claude enabled me to work on projects with a speed never possible before. I would like to make the results public for other people to use that don't have access to sometimes expensive AI subscriptions. Furthermore, solving problems with AI does mean that the process is often not documented (chat just gets deleted without care). In the earlier days this information was often publicly visible because the work was done by a community in a forum or other form of textual chat. My intention is to fill this gap by uploading findings from AI chats to my website.

The information presented is not checked 100% for mistakes but was generated from a chat that lead to a confirmed working result.

Abstract



izPBX VoIP Setup Documentation — Abstract
Authors: Tobias OE3TEC, Claude (Anthropic)
==========================================

This document describes the complete setup of a self-hosted LAN VoIP system
based on izPBX (Asterisk 20 + FreePBX 16) running in Docker on a home server.

The guide covers the full process from software selection through to verified
HD audio calls, including all configuration decisions, the reasoning behind
them, and the troubleshooting steps encountered along the way.

SCOPE

The system consists of three components:

  - izPBX in Docker (Asterisk engine + FreePBX web GUI + MariaDB)
  - A Snom 715 SIP desk phone on the local LAN (extension 100)
  - Linphone on Ubuntu on the LAN (extension 101)
  - MicroSIP on Windows connecting remotely over WireGuard VPN (extension 102)

No PSTN trunk is configured. This is a purely internal extension system
for home/lab use.

NETWORK TOPOLOGY

The WireGuard setup uses NAT between the client subnet (10.66.10.0/24) and
the server LAN (10.66.1.0/24). NAT handling is configured entirely at the
per-extension level (Direct Media = No) — no global transport settings are
needed or should be changed.

KEY TOPICS COVERED

  - Why izPBX was chosen over a bare Asterisk install on OpenWRT
  - Docker network architecture: the interaction between network_mode: host
    (izpbx container) and the bridge-networked MariaDB container, and how
    a fixed subnet solves the connectivity problem between them
  - Pre-deployment port conflict analysis and resolution
  - Annotated compose.yml and .env configurations with full reasoning
  - FreePBX NAT configuration: Direct Media = No on WireGuard extensions
  - Why the Local network field must be left empty — filling it in breaks
    SIP response routing and causes all phones to stop registering
  - FreePBX codec configuration for G.722 HD audio
  - Snom 715 web interface registration and RTP settings
  - Softphone setup: Linphone (Ubuntu) and MicroSIP (Windows) — both behave
    identically with this setup; G.722 issues are always server-side
  - Why G.722 reports as 8kHz in call stats despite being wideband (RFC 3551)
  - Why G.722 fails with one-way audio when Direct Media is enabled
  - Data persistence: what survives reboots, container restarts, and image
    updates — and what does not
  - Troubleshooting section covering: one-way audio through NAT, all phones
    losing registration after Local network field was set, SIP authentication
    failures, and FreePBX config changes not taking effect
  - Management commands, upgrade procedure, and future Hamnet integration notes

INTENDED AUDIENCE

Anyone looking to reproduce this setup on a similar home server environment
running Docker, with a SIP desk phone and/or softphone clients connecting
both locally and over a WireGuard VPN with NAT. Basic familiarity with
Docker Compose and Linux is assumed.

Downloads

The full documentation can be found here.

izpbx-setup.pdf

last edited 26th May 26