BulkVS SIP Trunks on a Cisco ISR using IP AuthenticationMy go-to SIP trunk provider these days for US domestic calling is BulkVS. As with most over-the-top SIP trunk providers, no one is perfect. However, I have found that they generally have decent routes, and pricing is pretty good at $0.004/min outbound, $0.0003 inbound (not a typo), and most DIDs around $0.06/month (pricing as of 2026-01-17). Here are some rough instructions on how to get going using a Cisco ISR. As with anything, your specific environment may vary, but hopefully this helps others with getting started. BulkVS Inbound In your BulkVS account, create a trunk group.
BulkVS Outbound In your BulkVS account, we need to add the public IP the ISR is sourcing from as an allowed host.
Configuring the ISR Since we're using IP auth, most of what you need is appropriate outbound and inbound dial-peers. If your ISR is behind NAT, there's a bit of extra config which I will include as well. NOTE: BulkVS, like most SIP trunk providers these days, will reject any calls that do not have a properly formatted calling number. It does not have to be a BulkVS DID and can be any 10 or 11 digit number. If you choose, you can use a translation-profile to control this. However, I handle this at another layer so it is not covered here. If your ISR is behind NAT, you need to configure your public IP as a /32 on a loopback interface. I am using Loopback99 in this example, but it can be any Loopback interface number of your choosing. This is so we can tell it to rewrite the source IP in the SIP header. You will also want to make sure you forward UDP 5060 (SIP signaling) and UDP 10000-65535 (RTP media, yes this excssive but I have found at times to be necessary as you cannot predict what port a media gateway will choose for RTP, and RTP is not guaranteed to use symmetrical ports). If your ISR is not behind NAT, this is not necessary. interface Loopback99 ip address 1.1.1.1 255.255.255.255 voice service voip sip bind all source-interface Loopback99 Inbound example: voice translation-rule 3945 In the case above, calls inbound destined to 555-555-1212 will be sent to DN 3945 Outbound example: voice translation-profile STRIP-FIRST-TWO BulkVS has 3 SBC's and we want to make sure that if one is unreachable we fail over to the next. I have these ordered by latency (lowest to highest). I'm not sure how much this matters, but it also doesn't hurt. Also in my set up, I have assigned trunk code "78" to BulkVS which the outgoing translation-profile strips. |