La Fibre
Datacenter et équipements réseaux => Routeurs => Remplacer la box SFR par un routeur => Discussion démarrée par: zorglub le 21 juin 2019 à 16:29:17
-
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 box
Comme 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 BOX
Je 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 Siproxd
Avant 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 Siproxd
Pour 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 :-)
-
Bon, je ne sais pas par quel effet magique, mais hier soir j'ai tout laissé en plan et ce matin en voulant recommencer mes tests, je me suis rendu compte que la téléphonie marchait.
Je vais donc faire quelques tests complèmentaires pour voir si je peux utiliser les noms de domaines dans siproxd au lieu de fixer des adresses IP en dur.
Voici la conf finale qui marche de mon côté depuis ce matin :
siproxd.conf
if_inbound = re1
if_outbound = re0
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
## trappes.p-cscf.sfr.net <-> 77.136.6.77
outbound_domain_host = 77.136.6.77
outbound_domain_port = 5062
plugindir=/usr/local/lib/siproxd/
index.php utilisé pour le patch des URLs de config de la REDBox
<?php
$currentHost = 'firewall.localdomain.intra';
// devrait être dynamique à tester
// $currentHost = exec('hostname');
if (isset($_GET['ip_dhcp'])) {
$_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>'.$currentHost.'</proxy>', $data);
curl_close($ch);
header('Content-Length: '.strlen($data));
header('Content-Type: application/xml');
echo $data;
-
Pour ceux que ça intéressent, tout marche bien systématiquement à condition de bien démarrer dans l'ordre :
1. Le routeur pour que siproxd fonctionne correctement
2. La box pour qu'elle puisse récupérer le bon paramétrage
Lors de mes différents tests, j'ai du me prendre les pied dans le tapis car la box devait être en fallback sur la configuration d'origine.....
-
Hello, j'arrivais à passer des appels muets en suivant cette config, avec l'inscription de mon numéro de téléphone dans "current registrations".
Maintenant lorsque la NB s'enregistre sur siproxd, j'ai cette même erreur 408 Request Timeout. Malgré cela, la led du téléphone s'allume. Je ne pense pas avoir modifié grand chose entre temps, j'utilise actuellement cette même configuration. Il persiste ceci dans current registrations : (ce n'a pas le format d'un numéro)
****:0:15635xxxxx
Lorsque je tente un appel depuis le fixe, j'ai un essai d'enregistrement en boucle, qui se solde par la même erreur. Seul moyen de l'interrompre : débrancher le RJ45 de mon wireshark.
Une idée?
D'ailleurs j'ai relevé dans la conf de /voip2.xml ceci :
<rtp>
<port-min>
35500
</port-min>
<port-max>
35599
</port-max>
</rtp>
-
J'avance : j'arrive à m'enregistrer maintenant que j'ai résolu sur le dns intégré au firewall le domaine ims.mnc010.mcc208.3gppnetwork.org. Ne sachant pas quoi mettre, j'ai défini en 127.0.0.1. Siproxd semble ne pas accepter un domaine non résolvable.
Le soucis maintenant, c'est qu'un appel vers l'extérieur renvoie une erreur 407 Proxy Authentification Required... :-[
Edit : bon je n'y comprend rien mais ça fonctionne! je vais faire un topic dédié pour détailler toute la configuration nécessaire.