Running 3G Network with OpenBTS-UMTS

NOTE: This page is outdated, the OpenBTS project is abandoned. Please, use Osmocom software which is actively maintained and has reliable UmTRX support.

This document will provide an insight on how to run OpenBTS-UMTS with UmTRX. The installation was tested on Ubuntu 14.04 and assumes that user already has installed UHD and UmTRX module. The details of the UHD and UmTRX installation may be found there:http://umtrx.org/hardware/driver/. Please be advised, that unlike GSM, you can’t have open registration and thus you can’t just use any random SIM card – you need a programmable SIM-card.

You may find the full version of the article with UMTS explanation in our blog:https://fairwaves.co/blog/openbts-umts-3g-umtrx/

1. Dependencies Installation

To install the necessary dependencies, which required to run OpenBTS-UMTS software, run:

$ sudo apt-get install libreadline6 libreadline6-dev libosip2-dev

To install ASN.1 C compiler that turns the formal ASN.1 specifications into the C code:

$ git clone https://github.com/vlm/asn1c.git
$ cd asn1c
$ git checkout 80b3752c8093251a1ef924097e9894404af2d304
$ ./configure
$ make
$ sudo make install

OpenBTS uses the coredumper shared library to produce meaningful debugging information if OpenBTS crashes:

$ git clone https://github.com/RangeNetworks/libcoredumper.git
$ cd libcoredumper
$ sudo ./build.sh
$sudo dpkg -i libcoredumper1_1.2.1-1_amd64.deb libcoredumper-dev_1.2.1-1_amd64.deb

2. OpenBTS-UMTS Installation

To install OpenBTS-UMTS itself:

$ git clone -b fairwaves/umtrx https://github.com/fairwaves/OpenBTS-UMTS
$ cd OpenBTS-UMTS
$ git submodule init
$ git submodule update
$ sudo NodeManager/install_libzmq.sh
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

3. OpenBTS-UMTS Configuration

To setup OpenBTS-UMTS, it may be needed to modify the settings such as ARFCN, DNS, Firewall. Navigate to ~/OpenBTS-UMTS/apps folder and open OpenBTS-UMTS.example.sql file with the preferable text editor. You may need to edit following options:

  • ‘GGSN.DNS’ set to ’8.8.8.8′ to enable Google DNS.
  • ‘GGSN.Firewall.Enable’ set to ’0′ to disable Firewall.
  • ‘UMTS.Radio.Band’ – set the band you are going to use. Select from 850, 900, 1700, 1800, 1900 or 2100.
  • ‘UMTS.Radio.C0′ – set the UARFCN. Range of valid values depend upon the selected operating band. Please, ensure that you are using free operating band.

To create folders and working database:

$ sudo mkdir /var/log/OpenBTS-UMTS
$ cd /etc/OpenBTS
$ sudo sqlite3 /etc/OpenBTS/OpenBTS-UMTS.db “.read OpenBTS-UMTS.example.sql”
$ sudo cp TransceiverUHD/transceiver ~/OpenBTS-UMTS/
$ sudo cp TransceiverUHD/transceiver apps

It’s necessary to setup forwarding in iptables to properly forward data between devices, host machine, and the Internet:

$ sudo su
$ iptables -t nat -A POSTROUTING -j MASQUERADE -o eth0
$ echo 1 > /proc/sys/net/ipv4/ip_forward
$ exit

If you have Internet connection through the another interface (for example, Wi-Fi), you need to change eth0 to the applicable one (i.e., wlan0). Please note, that you need to setup forwarding in iptables every time after you computer rebooted.

4. Subscriber Registry

It’s important to install Subscriber Registry API and SIP Authentication Server to be able to launch OpenBTS-UMTS. Subscriber Registry controls database of subscriber information and in fact works as HLR (Home Location Registry):

$ git clone https://github.com/RangeNetworks/subscriberRegistry.git
$ cd subscriberRegistry
$ git submodule init
$ git submodule update
$ sudo NodeManager/install_libzmq.sh
$ autoreconf -i
$ ./configure
$ make
$ sudo make install
$ sudo mkdir /var/lib/asterisk/
$ sudo mkdir /var/lib/asterisk/sqlite3dir/
$ sudo cp apps/comp128 ~/OpenBTS-UMTS/
$ sudo cp apps/comp128 ~/OpenBTS-UMTS/apps/
$ sudo cp apps/comp128 /OpenBTS

5. OpenBTS-UMTS Launch

To run OpenBTS-UMTS and Subscriber Registry:

$ cd OpenBTS-UMTS/apps
$ sudo ./OpenBTS-UMTS
$ cd subscriberRegistry/apps
$ sudo ./sipauthserve

To add the subscriber to the registry, you need to know IMSI and K_i value of your programmable SIM card. There are two common ways to get the values. The only way to use SIMs from another provider is to obtain the K_i through a roaming interface to the provider’s HLR/HSS. The second way is to buy test SIM-card and flash it using the programmator and pysim utility (http://cgit.osmocom.org/pysim/). Navigate to ~/subscriberRegistry/NodeManager/ and execute:

$ sudo ./nmcli.py sipauthserve subscribers create “name” imsi msisdn ki

Values imsi, msisdn and ki should be taken from your SIM-card.

Now, connect your phone to the network and test 3G. That’s it!