Greetings!
I am trying to link two Asterisk/FreePBX systems using IAX2. As we do not have an RF link between the two mesh islands we are using a mesh tunnel. Each end shows an active IAX2 trunk on the dashboard page but when dialing a phone on the other end, each receives an all circuits are busy message. We have 5525 forwarded for the tunnel and, after several failed attempts, have forwarded 4569 with UDP at both ends with no change.
Any ideas?
Thank you,
Keith - AI6BX
I am trying to link two Asterisk/FreePBX systems using IAX2. As we do not have an RF link between the two mesh islands we are using a mesh tunnel. Each end shows an active IAX2 trunk on the dashboard page but when dialing a phone on the other end, each receives an all circuits are busy message. We have 5525 forwarded for the tunnel and, after several failed attempts, have forwarded 4569 with UDP at both ends with no change.
Any ideas?
Thank you,
Keith - AI6BX
To help you in your thinking, when you trunk between PBX's, one PBX has to send a number to the other PBX to complete a call. In a little more detail, the PBX on the originating side has to know number(s) that are on the other PBX. It takes this number, and sends it across the trunk to the other PBX. Finally, the PBX on the other end has to take this incoming number and send it to the desired extension. For calls going in the other direction, this process is reversed.
In asterisk, the dial plan in the originating phone's context must have an entry for the number on the other PBX so it can send the call to the outgoing trunk. The outgoing trunk then sends this number to the destination PBX. The trunk definition on the destination PBX must then have an entry to send this call to the terminating phone's context. If any of these routing statements are missing, the call will not go through.
I'm not sure what terminology FreePBX uses for this. I think "Outbound Routes" is the routing on the originating PBX and "Incoming Routes" is the routing on the incoming PBX.
w6abj is correct - you have to have a clear idea of what extensions live where and then how to get from one to the other. The term "dial plan" encompasses this whole idea (what extension number goes where). If you can relate that information here in another post, we can better help you.
Also, be sure to watch the asterisk console in real time when calls are placed. With a little experience, you can tell where calls are going. If you can have both consoles up on one screen at the same time, you can tell if the call actually made it across the trunk. Ultimately, with both screens up, you can see the call go from one phone to the other phone.
Mark
Keith, IAX2 doesn't care about NAT like SIP does. So the question is, can you ping both Asterisk servers ping each other?
Simple IAX2 setup.
http://www.voip-info.org/wiki/view/Asterisk+Connect+2+servers
If you want a little more then a simple PBX and want to try app-rpt take a look at www.allstarlink.org (No FreePBX) or www.xelatec.com/xipar/ (With FreePBX).
David KE6UPI
P.S. App-RPT has built EchoLink and can be installed on a Raspberry Pi.
Extensions are set up as a tie-line environment, as any sort of mapping extensions in a large mesh will be impossible to document and manage.
For example, in my case, I set up *81 to hit Keith's trunk.
I dial *81 and then any extension number that Keith has identified. Duplicate extensions within the many systems will not be a problem this way.
() + *81 | . "If a user dials *81 and then dials anything, the *81 will be removed and the rest of the numbers will be sent to System2."
The trunk appears healthy, except for 'all circuits are busy'
73
Jim AG6IF
This means the data on the link is Encrypted. You have turned that on in your config.
Note that if you have a registered trunk with a user id and password, encryption is used in authenticating the connection but that does not mean the subsequent data is encrypted. For data encryption to happen, you must have put:
encryption=aes128
or
encryption=yes
somewhere in your config file.
Thanks,
Keith
The "all circuits busy" will happen when the two ends sharing the IAX trunk encounter a problem when actually trying to USE the trunk. There are a number of things that can cause this. I have found the log files from free PBX not very useful.
As an alternative, you can log into your asterisk system, turn up the debug level (core set debug 5) and watch the command line when a call is attempted. You may see something there hinting at the problem being encountered.
If you post your details here some expert may be able to spot the problem.
I would note that naming is critical and case matters. Both ends need to match up precisely.
asterisk -rvvvv
This may be the common consistant issue:
-- Executing [continue@macro-dialout-trunk:1] NoOp("SIP/103-00000026", "TRUNK Dial failed due to CHANUNAVAIL HANGUPCAUSE: 50 - failing through to other trunks") in new stack.
Neither Keith or I see each others dial attempts in our own logs.
73
Jim AG6IF
yes that is correct if you are sitting at the OS command line. The number of v's is the debug level.
If you are already logged into an asterisk session, then core set debug <n> is how you change the debug level.
n runs from 1 to 7 I think. 0 (zero) means off.
I find 5 to be helpful at times.
Hey Jim, Can you paste your IAX trunk details for both servers? Looking at your iax show peers. Both servers has the same IP addresses. This means that server AG6IF will only take an iax connection from what ever IP address is given in "iax show peers" So AG6IF thinks AG6IF-Link/AG6I IP address is 10.67.79.232. Plus I don't think you need to tunnel. "I think." If both Aredn router devices can ping each other on the Aredn Network i.e. ping 10.67.xxx.xxx.
You'll have to use your devices Aredn Network IP address and port forward iax UDP 4569 to your PBX. Your Register String should look like this ag6if@10.67.xxx.xxx. Then your Aredn device would port forward UDP 4569 to your PBX on your LAN network.
If your using
auth=
encrtption=
delete them for now.
you should only need:
type=friend
host=dynamic
username
secret=
I'll be out for day and should be back tonight. I'll monitor the GTARC 2m repeater when I get home.
Lets document this and post it to Aredn's website when we get it working.
David KE6UPI
Each end of the trunk should be showing the address of the other end in "iax2 show peers".
If it is a "register" type of trunk then the leftmost should show the trunk name and user name - I noticed the first one has no user name.
With a user name, you need a password too (and I think the passwords need to be the same on both ends).
On a common 10.x.x.x mesh network no tunnel is required.
They can even be on different networks with routers in between - no tunnel require there either ... although you then have to use the address on the WAN side of the router..
I added 4569 to my mesh forward screen, however, the sniffer trace proved it was working prior, in other words, I was seeing packets from his end, port 4569 (udp)
ag6if-raspbx*CLI> iax2 show peers
Name/Username Host Mask Port Status Description
AI6BX 10.80.3.84 (S) 255.255.255.255 4569 (T) OK (68 ms)
ai6bx-raspbx/ai 10.80.3.84 (S) 255.255.255.255 4569 (T) OK (55 ms)
2 iax2 peers [2 online, 0 offline, 0 unmonitored]
I posted the trunk status from my end, (showing his user name etc.)
The 10.67 address is my asterisk box here at my mesh network.
the udp poke/ack between the servers appears to be working (seeing packets using iptraf) , and the trunks are showing as connected.
username=ai6bx
host=10.80.3.84
secret=password
deny=all
allow=g729&alaw
type=friend
context=from-internal
qualify=yes
qualifyfreqok=25000
transfer=no
trunk=yes
forceencryption=no
encryption=no
and from the USER set
context=from-internal
host=10.80.3.84
deny=all
allow=g729&alaw
qualify=yes
secret=password
trunk=yes
type=friend
This is the command I constructed...(i'm using linux to wrap the extremely defective asterisk console functionality--lacking pagers grep, etc.. )
watch -n 10 "asterisk -rx 'iax2 show channels' "
Channel Peer Username ID (Lo/Rem) Seq (Tx/Rx) Lag Jitter JitBuf Format FirstMsg LastMsg
(None) 10.80.3.84 ai6bx 17031/08365 00002/00002 00000ms 0000ms 0040ms Unknow Tx:NEW Tx:ACK
1 active IAX channel
My pi-trunk lines do not have anything at all in the User Details section - it is not required for this sort of trunk.
I think if you are using a password you need auth=md5 on both ends
It has to know how to handle the password authorization exchange (not sure if there is a default).
that error code 50 would seem to be related to this:
http://www.voip-info.org/wiki/view/Asterisk+No+authority+found
From the asterisk CLI you could turn IAX debugging on
iax2 set debug on
you may see that the auth fails
also
allow=g729&alaw
is not something I have seen before try doing it with two lines
allow=g729
allow=alaw
. . .
yeah - mine did that too.
The reason I have not seen it before is that I have not put anything at all about codecs in my PEER details.
FreePBX finds the codecs somewhere else and puts them in the internal config file just fine without my "help".
/etc/asterisk/iax_general_additional.conf
Another thing you can leave blank is the "context" FreePBX will make one for you.
I note that "from-internal" is one that is already in use by FreePBX - not sure if that could cause problems ...
thank you,
after you sent keith 2 files to get away from gui, I couldnt get the outbound route to attach to the iax trunk, but I added the commands that you sent, to a brand new gui aix trunk and it works fine now.
I can call Keith and he is working to get his end fixed up.
here are the commands i inserted in the PEERS gui box.
host=ai6bx-raspbx
secret=<redacted>
type=friend
auth=plaintext
context=from internal <---edit as of 8/28/16 2am, this line is missing a - between FROM and INTERNALl..fixed, works now!
disallow=all
allow=ulaw
qualify=yes
transfer=no
Once this was in, then I could go to outbound route and select the trunk. (that wasnt available when just using the /etc/asterisk/.. file method.
getting close!!
73
Jim AG6IF
I think the "auth= " was the key to getting the trunk to connect. Per my previous post - when you use a password, you need to specify how it will be handled in authorizing. Over a part-97 the communications cannot be encrypted, but I think it is widely accepted that checking of "hashed" passwords is not a problem. .
Both host have the same IP addresses. I'm not following this.
Server "A" AG6BX 10.80.3.84
Server "B ai6bx-raspbx/ai 10.80.3.84
ag6if-raspbx*CLI> iax2 show peers
Name/Username Host Mask Port Status Description
AI6BX 10.80.3.84 (S) 255.255.255.255 4569 (T) OK (68 ms)
ai6bx-raspbx/ai 10.80.3.84 (S) 255.255.255.255 4569 (T) OK (55 ms)
2 iax2 peers [2 online, 0 offline, 0 unmonitored]
Peer settings should be host=dynamic not host=IPAddress. Also IAX doesn't need USER setup in freepbx.
David
server A has PEER and USER configs, (10.80.3.84) what you are seeing above
serverB has PEER and USER configs (10.67.79.239)
Keith is working on changes to his end at the moment, but my end works great going to his system.
here is part of my log. note, only 1 codec now, instead of formerly having 2...not sure what the effect of that is..but for now.... yay!
[2016-08-27 17:01:01] VERBOSE[3132][C-00000009] app_dial.c: -- Called IAX2/ai6new/7004
[2016-08-27 17:01:01] VERBOSE[1379][C-00000009] chan_iax2.c: -- Call accepted by 10.80.3.84 (format ulaw)
[2016-08-27 17:01:01] VERBOSE[1379][C-00000009] chan_iax2.c: -- Format for call is (ulaw)
[2016-08-27 17:01:01] VERBOSE[3132][C-00000009] app_dial.c: -- IAX2/ai6new-466 is ringing
[2016-08-27 17:01:01] VERBOSE[3132][C-00000009] app_dial.c: -- IAX2/ai6new-466 is ringing
de Jim AG6IF
As you recall, my end could call Keith but he couldn't call me.
The config on my end was missing a single - in the context=from internal that is it!!
73 Jim AG6IF
16-08-28 01:25:29] VERBOSE[9079][C-00000008] pbx.c: -- Executing [s@macro-dialout-trunk:23] Dial("IAX2/Ag6if-m-9686", "IAX2/Ag6if-m/103,300,Ttr") in new stack
[2016-08-28 01:25:29] VERBOSE[9079][C-00000008] app_dial.c: -- Called IAX2/Ag6if-m/103
[2016-08-28 01:25:30] VERBOSE[1735][C-00000008] chan_iax2.c: -- Call accepted by 10.67.79.232 (format ulaw)
[2016-08-28 01:25:30] VERBOSE[1735][C-00000008] chan_iax2.c: -- Format for call is (ulaw)
[2016-08-28 01:25:30] VERBOSE[9079][C-00000008] app_dial.c: -- IAX2/Ag6if-m-3291 is ringing
[2016-08-28 01:25:31] VERBOSE[9079][C-00000008] app_dial.c: -- IAX2/Ag6if-m-3291 is ringing
[2016-08-28 01:25:34] VERBOSE[9079][C-00000008] chan_iax2.c: -- Hungup 'IAX2/Ag6if-m-3291'
[2016-08-28 01:25:34] VERBOSE[9079][C-00000008] app_macro.c: == Spawn extension (macro-dialout-trunk, s, 23) exited non-zero on 'IAX2/Ag6if-m-9686' in macro 'dialout-trunk'