Introduction

Manually configuring SIP phones is a thankless task. Each phone needs an extension number, SIP credentials, server address, codec preferences, BLF keys, and dozens of other settings. At 5 phones, it’s tedious. At 50 phones, it’s a full-time job. At 500+ phones across multiple locations, it’s impossible without automation.

SIP phone auto-provisioning solves this problem by delivering configuration files to phones automatically — typically via TFTP, HTTP, or HTTPS. When a new phone boots up or a configuration changes, the provisioning server pushes the updated config. Most modern SIP phones (Yealink, Polycom, Grandstream, Cisco, Snom, Fanvil) support this out of the box.

In this guide, we compare four self-hosted SIP phone provisioning solutions: FusionPBX Provisioning, FreePBX Endpoint Manager, OpenSIPS Provisioning Module, and Kamailio Provisioning. Each takes a different architectural approach suited to different deployment scales.

Comparison Table

FeatureFusionPBXFreePBX EPMOpenSIPS ProvisioningKamailio Provisioning
Base PlatformFreeSWITCHAsteriskOpenSIPS (SIP proxy)Kamailio (SIP proxy)
LicenseMPL 2.0GPL (EPM commercial)GPLv2GPLv2
Protocol SupportHTTP/HTTPS, TFTP, FTPHTTP/HTTPS, TFTPHTTP/HTTPSHTTP/HTTPS
Phone Brands15+ (Yealink, Poly, Cisco, etc.)10+ (Sangoma, Yealink, etc.)Template-based (any)Template-based (any)
Zero-TouchYes (DHCP Option 66)Yes (DHCP Option 66)Yes (redirect server)Yes (redirect server)
Multi-TenantYes (domain-based)LimitedYes (full isolation)Yes (full isolation)
BLF Key ProvisioningYesYesCustom templatesCustom templates
Firmware ManagementYesYes (EPM Pro)NoNo
Web GUIBuilt-inBuilt-in (EPM module)External (OpenSIPS CP)External (Siremis)
ScalabilityMedium (1-5k phones)Medium (1-3k phones)High (10k+ phones)High (10k+ phones)
GitHub Stars~1,200+N/A (part of FreePBX)~1,000+~2,400+

FusionPBX Provisioning: Turnkey Phone Management

FusionPBX includes a comprehensive provisioning system as part of its web GUI. The provisioning module automatically generates configuration files for supported phone models based on the extension settings you’ve already configured in the PBX. When you create a new extension with a MAC address, FusionPBX generates the appropriate XML or CFG file for that phone model.

FusionPBX’s provisioning uses a template system stored in /var/www/fusionpbx/resources/templates/provision/. Each phone brand and model has its own template directory with default settings you can customize.

Setting Up FusionPBX Provisioning

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Enable the provisioning module
cd /var/www/fusionpbx
php /var/www/fusionpbx/core/provision/resources/classes/provision.php

# Configure Nginx to serve provisioning files
cat > /etc/nginx/sites-available/provision << 'NGINX'
server {
    listen 80;
    server_name provision.yourdomain.com;
    root /var/www/fusionpbx;

    location /app/provision/ {
        allow all;
        try_files $uri $uri/ /app/provision/index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
NGINX

nginx -t && systemctl reload nginx

Configuring DHCP for Zero-Touch

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# /etc/dhcp/dhcpd.conf
option tftp-server-name "http://provision.yourdomain.com/app/provision/";
option bootfile-name "provision";

subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;
    option routers 192.168.1.1;
    option domain-name-servers 192.168.1.1;
    # Yealink phones look for option 66
    option tftp-server-name "http://provision.yourdomain.com";
}

When a supported phone boots up, it receives the provisioning URL via DHCP Option 66, requests its configuration file (identified by MAC address), and auto-configures itself within seconds.

FreePBX Endpoint Manager: Commercial-Grade Provisioning

FreePBX’s Endpoint Manager (EPM) is a commercial module that provides deep integration with Sangoma phones and broad support for third-party devices. EPM’s standout feature is its visual BLF key mapper — you can drag and drop extensions onto phone buttons and see a live preview of the physical phone layout.

EPM maintains a device database that tracks firmware versions, configuration changes, and phone status. When you update an extension’s settings, EPM automatically regenerates and pushes the updated configuration — no manual reboots required (phones check for new configs periodically).

Installing FreePBX Endpoint Manager

1
2
3
4
5
6
# Install via FreePBX module admin
fwconsole ma downloadinstall endpointman
fwconsole ma enable endpointman

# For commercial features (BLF mapping, firmware management):
fwconsole ma install endpointman --commercial

Configuring a Phone Template in EPM

1
2
3
4
5
# Using FreePBX CLI for bulk phone configuration
fwconsole endpointman --add --mac="001122AABB01" --model="yealink_t46s" --ext="101" --template="default"

# Export configuration for backup
fwconsole endpointman --export --format=json > epm_backup.json

FreePBX EPM works best within the FreePBX ecosystem. If your PBX is already FreePBX-based and you use Sangoma phones, EPM provides the tightest integration. For mixed-vendor environments or large-scale deployments (1,000+ phones), OpenSIPS or Kamailio provisioning offers more flexibility.

OpenSIPS Provisioning Module: Carrier-Grade Scale

OpenSIPS takes a fundamentally different approach to provisioning. Instead of embedding provisioning in a PBX, OpenSIPS treats provisioning as a separate service layer that operates independently of the media server. This separation is key for large service providers and carriers who may have multiple PBX clusters behind a single SIP proxy.

The OpenSIPS provisioning module stores phone configurations in a database (MySQL or PostgreSQL) and serves them via HTTP. Configuration templates support variables that are populated from the database at request time, allowing a single template to serve thousands of unique phones.

OpenSIPS Provisioning Architecture

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# docker-compose.yml for OpenSIPS provisioning server
version: '3.8'
services:
  opensips-db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: opensips_secret
      MYSQL_DATABASE: opensips
      MYSQL_USER: opensips
      MYSQL_PASSWORD: opensips_pass

  opensips:
    image: opensips/opensips:3.4
    ports:
      - "5060:5060/udp"
      - "8080:8080"
    environment:
      DB_HOST: opensips-db
      DB_USER: opensips
      DB_PASS: opensips_pass
      DB_NAME: opensips
    volumes:
      - ./opensips.cfg:/etc/opensips/opensips.cfg
      - ./provisioning:/var/opensips/provisioning

volumes:
  db_data:

OpenSIPS Provisioning Configuration

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# opensips.cfg - provisioning module
loadmodule "httpd.so"
loadmodule "mi_http.so"

modparam("httpd", "ip", "0.0.0.0")
modparam("httpd", "port", 8080)

# Provisioning route
route[PROVISION] {
    # Phone requests config by MAC address
    xlog("Provisioning request from $si
");
    
    # Look up phone MAC in database
    avp_db_query("SELECT config FROM provisioning WHERE mac='$au'", "$avp(config)");
    
    if ($avp(config) != NULL) {
        # Serve the configuration
        xlog("Serving config for $au
");
        send_reply("200", "OK");
    } else {
        xlog("Unknown device: $au
");
        send_reply("404", "Device not found");
    }
}

OpenSIPS provisioning excels in scenarios where you need to provision phones across multiple PBX instances, data centers, or customer organizations. The template-driven approach means you can support any phone brand by creating custom templates, even for models that don’t have built-in provisioning support.

Why Self-Host Your Phone Provisioning?

Self-hosting phone provisioning eliminates dependence on vendor cloud platforms. Many phone manufacturers offer cloud-based provisioning (Yealink YMCS, Poly Lens, Grandstream GDMS), but these services come with recurring costs and vendor lock-in. If Yealink changes their cloud pricing or discontinues support for your phone models, your provisioning pipeline breaks.

Self-hosted provisioning also enables configuration version control. Store your phone templates in Git, track changes, and roll back problematic configs instantly. For more on managing infrastructure at scale, see our FreePBX vs FusionPBX vs Wazo PBX comparison. If you need SIP proxy infrastructure alongside provisioning, check our Kamailio vs OpenSIPS guide. For call quality monitoring after phones are provisioned, see our VoIP RTP quality monitoring guide.

FAQ

Can I use provisioning without a PBX?

Yes. OpenSIPS and Kamailio provisioning modules don’t require a PBX — they serve configuration files independently. This is useful when you have phones that register to a cloud PBX or a hosted SIP trunk but you still want centralized config management on-premises.

What if my phone brand isn’t supported by the provisioning platform?

All four platforms support custom templates. For FusionPBX and FreePBX EPM, you add a new template directory with the phone’s expected configuration format (XML, CFG, plain text). For OpenSIPS and Kamailio, you write a provisioning template with database variable substitution. The template format varies by phone manufacturer, but the provisioning logic is the same.

How do I handle firmware updates through provisioning?

FusionPBX and FreePBX EPM (Pro version) both support firmware management — they can serve firmware files alongside configuration and instruct phones to upgrade. OpenSIPS and Kamailio don’t natively manage firmware, but you can host firmware files on the same HTTP server and reference them in the provisioning template. Most phones check for firmware updates during the provisioning process if the firmware URL is included in the config.

Can I migrate from manual configuration to auto-provisioning?

Yes, but you’ll need to factory-reset each phone first. Most SIP phones won’t accept provisioning configuration while they have manually configured settings. The migration process is: (1) set up the provisioning server, (2) factory-reset a test phone, (3) verify it auto-configures correctly, (4) repeat for production phones in batches. Some phones support a “provisioning override” setting that allows remote config to take priority without a factory reset.

How secure is HTTP-based provisioning?

Use HTTPS in production. Plain HTTP provisioning exposes SIP credentials in transit. All four platforms support HTTPS — configure TLS certificates (Let’s Encrypt works well) and set your DHCP Option 66 to use https:// URLs. For phones that don’t support HTTPS (older models), isolate the provisioning traffic to a dedicated management VLAN that’s not accessible from the general network.


💰 想测试你的市场判断力?我用 Polymarket 做预测市场交易——这是全球最大的预测市场平台,从大选结果到技术监管时间线,什么都可以押注。和赌博不同,这是真正的信息市场:你懂的信息越多,胜率越高。我靠预测技术相关事件的走向已经赚了不少。用我的邀请链接注册:Polymarket.com