silly-teacher-46683
02/28/2026, 10:36 AMtall-airline-16756
02/28/2026, 10:37 AMtall-airline-16756
02/28/2026, 10:37 AMsip_trunk_id you’re using.
6. The destination number format (country code included?) and the SIP provider you’re using.
What I’ll check once you share that:
• Whether the SIP trunk credentials and sip_trunk_id look correct.
• If the destination number formatting could be rejected by the provider.
• Any token/permission issues (missing SIPCall grant).
• Relevant server or browser log lines to pinpoint whether the failure is on LiveKit side, your app, or the SIP provider.
If you prefer, paste the error and a short log excerpt now and I’ll propose the next steps.
Sources: Making calls overview | LiveKit Documentation | Agents telephony integration | LiveKit Documentation | server-sdk-kotlin | livekit/livekit_composite | DeepWikisilly-teacher-46683
02/28/2026, 10:39 AMtall-airline-16756
02/28/2026, 10:39 AMsips: or ;transport=tls in URIs.
2) DNS resolution and basic network reachability
• From your LiveKit media node, verify DNS resolves:
◦ dig BYOCPBX.byoc.apse2.pure.cloud
◦ nslookup BYOCPBX.byoc.apse2.pure.cloud
• Test UDP/TCP/TLS reachability on SIP port(s) (commonly 5060 for UDP/TCP, 5061 for TLS). Example:
◦ UDP: nc -u -z BYOCPBX.byoc.apse2.pure.cloud 5060
◦ TCP: nc -z BYOCPBX.byoc.apse2.pure.cloud 5060
◦ TLS: (you can test port open with) nc -z BYOCPBX.byoc.apse2.pure.cloud 5061
• If DNS fails or ports are not reachable, check firewall rules (in your cloud provider and any on-prem firewalls) to allow outbound SIP traffic.
3) Capture and inspect SIP packets
• Capture traffic while reproducing the failed call:
◦ tcpdump -i any -w sip.pcap port 5060 or include 5061 if using TLS
• Open the pcap in Wireshark and confirm:
◦ Whether the INVITE left your node.
◦ Whether any response or ICMP error comes back.
• If INVITE leaves and you see no reply, it’s a network or provider issue. If INVITE never leaves, it’s local firewall/NAT blocking.
4) Check transport/protocol mismatch
• Some BYOC endpoints (Genesys Cloud) require TLS or a specific transport. If your trunk is attempting UDP but the provider expects TLS, the provider may drop packets silently.
• If the provider expects TLS, ensure your trunk and LiveKit use TLS and the SIP URI includes TLS usage.
5) Confirm SIP headers/URI formatting
• Logs show From/To as E.164: fromUser +61288151300, toUser +61288155212. Some providers require the URI to include user=phone or different header formats. Ask the provider whether they expect:
◦ sip:+61288155212@BYOCPBX.byoc.apse2.pure.cloud;user=phone
• If the provider requires any special header (P-Asserted-Identity, From tag formatting), ensure that’s configured.
6) Provider-side verification (Genesys BYOC)
• Ask Genesys Cloud BYOC to confirm whether they received an INVITE from your IP and why they didn’t respond.
◦ Provide them the LiveKit node IP, time (2026-02-28T103423Z) and callID SCL_EfnCWopJct7o / traceID 45666e43576f704a.
• Confirm Genesys has no IP restrictions, ACLs, or SIP profile settings that would drop your INVITE.
7) Short diagnostic test
• From a machine that can reach the provider, try a simple SIP INVITE with sipp (or similar) targeting the same host and called number:
◦ sipp BYOCPBX.byoc.apse2.pure.cloud -sn uac -s +61288155212
• If that INVITE gets no response as well, the issue is provider/network side. If it gets a response, compare the SIP messages to what LiveKit sends.
8) Enable verbose SIP logging in LiveKit
• Temporarily enable full SIP message logging on the LiveKit node to capture raw INVITE content. This lets you verify exact headers and URIs being used.
If you want, I can help with any of the above steps:
• Tell me the transport your trunk is configured to use (UDP/TCP/TLS).
• Share results of DNS and port checks, or paste the relevant pcap output (INVITE packet and any responses).
• If you’d like, I can show example INVITE headers to try based on the provider’s expected format.
Summary
• The INVITE is being sent but no intermediate responses are received.
• Likely causes: network/firewall blocking, DNS/resolution issues, transport mismatch (UDP vs TLS), or provider silently dropping the INVITE.
• Next actions: verify trunk transport and credentials, test DNS/port reachability, capture packets, and ask Genesys BYOC to confirm whether they saw the INVITE.
Send me:
• the trunk transport (UDP/TCP/TLS),
• results of a DNS/port check (output of dig/nc), or
• the pcap or SIP INVITE/response dump — and I’ll point to the exact change to make. Sources: Support data sovereignty in India | LiveKit | Understanding TLS in SIP | LiveKit | Firewall Tips for LiveKit Connectivity | LiveKitsilly-teacher-46683
02/28/2026, 10:44 AMtall-airline-16756
02/28/2026, 10:45 AMsilly-teacher-46683
02/28/2026, 10:49 AMtall-airline-16756
02/28/2026, 10:50 AMnc supports UDP) nc -u -z -v BYOCPBX.byoc.apse2.pure.cloud 5060
▪︎ Or use socat for UDP probe if nc lacks UDP support.
◦ TCP:
▪︎ nc -zv BYOCPBX.byoc.apse2.pure.cloud 5060
◦ TLS port (if used):
▪︎ nc -zv BYOCPBX.byoc.apse2.pure.cloud 5061
◦ If these fail from the pod but succeed from a working pod, it’s an egress/network policy issue.
• Traceroute from pod:
◦ traceroute BYOCPBX.byoc.apse2.pure.cloud
◦ Or for TCP (if available): tcptraceroute BYOCPBX.byoc.apse2.pure.cloud 5060
• Perform a short packet capture inside the pod or on the node (requires privileges):
◦ tcpdump -i any -w /tmp/sip_fail.pcap host BYOCPBX.byoc.apse2.pure.cloud and port 5060
◦ Reproduce the call, then fetch the pcap and check whether the INVITE left the pod and whether any responses arrived.
2) Check pod configuration and environment
• Confirm the pod’s IP and node egress IP:
◦ kubectl get pod <pod> -n <ns> -o wide (shows pod IP and node)
◦ From inside the pod: curl ifconfig.me (or an external service) to see egress IP. Compare that egress IP to a working pod — some providers whitelist source IPs.
• Confirm the pod uses the same LiveKit SIP trunk config as working pods (check environment variables or mounted config).
• Check for init containers or sidecars that could affect networking (e.g., service mesh sidecars).
3) Inspect Kubernetes network controls
• NetworkPolicy: Do you have NetworkPolicies in the namespace? If yes, list them:
◦ kubectl get networkpolicy -n <ns>
◦ kubectl describe networkpolicy <name> -n <ns>
◦ Ensure egress to the provider host/ports is allowed.
• CNI & Node firewall:
◦ Identify the CNI plugin in use (Calico, Flannel, etc.). Some CNIs can block cross-node egress depending on policies.
◦ On the node, check iptables/nftables for rules that differ from nodes where calls succeed.
• Cloud security groups / NSG:
◦ Verify the node’s cloud security group allows outbound UDP/TCP to the SIP host and ports.
4) Compare with a working pod/node
• Run the same DNS, nc, traceroute, and curl-ifconfig checks in a working pod and paste both results. Differences to look for:
◦ Different resolved IPs
◦ Port connectivity failing only on the problematic pod
◦ Different egress IPs
5) Pod-level logs and resource checks
• Confirm the LiveKit SIP media container has no resource constraints or restarts:
◦ kubectl logs <pod> -n <ns> --since=5m
◦ kubectl describe pod <pod> -n <ns> (look for restarts, events)
• Check for SELinux/AppArmor or seccomp profile differences if your cluster enforces policies.
6) Quick mitigations to try
• If NetworkPolicy is blocking egress, add a temporary egress rule permitting traffic to BYOCPBX.byoc.apse2.pure.cloud:5060/5061 and re-test.
• If the pod egress IP is different and provider blocks it, coordinate to allow that egress IP or ensure pods use the same NAT gateway (e.g., via node selection or egress gateway).
• If DNS is stale, restart the pod or flush node resolver (systemd-resolved / nscd) and retest.
What to send me next (most useful)
• Pod name/namespace.
• Output of dig +short and nc/traceroute from failing and a working pod.
• Pod IP and node name (kubectl get pod -o wide).
• Short tcpdump capture (pcap or tcpdump text) showing the INVITE attempt if possible.
• Any NetworkPolicy definitions in the pod namespace.
Once you paste the requested outputs, I’ll pinpoint whether this is DNS, NetworkPolicy, egress IP, node firewall, or pod config, and give exact remediation steps you can apply in your cluster.silly-teacher-46683
02/28/2026, 10:51 AMtall-airline-16756
02/28/2026, 10:52 AM;transport=tls or sips: in the SIP trunk host so signaling goes over TCP/TLS (less likely to be blocked).
• Ensure the pod’s LiveKit config for the trunk matches the working VMs (same sip_trunk_id, transport, and credentials).
7) Node firewall / cloud security group
• Check node-level iptables/nftables for outbound block rules.
• Verify cloud security group / NSG allows outbound UDP/TCP to the SIP host and ports from the worker nodes.
What to share next (most helpful)
• Failing pod name/namespace and node name (kubectl get pod <pod> -n <ns> -o wide).
• Output of:
◦ dig +short BYOCPBX.byoc.apse2.pure.cloud (from failing pod and a working VM)
◦ nc/tcp checks results (from failing pod and a working VM)
◦ curl ifconfig.me from both environments (egress IPs)
• A short tcpdump (pcap) showing the INVITE (or a note that INVITE is missing).
If you prefer a quick mitigation: configure the SIP trunk to use TLS (;transport=tls or sips:) so signaling uses TCP/TLS on 5061 — that commonly bypasses UDP blocking in cluster environments. Tell me the trunk transport and pod outputs above and I’ll tell you the exact field to change and any policy updates needed.
Sources: Firewall Tips | Understanding TLS in SIP | LiveKit