Project

General

Profile

OsmoBSCNAT » History » Revision 11

Revision 10 (Anonymous, 02/19/2016 10:48 PM) → Revision 11/17 (Anonymous, 02/19/2016 10:48 PM)

 
 h2. == BSC NAT/MUX 



 h3. == 

 === Introduction 

 === 
 The [[OpenBSC]] OpenBSC NAT is masquerading multiple BSCs behind one. It listens for incoming BSCs on 
 port 5000 and connects to a specified MSC. It will forward Paging Requests and MGCP messgaes 
 to the right BSC (if it is connected). Each incoming SCCP connection gets patched with a different 
 Source Reference to avoid any collision between the different BSCs. 

 To the network the NAT looks like a real BSC, to the BSC the NAT looks like almost a real MSC. One 
 difference is that MGCP messages are not send via UDP but inside the IPA protocol to avoid 
 any issues with firewalls and such. 

 <pre> 
 <code class="graphviz"> 
 {{{ 
 #!graphviz 
 digraph G { 
   rankdir=LR; 
   nanobts1->OpenBSC1 [ label="Abis/IP" ]; 
   nanobts2->OpenBSC1 [ label="Abis/IP" ]; 
   nanobts3->OpenBSC2 [ label="Abis/IP" ]; 
   nanobts4->OpenBSC2 [ label="Abis/IP" ]; 
   BSC1->cellmgr_ng1 [label="A/MTP" ]; 
   [[OpenBSC]]1->bsc_nat OpenBSC1->bsc_nat [ label="A/IP" ]; 
   [[OpenBSC]]2->bsc_nat OpenBSC2->bsc_nat [ label="A/IP" ]; 
   cellmgr_ng1->bsc_nat [ label = "A/IP" ]; 
   bsc_nat->MSC        [ label="A/IP" ]; 
   nanobts2 [ label = "BTS 1" ]; 
   nanobts1 [ label = "BTS 2" ]; 
   nanobts3 [ label = "BTS 3" ]; 
   nanobts4 [ label = "BTS 4" ]; 
   BSC1 [ label = "Traditional BTS/BSC" ]; 
   [[OpenBSC]]1 OpenBSC1 [ label = "OpenBSC 1" ]; 
   [[OpenBSC]]2 OpenBSC2 [ label = "OpenBSC 2" ]; 
   cellmgr_ng1 [ label = "Cellmgr 1" ]; 
 } 
 </code></pre> 


 h3. }}} 

 === Concept 

 === 
 The bsc_nat is useful when the BSCs of a GSM network are not in the same IP network. The BSC 
 might be behind a firewall, or the IP is changing, also the ports might be masqueraded. The bsc_nat 
 is tunneling the MGCP protocol through the A/IP link to penetrate firewalls and UDP port discovery 
 for RTP based audio. Being the central part to the GSM network it provides detailed statistics and 
 other features. 


 h3. 

 === Features 



 h4. === 

 ==== IMSI based access control 

 ==== 
 The bsc_nat provides a per MSC and per BSC IMSI filter. The filter works during the Location Updating 
 Procedure, the CM Service Request and other places. It allows to exclude IMSIs from certain locations. 


 h4. 

 ==== Number rewriting 

 ==== 
 The bsc_nat provides a way to rewrite destination numbers based on MNC and MCC of the subscriber. 


 h4. 

 ==== USSD bypass 

 ==== 
 The bsc_nat provides a way to forward USSD requests for certain number ranges for subscribers based 
 on the MNC and MCC to an external process. 


 h4. 

 ==== Detailed statistics 

 ==== 
 The bsc_nat provides detailed statistics about the traffic of each BSC, the reason for opening the 
 connection,    the number of active connections. 


 h4. 

 ==== NAT traversal 

 ==== 
 The bsc_nat tunnels MGCP through the A/IP link, the BSC will send a beacon from the source RTP port 
 to make the external port visible to the NAT. 


 h3. 

 === Design === 
  
 ==== USSD Bypass ==== 
 We want to implement certain USSD messages ourselves, the MSC does not provide an extension 
 API so it must be done inside the NAT. On ther other hand we do not want to have complicated code 
 inside the NAT, the development of new features should not require a restart of the NAT. This means 
 we will have a simple bypass that detects USSD messages that we want to handle and then forwards 
 them to an external process. To begin with we will have a static decision making, which will be turned 
 into more dynamic pattern matching. 



 h5. 


 ===== Implementation in the NAT 

 ===== 
 The difficulty is the management of the SCCP Connection. In case of a USSD operation as part of a 
 SMS or as a voice call, we should hope that sending the response arrives before the MSC is sending 
 the connection release. If the Connection is created with the intention of USSD we will have to take 
 over the connection and close it on the MSC side. It might show that this approach is tricky and we 
 might need better handling on the connection close. 

 

  * -Keep ~~Keep track of the IMSI of every SCCP Connection. The increase in storage size is acceptable right now. We have not started to tune anything in the NAT anyway.- anyway.~~ (done) 
 
  * -Keep ~~Keep track of the Connection Type, identify SS requests in the CM Service Request.- Request.~~ (done) 
 
  * Listen on a port for incoming USSD Bypass connections. We will use the IPA protocol, with one extra stream identifier for control messages. 
 
  * Identify USSD request to be forwarded to the MSC, send the IMSI and SCCP references to the bridge so it can start doing its job. 

Add picture from clipboard (Maximum size: 48.8 MB)