[asterisk-bugs] [JIRA] (ASTERISK-27989) Asterisk sources RTP from wrong IPv6 address

Joshua Colp (JIRA) noreply at issues.asterisk.org
Wed Aug 15 09:13:54 CDT 2018


    [ https://issues.asterisk.org/jira/browse/ASTERISK-27989?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=244501#comment-244501 ] 

Joshua Colp commented on ASTERISK-27989:
----------------------------------------

This is the result of ICE support for both IPv4 and IPv6. In order to do this the RTP is bound to the wildcard of the system, so we can send and receive traffic on multiple interfaces. The result of this is we rely on the underlying system itself to determine the interface and source address to use. While there is the bind_rtp_to_media_address option it doesn't allow moving between IPv4 and IPv6. I think to support your use case there would need to be a new option and feature which is off by default to behave as you need.

> Asterisk sources RTP from wrong IPv6 address
> --------------------------------------------
>
>                 Key: ASTERISK-27989
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-27989
>             Project: Asterisk
>          Issue Type: Bug
>      Security Level: None
>          Components: Resources/res_pjsip_sdp_rtp, Resources/res_rtp_asterisk
>    Affects Versions: 13.22.0
>         Environment: CentOS 7 64bit
>            Reporter: Isaac McDonald
>            Severity: Minor
>              Labels: pjsip
>
> Asterisk sources RTP traffic from the most recently assigned IPv6 address rather than the address configured in the transport.
> Steps to reproduce:
> 1. Configure a server with an IPv6 address. The following example config will provide a single global IPv6 address on CentOS 7:
> Config snippet from /etc/sysconfig/network-scripts/ifcfg-eth0
> IPV6INIT="yes"
> IPV6_AUTOCONF="no"
> IPV6_DEFROUTE="yes"
> IPV6_FAILURE_FATAL="no"
> IPV6_PEERROUTES="yes"
> IPV6_PRIVACY="no"
> IPV6ADDR=2001:DB8::55/64
> IPV6_PEERDNS=no  
> IPV6_DEFAULTGW=2001:DB8::1/64
> 2. Configure a pjsip transport for the statically assigned IPv6 address
> [IPv6-udp]
> type=transport
> protocol=udp
> bind=[2001:DB8::55]:5060
> allow_reload=yes
> tos=cs3
> cos=3
> 3. Add a pjsip endpoint. Make sure you don't specify a transport with the "transport=" option.
> 4. Register a SIP client via IPv6 to the endpoint configured in step 3.
> 5. Place a test call from the IPv6 endpoint and note how everything works as expected.
> 6. Add an additional IPv6 address to eth0:
> ip -6 address add 2001:DB8::75/64 dev eth0
> 7. Start a tcpdump: tcpdump -i eth1  port not 22 -nn
> 8. Place a test call from the IPv6 endpoint and note how the SOURCE address of RTP packets, as seen in the tcpdump, is set to the IPv6 address you assigned in step 6 and NOT the IPv6 address assigned to the transport you created in step 2.
> If you specify the IPv6 transport configured in step 2 as the transport for the endpoint, the source address of RTP packets is the configured transport address. This isn't a viable option though considering that it would break the dual-stack nature of having a endpoint with no specific transport set.



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list