Bonjour,
j'ai parcouru le forum dans tous les sens et j'ai trouvé plein d'informations concernant la mise en place de siproxd pour que la box puisse être sur mon réseau local et que je puisse utiliser le téléphone. Malheureusement, je dois m'y prendre comme un manche parce que je n'y arrive pas.
Afin que quelqu'un puisse m'aider, voici ce que je peux vous dire :
- Routeur : OPNSense
- Configuration IPv4 : OK
- Configuration IPv6 : KO (mais c'est aussi KO avec la BOX fournie lorsqu'elle est directement branchée sur l'ONT
- Téléphonie : KO (impossible d'èmettre ou de recevoir des appels) mais c'est OK d'après la BOX
1. Retraitement des appels effectués par la boxComme expliqué un peu partout, j'ai mis en place un serveur nginx et script PHP qui permettent de patcher les appels pour que la BOX et l'infra puissent discuter
Les appels de la BOX sont forwardés sur un serveur nginx qui relaye la requête une fois patchée à l'infra
Au cas ou, voici le code PHP qui fait 99% du boulot
<?php
if (isset($_GET['ip_dhcp'])) {
$_GET['ip_dhcp'] = 'IP.PU.BLI.QUE';
// au lieu de hardcoder l'IP, il serait mieux de faire un appel systeme
// $_GET['ip_dhcp'] = exec('ifconfig re0 | grep \'inet \' | cut -d\' \' -f2');
}
$_SERVER['DOCUMENT_URI'] = str_replace('/index.php', '', $_SERVER['DOCUMENT_URI']);
$parameters = http_build_query($_GET);
$url = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].'/'.trim($_SERVER['DOCUMENT_URI'], '/?') .'?'.$parameters;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$data = preg_replace('/<proxy([^>]+)>([^<]+)<\/proxy>/', '<proxy$1>mon.serveur.proxy</proxy>', $data);
curl_close($ch);
header('Content-Length: '.strlen($data));
header('Content-Type: application/xml');
echo $data;
2. Préparation de la partie DNS pour la BOXJe rajoute que j'ai aussi configuré la partie DNS (au niveau de UnboundDNS) pour que la box puisse faire la recherche du proxy :
local-data: "_sip._udp.mon.serveur.proxy. 180 IN SRV 10 60 5060 mon.serveur.proxy."
et cette partie semble fonctionner car d'après ce que j'arrive à voir des traces tcpdump, je n'ai plus de problème d'initialisation de la BOX.
3. Récupération des infos pour SiproxdAvant de mettre en place Siproxd, j'ai recherché les proxy utilisés par RED/SFR
# host -t SRV _sip._udp.residential.p-cscf.sfr.net
_sip._udp.residential.p-cscf.sfr.net has SRV record 10 0 5062 corbas.p-cscf.sfr.net.
_sip._udp.residential.p-cscf.sfr.net has SRV record 10 0 5062 trappes.p-cscf.sfr.net.
_sip._udp.residential.p-cscf.sfr.net has SRV record 10 0 5062 mitry.p-cscf.sfr.net.
4. Configuration SiproxdPour faire simple, et éviter de mettre les interfaces d'OPNSense, voici le fichier de config pour Siproxd qui est généré :
## re1 : interface LAN
if_inbound = re1
## re0 : interface WAN
if_outbound = re0
#hosts_allow_reg = 192.168.1.8/24
#hosts_allow_sip = 123.45.0.0/16,123.46.0.0/16
#hosts_deny_sip = 10.0.0.0/8,11.0.0.0/8
sip_listen_port = 5060
daemonize = 1
silence_log = 3
registration_file = /var/lib/siproxd/siproxd_registrations
autosave_registrations = 300
pid_file = /var/run/siproxd/siproxd.pid
rtp_proxy_enable = 1
rtp_port_low = 7070
rtp_port_high = 7089
rtp_timeout = 300
rtp_dscp = 46
sip_dscp = 46
rtp_input_dejitter = 0
rtp_output_dejitter = 0
tcp_timeout = 600
tcp_connect_timeout = 500
tcp_keepalive = 20
debug_level = 0x00000000
debug_port = 0
use_rport = 0
outbound_domain_name = ims.mnc010.mcc208.3gppnetwork.org
## j'ai essayé avec les 3 adresses IP suivantes :
## mitry.p-cscf.sfr.net : 77.136.6.21
## trappes.p-cscf.sfr.net : 77.136.6.69
## corbas.p-cscf.sfr.net : 77.136.7.21
outbound_domain_host = 77.136.6.77
outbound_domain_port = 5062
plugindir=/usr/local/lib/siproxd/
J'ai bien évidemment tout redémarré (la partie firewall et la partie BOX) avant de faire des tests.
Voici les traces que je récupère qui semblent poser problème (j'ai bien évidemment masqué les adresse MAC et les numéros de téléphone)
Frame 5: 1021 bytes on wire (8168 bits), 1021 bytes captured (8168 bits)
Ethernet II, Src: Sfr_XX:XX:XX (60:35:XX:XX:XX:XX), Dst: PcEngine_YY:YY:YY (00:0d:YY:YY:YY:YY)
Internet Protocol Version 4, Src: 192.168.1.250, Dst: 192.168.1.1
User Datagram Protocol, Src Port: 5060, Dst Port: 5060
Session Initiation Protocol (INVITE)
Request-Line: INVITE sip:06xxxxxxxx@ims.mnc010.mcc208.3gppnetwork.org;user=phone SIP/2.0
Method: INVITE
Request-URI: sip:06xxxxxxxx@ims.mnc010.mcc208.3gppnetwork.org;user=phone
Request-URI User Part: 06xxxxxxxx
Request-URI Host Part: ims.mnc010.mcc208.3gppnetwork.org
[Resent Packet: False]
Message Header
Via: SIP/2.0/UDP 192.168.1.250:5060;branch=z9hG4bKaf844e7
Transport: UDP
Sent-by Address: 192.168.1.250
Sent-by port: 5060
Branch: z9hG4bKaf844e7
From: "+331yyyyyyyy" <sip:+331yyyyyyyy@ims.mnc010.mcc208.3gppnetwork.org;user=phone>;tag=53128A7
SIP Display info: "+331yyyyyyyy"
SIP from address: sip:+331yyyyyyyy@ims.mnc010.mcc208.3gppnetwork.org;user=phone
SIP from address User Part: +331yyyyyyyy
E.164 number (MSISDN): 331yyyyyyyy
Country Code: France (33)
SIP from address Host Part: ims.mnc010.mcc208.3gppnetwork.org
SIP From URI parameter: user=phone
SIP from tag: 53128A7
To: <sip:06xxxxxxxx@ims.mnc010.mcc208.3gppnetwork.org;user=phone>
SIP to address: sip:06xxxxxxxx@ims.mnc010.mcc208.3gppnetwork.org;user=phone
SIP to address User Part: 06xxxxxxxx
SIP to address Host Part: ims.mnc010.mcc208.3gppnetwork.org
SIP To URI parameter: user=phone
User-Agent: otherIAD - rNB6VAC-XXXXXXXXXXXXXXX
P-Preferred-Identity: <sip:+331yyyyyyyy@ims.mnc010.mcc208.3gppnetwork.org;user=phone>
SIP PPI Address: sip:+331yyyyyyyy@ims.mnc010.mcc208.3gppnetwork.org;user=phone
SIP PPI User Part: +331yyyyyyyy
E.164 number (MSISDN): 331yyyyyyyy
Country Code: France (33)
SIP PPI Host Part: ims.mnc010.mcc208.3gppnetwork.org
SIP PPI URI parameter: user=phone
Call-ID: 1307B4D0B8EEAD2@192.168.1.250
[Generated Call-ID: 1307B4D0B8EEAD2@192.168.1.250]
CSeq: 1 INVITE
Sequence Number: 1
Method: INVITE
Allow: INVITE, ACK, BYE, CANCEL, REFER, NOTIFY, SUBSCRIBE, REGISTER, UPDATE
Max-Forwards: 70
Contact: <sip:+331yyyyyyyy@192.168.1.250:5060;user=phone>
Contact URI: sip:+331yyyyyyyy@192.168.1.250:5060;user=phone
Contact URI User Part: +331yyyyyyyy
E.164 number (MSISDN): 331yyyyyyyy
Country Code: France (33)
Contact URI Host Part: 192.168.1.250
Contact URI Host Port: 5060
Contact URI parameter: user=phone
Content-Type: application/sdp
Content-Length: 277
Message Body
Session Description Protocol
Session Description Protocol Version (v): 0
Owner/Creator, Session Id (o): +331yyyyyyyy 1561063311 1561063312 IN IP4 192.168.1.250
Owner Username: +331yyyyyyyy
Session ID: 1561063311
Session Version: 1561063312
Owner Network Type: IN
Owner Address Type: IP4
Owner Address: 192.168.1.250
Session Name (s): -
Connection Information (c): IN IP4 192.168.1.250
Connection Network Type: IN
Connection Address Type: IP4
Connection Address: 192.168.1.250
Time Description, active time (t): 0 0
Session Start Time: 0
Session Stop Time: 0
Media Description, name and address (m): audio 35560 RTP/AVP 8 0 18 101
Media Type: audio
Media Port: 35560
Media Protocol: RTP/AVP
Media Format: ITU-T G.711 PCMA
Media Format: ITU-T G.711 PCMU
Media Format: ITU-T G.729
Media Format: DynamicRTP-Type-101
Media Attribute (a): rtpmap:8 PCMA/8000
Media Attribute Fieldname: rtpmap
Media Format: 8
MIME Type: PCMA
Sample Rate: 8000
Media Attribute (a): rtpmap:0 PCMU/8000
Media Attribute Fieldname: rtpmap
Media Format: 0
MIME Type: PCMU
Sample Rate: 8000
Media Attribute (a): rtpmap:18 G729/8000
Media Attribute Fieldname: rtpmap
Media Format: 18
MIME Type: G729
Sample Rate: 8000
Media Attribute (a): rtpmap:101 telephone-event/8000
Media Attribute Fieldname: rtpmap
Media Format: 101
MIME Type: telephone-event
Sample Rate: 8000
Media Attribute (a): fmtp:101 0-11
Media Attribute Fieldname: fmtp
Media Format: 101 [telephone-event]
Media format specific parameters: 0-11
Media Attribute (a): sendrecv
Media Attribute (a): ptime:20
Media Attribute Fieldname: ptime
Media Attribute Value: 20
[Generated Call-ID: 1307B4D0B8EEAD2@192.168.1.250]
Frame 6: 372 bytes on wire (2976 bits), 372 bytes captured (2976 bits)
Ethernet II, Src: PcEngine_YY:YY:YY (00:0d:YY:YY:YY:YY), Dst: Sfr_XX:XX:XX (60:35:XX:XX:XX:XX)
Internet Protocol Version 4, Src: 192.168.1.1, Dst: 192.168.1.250
User Datagram Protocol, Src Port: 5060, Dst Port: 5060
Session Initiation Protocol (408)
Status-Line: SIP/2.0 408 Request Timeout
Status-Code: 408
[Resent Packet: False]
[Request Frame: 5]
[Response Time (ms): 0]
Message Header
Via: SIP/2.0/UDP 192.168.1.250:5060;branch=z9hG4bKaf844e7
Transport: UDP
Sent-by Address: 192.168.1.250
Sent-by port: 5060
Branch: z9hG4bKaf844e7
From: "+331yyyyyyyy" <sip:+331yyyyyyyy@ims.mnc010.mcc208.3gppnetwork.org;user=phone>;tag=53128A7
SIP Display info: "+331yyyyyyyy"
SIP from address: sip:+331yyyyyyyy@ims.mnc010.mcc208.3gppnetwork.org;user=phone
SIP from address User Part: +331yyyyyyyy
E.164 number (MSISDN): 331yyyyyyyy
Country Code: France (33)
SIP from address Host Part: ims.mnc010.mcc208.3gppnetwork.org
SIP From URI parameter: user=phone
SIP from tag: 53128A7
To: <sip:06xxxxxxxx@ims.mnc010.mcc208.3gppnetwork.org;user=phone>
SIP to address: sip:06xxxxxxxx@ims.mnc010.mcc208.3gppnetwork.org;user=phone
SIP to address User Part: 06xxxxxxxx
SIP to address Host Part: ims.mnc010.mcc208.3gppnetwork.org
SIP To URI parameter: user=phone
Call-ID: 1307B4D0B8EEAD2@192.168.1.250
[Generated Call-ID: 1307B4D0B8EEAD2@192.168.1.250]
CSeq: 1 INVITE
Sequence Number: 1
Method: INVITE
Content-Length: 0
Comme vous pouvez le voir, j'ai une erreur
SIP/2.0 408 Request Timeout qui revient toujours. Cette erreur est présente dans tous les cas.
Une dernière précision, je n'ai aucune règle de filtrage spécifique sur le firewall, ni aucune redirection de port (mais à priori, si j'ai bien compris, ce n'est pas utile).
Si quelqu'un a une piste (règle de NAT, règle de firewalling, traçage pour mieux identifier le problème, ...) je suis preneur car la je sèche complètement et surtout, je ne sais plus par quel bout prendre le problème.
Merci à tous
PS: si je n'ai pas été assez clair, ou si je n'ai pas fourni les informations suffisantes pour m'aider, n'hésitez pas :-)