diff --git a/.env b/.env index 9dc4c9a..daef540 100644 --- a/.env +++ b/.env @@ -15,6 +15,7 @@ HSS_IP=172.22.0.3 # PCRF PCRF_IP=172.22.0.4 +PCRF_BIND_PORT=3873 # SGW SGWC_IP=172.22.0.5 @@ -23,6 +24,8 @@ SGWU_ADVERTISE_IP=172.22.0.6 # SMF SMF_IP=172.22.0.7 +SMF_DNS1=8.8.8.8 +SMF_DNS2=8.8.4.4 # UPF UPF_IP=172.22.0.8 @@ -57,15 +60,19 @@ MYSQL_IP=172.22.0.17 # PYHSS PYHSS_IP=172.22.0.18 +PYHSS_BIND_PORT=3875 # ICSCF ICSCF_IP=172.22.0.19 +ICSCF_BIND_PORT=3869 # SCSCF SCSCF_IP=172.22.0.20 +SCSCF_BIND_PORT=3870 # PCSCF PCSCF_IP=172.22.0.21 +PCSCF_BIND_PORT=3871 # SRSLTE ENB SRS_ENB_IP=172.22.0.22 diff --git a/README.md b/README.md index 7b7beae..edc34a7 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,8 @@ cd .. set -a source .env docker-compose build --no-cache +sudo ufw disable +sudo sysctl -w net.ipv4.ip_forward=1 ``` 4G deployment: diff --git a/external-ims-deploy.yaml b/external-ims-deploy.yaml new file mode 100644 index 0000000..1e02a67 --- /dev/null +++ b/external-ims-deploy.yaml @@ -0,0 +1,327 @@ +version: '3' +services: + mongo: + image: mongo:6.0 + container_name: mongo + command: --bind_ip 0.0.0.0 + env_file: + - .env + volumes: + - mongodbdata:/data/db + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "27017/udp" + - "27017/tcp" + networks: + default: + ipv4_address: ${MONGO_IP} + webui: + image: docker_open5gs + container_name: webui + depends_on: + - mongo + env_file: + - .env + environment: + - COMPONENT_NAME=webui + volumes: + - ./webui:/mnt/webui + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "3000/tcp" + ports: + - "3000:3000/tcp" + networks: + default: + ipv4_address: ${WEBUI_IP} + hss: + image: docker_open5gs + container_name: hss + env_file: + - .env + environment: + - COMPONENT_NAME=hss-1 + volumes: + - ./hss:/mnt/hss + - ./log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + depends_on: + - mongo + expose: + - "3868/tcp" + - "3868/sctp" + - "5868/tcp" + - "5868/sctp" + networks: + default: + ipv4_address: ${HSS_IP} + sgwc: + image: docker_open5gs + depends_on: + - smf + - upf + container_name: sgwc + env_file: + - .env + environment: + - COMPONENT_NAME=sgwc-1 + volumes: + - ./sgwc:/mnt/sgwc + - ./log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "2123/udp" + - "8805/udp" + networks: + default: + ipv4_address: ${SGWC_IP} + sgwu: + image: docker_open5gs + depends_on: + - smf + - upf + container_name: sgwu + env_file: + - .env + environment: + - COMPONENT_NAME=sgwu-1 + volumes: + - ./sgwu:/mnt/sgwu + - ./log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "8805/udp" + - "2152/udp" + # ports: + # - "${SGWU_ADVERTISE_IP}:2152:2152/udp" + networks: + default: + ipv4_address: ${SGWU_IP} + smf: + image: docker_open5gs + container_name: smf + env_file: + - .env + environment: + - COMPONENT_NAME=smf-1 + volumes: + - ./smf:/mnt/smf + - ./log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "3868/tcp" + - "3868/sctp" + - "5868/tcp" + - "5868/sctp" + - "8805/udp" + - "2123/udp" + - "7777/tcp" + - "9091/tcp" + networks: + default: + ipv4_address: ${SMF_IP} + upf: + image: docker_open5gs + depends_on: + - smf + container_name: upf + env_file: + - .env + environment: + - COMPONENT_NAME=upf-1 + volumes: + - ./upf:/mnt/upf + - ./log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "2152/udp" + - "8805/udp" + - "9091/tcp" + cap_add: + - NET_ADMIN + privileged: true + # sysctls: + # - net.ipv4.ip_forward=1 + # - net.ipv6.conf.all.disable_ipv6=0 + network_mode: host + mme: + image: docker_open5gs + depends_on: + - hss + - sgwc + - sgwu + - smf + - upf + - osmomsc + container_name: mme + env_file: + - .env + environment: + - COMPONENT_NAME=mme-1 + volumes: + - ./mme:/mnt/mme + - ./log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "3868/tcp" + - "3868/sctp" + - "5868/tcp" + - "5868/sctp" + - "36412/sctp" + - "2123/udp" + - "9091/tcp" + # ports: + # - "36412:36412/sctp" + networks: + default: + ipv4_address: ${MME_IP} + pcrf: + image: docker_open5gs + container_name: pcrf + env_file: + - .env + environment: + - COMPONENT_NAME=pcrf-1 + depends_on: + - mongo + volumes: + - ./pcrf:/mnt/pcrf + - ./log:/open5gs/install/var/log/open5gs + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "${PCRF_BIND_PORT}/tcp" + - "${PCRF_BIND_PORT}/sctp" + - "5868/tcp" + - "5868/sctp" + # ports: + # - "${PCRF_BIND_PORT}:${PCRF_BIND_PORT}/sctp" + # - "${PCRF_BIND_PORT}:${PCRF_BIND_PORT}/tcp" + networks: + default: + ipv4_address: ${PCRF_IP} + dns: + build: ./dns + image: docker_dns + container_name: dns + env_file: + - .env + volumes: + - ./dns:/mnt/dns + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "53/udp" + networks: + default: + ipv4_address: ${DNS_IP} + mysql: + build: ./mysql + image: docker_mysql + container_name: mysql + env_file: + - .env + volumes: + - dbdata:/var/lib/mysql + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "3306/tcp" + networks: + default: + ipv4_address: ${MYSQL_IP} + pyhss: + build: ./pyhss + image: docker_pyhss + container_name: pyhss + dns: ${DNS_IP} + volumes: + - ./pyhss:/mnt/pyhss + - ./pyhss/logs:/pyhss/log/ + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + env_file: + - .env + depends_on: + - dns + - mysql + expose: + - "${PYHSS_BIND_PORT}/tcp" + - "${PYHSS_BIND_PORT}/sctp" + ports: + # - "${PYHSS_BIND_PORT}:${PYHSS_BIND_PORT}/sctp" + # - "${PYHSS_BIND_PORT}:${PYHSS_BIND_PORT}/tcp" + - "8080:8080/tcp" + networks: + default: + ipv4_address: ${PYHSS_IP} + osmomsc: + build: ./osmomsc + image: docker_osmomsc + container_name: osmomsc + volumes: + - ./osmomsc:/mnt/osmomsc + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + env_file: + - .env + environment: + - COMPONENT_NAME=osmomsc-1 + depends_on: + - osmohlr + expose: + - "29118/sctp" + - "2775/tcp" + networks: + default: + ipv4_address: ${OSMOMSC_IP} + osmohlr: + build: ./osmohlr + image: docker_osmohlr + container_name: osmohlr + volumes: + - ./osmohlr:/mnt/osmohlr + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + env_file: + - .env + environment: + - COMPONENT_NAME=osmohlr-1 + expose: + - "4222/tcp" + networks: + default: + ipv4_address: ${OSMOHLR_IP} + metrics: + build: ./metrics + image: docker_metrics + container_name: metrics + env_file: + - .env + volumes: + - ./metrics:/mnt/metrics + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + expose: + - "9090/tcp" + ports: + - "9090:9090/tcp" + networks: + default: + ipv4_address: ${METRICS_IP} +networks: + default: + ipam: + config: + - subnet: ${TEST_NETWORK} +volumes: + mongodbdata: {} + dbdata: {} diff --git a/icscf/icscf.xml b/icscf/icscf.xml index 5fd38ef..597aa82 100644 --- a/icscf/icscf.xml +++ b/icscf/icscf.xml @@ -15,9 +15,9 @@ MaxAuthSessionTimeout="3600" > - + - + diff --git a/icscf/icscf_init.sh b/icscf/icscf_init.sh index 32a10d3..cd39250 100755 --- a/icscf/icscf_init.sh +++ b/icscf/icscf_init.sh @@ -86,6 +86,8 @@ sed -i 's|MYSQL_IP|'$MYSQL_IP'|g' /etc/kamailio_icscf/icscf.cfg sed -i 's|ICSCF_IP|'$ICSCF_IP'|g' /etc/kamailio_icscf/icscf.xml sed -i 's|IMS_DOMAIN|'$IMS_DOMAIN'|g' /etc/kamailio_icscf/icscf.xml +sed -i 's|PYHSS_BIND_PORT|'$PYHSS_BIND_PORT'|g' /etc/kamailio_icscf/icscf.xml +sed -i 's|ICSCF_BIND_PORT|'$ICSCF_BIND_PORT'|g' /etc/kamailio_icscf/icscf.xml # Sync docker time #ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone diff --git a/pcrf/pcrf.conf b/pcrf/pcrf.conf index f1306d5..356374e 100644 --- a/pcrf/pcrf.conf +++ b/pcrf/pcrf.conf @@ -29,6 +29,7 @@ Realm = "EPC_DOMAIN"; # The port this peer is listening on for incoming connections (TCP and SCTP). # Default: 3868. Use 0 to disable. #Port = 3868; +Port = PCRF_BIND_PORT; # The port this peer is listening on for incoming TLS-protected connections (TCP and SCTP). # See TLS_old_method for more information about TLS flavours. @@ -261,6 +262,6 @@ LoadExtension = "LD_LIBRARY_PATH/freeDiameter/dict_dcca_3gpp.fdx"; #ConnectPeer = "aaa.wide.ad.jp"; #ConnectPeer = "old.diameter.serv" { TcTimer = 60; TLS_old_method; No_SCTP; Port=3868; } ; ConnectPeer = "smf.EPC_DOMAIN" { ConnectTo = "SMF_IP"; Port = 3868; No_TLS; }; -ConnectPeer = "pcscf.IMS_DOMAIN" { ConnectTo = "PCSCF_IP"; Port = 3871; No_TLS; }; +ConnectPeer = "pcscf.IMS_DOMAIN" { ConnectTo = "PCSCF_IP"; Port = PCSCF_BIND_PORT; No_TLS; }; ############################################################## diff --git a/pcrf/pcrf_init.sh b/pcrf/pcrf_init.sh index 5c12e75..a276507 100755 --- a/pcrf/pcrf_init.sh +++ b/pcrf/pcrf_init.sh @@ -41,7 +41,9 @@ sed -i 's|PCRF_IP|'$PCRF_IP'|g' install/etc/freeDiameter/pcrf.conf sed -i 's|SMF_IP|'$SMF_IP'|g' install/etc/freeDiameter/pcrf.conf sed -i 's|EPC_DOMAIN|'$EPC_DOMAIN'|g' install/etc/freeDiameter/pcrf.conf sed -i 's|IMS_DOMAIN|'$IMS_DOMAIN'|g' install/etc/freeDiameter/pcrf.conf +sed -i 's|PCRF_BIND_PORT|'$PCRF_BIND_PORT'|g' install/etc/freeDiameter/pcrf.conf sed -i 's|PCSCF_IP|'$PCSCF_IP'|g' install/etc/freeDiameter/pcrf.conf +sed -i 's|PCSCF_BIND_PORT|'$PCSCF_BIND_PORT'|g' install/etc/freeDiameter/pcrf.conf sed -i 's|LD_LIBRARY_PATH|'$LD_LIBRARY_PATH'|g' install/etc/freeDiameter/pcrf.conf sed -i 's|EPC_DOMAIN|'$EPC_DOMAIN'|g' install/etc/freeDiameter/make_certs.sh diff --git a/pcscf/pcscf.xml b/pcscf/pcscf.xml index 6179e2f..73b79b5 100644 --- a/pcscf/pcscf.xml +++ b/pcscf/pcscf.xml @@ -14,9 +14,9 @@ DefaultAuthSessionTimeout="3600" MaxAuthSessionTimeout="3600" > - + - + diff --git a/pcscf/pcscf_init.sh b/pcscf/pcscf_init.sh index ef0c3bc..18e056f 100755 --- a/pcscf/pcscf_init.sh +++ b/pcscf/pcscf_init.sh @@ -76,6 +76,8 @@ sed -i 's|MYSQL_IP|'$MYSQL_IP'|g' /etc/kamailio_pcscf/pcscf.cfg sed -i 's|PCSCF_IP|'$PCSCF_IP'|g' /etc/kamailio_pcscf/pcscf.xml sed -i 's|IMS_DOMAIN|'$IMS_DOMAIN'|g' /etc/kamailio_pcscf/pcscf.xml sed -i 's|EPC_DOMAIN|'$EPC_DOMAIN'|g' /etc/kamailio_pcscf/pcscf.xml +sed -i 's|PCRF_BIND_PORT|'$PCRF_BIND_PORT'|g' /etc/kamailio_pcscf/pcscf.xml +sed -i 's|PCSCF_BIND_PORT|'$PCSCF_BIND_PORT'|g' /etc/kamailio_pcscf/pcscf.xml sed -i 's|RTPENGINE_IP|'$RTPENGINE_IP'|g' /etc/kamailio_pcscf/kamailio_pcscf.cfg diff --git a/pyhss/config.yaml b/pyhss/config.yaml index 2487ef1..49d2fd0 100644 --- a/pyhss/config.yaml +++ b/pyhss/config.yaml @@ -5,7 +5,7 @@ hss: bind_ip: ["PYHSS_IP"] #Port to listen on (Same for TCP & SCTP) - bind_port: 3868 + bind_port: PYHSS_BIND_PORT #Value to populate as the OriginHost in Diameter responses OriginHost: "hss.IMS_DOMAIN" diff --git a/pyhss/pyhss_init.sh b/pyhss/pyhss_init.sh index 6591964..86c70ea 100755 --- a/pyhss/pyhss_init.sh +++ b/pyhss/pyhss_init.sh @@ -50,6 +50,7 @@ cp /mnt/pyhss/default_ifc.xml ./ cp /mnt/pyhss/default_sh_user_data.xml ./ sed -i 's|PYHSS_IP|'$PYHSS_IP'|g' ./config.yaml +sed -i 's|PYHSS_BIND_PORT|'$PYHSS_BIND_PORT'|g' ./config.yaml sed -i 's|IMS_DOMAIN|'$IMS_DOMAIN'|g' ./config.yaml sed -i 's|OP_MCC|'$MCC'|g' ./config.yaml sed -i 's|OP_MNC|'$MNC'|g' ./config.yaml diff --git a/scscf/scscf.xml b/scscf/scscf.xml index f09f172..d282882 100644 --- a/scscf/scscf.xml +++ b/scscf/scscf.xml @@ -14,9 +14,9 @@ DefaultAuthSessionTimeout="3600" MaxAuthSessionTimeout="3600" > - + - + diff --git a/scscf/scscf_init.sh b/scscf/scscf_init.sh index a6f5c0c..2fd4a23 100755 --- a/scscf/scscf_init.sh +++ b/scscf/scscf_init.sh @@ -73,6 +73,8 @@ sed -i 's|MYSQL_IP|'$MYSQL_IP'|g' /etc/kamailio_scscf/scscf.cfg sed -i 's|SCSCF_IP|'$SCSCF_IP'|g' /etc/kamailio_scscf/scscf.xml sed -i 's|IMS_DOMAIN|'$IMS_DOMAIN'|g' /etc/kamailio_scscf/scscf.xml +sed -i 's|PYHSS_BIND_PORT|'$PYHSS_BIND_PORT'|g' /etc/kamailio_scscf/scscf.xml +sed -i 's|SCSCF_BIND_PORT|'$SCSCF_BIND_PORT'|g' /etc/kamailio_scscf/scscf.xml # Sync docker time #ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone diff --git a/smf/smf.conf b/smf/smf.conf index 2f3b3fd..3677b43 100644 --- a/smf/smf.conf +++ b/smf/smf.conf @@ -260,7 +260,7 @@ LoadExtension = "LD_LIBRARY_PATH/freeDiameter/dict_dcca_3gpp.fdx"; # Examples: #ConnectPeer = "aaa.wide.ad.jp"; #ConnectPeer = "old.diameter.serv" { TcTimer = 60; TLS_old_method; No_SCTP; Port=3868; } ; -ConnectPeer = "pcrf.EPC_DOMAIN" { ConnectTo = "PCRF_IP"; Port = 3868; No_TLS; }; +ConnectPeer = "pcrf.EPC_DOMAIN" { ConnectTo = "PCRF_IP"; Port = PCRF_BIND_PORT; No_TLS; }; ############################################################## diff --git a/smf/smf.yaml b/smf/smf.yaml index 8e4c545..41726ce 100644 --- a/smf/smf.yaml +++ b/smf/smf.yaml @@ -35,13 +35,13 @@ smf: dnn: ims dev: ogstun2 dns: - - 8.8.8.8 - - 8.8.4.4 + - SMF_DNS1 + - SMF_DNS2 - 2001:4860:4860::8888 - 2001:4860:4860::8844 p-cscf: - PCSCF_IP - mtu: 1400 + mtu: 1410 metrics: - addr: SMF_IP port: 9091 diff --git a/smf/smf_4g.yaml b/smf/smf_4g.yaml index 1108da5..0b26735 100644 --- a/smf/smf_4g.yaml +++ b/smf/smf_4g.yaml @@ -32,13 +32,13 @@ smf: dnn: ims dev: ogstun2 dns: - - 8.8.8.8 - - 8.8.4.4 + - SMF_DNS1 + - SMF_DNS2 - 2001:4860:4860::8888 - 2001:4860:4860::8844 p-cscf: - PCSCF_IP - mtu: 1400 + mtu: 1410 metrics: - addr: SMF_IP port: 9091 diff --git a/smf/smf_init.sh b/smf/smf_init.sh index a7d8af1..0105f6f 100755 --- a/smf/smf_init.sh +++ b/smf/smf_init.sh @@ -48,17 +48,18 @@ sed -i 's|SMF_IP|'$SMF_IP'|g' install/etc/open5gs/smf.yaml sed -i 's|SCP_IP|'$SCP_IP'|g' install/etc/open5gs/smf.yaml sed -i 's|NRF_IP|'$NRF_IP'|g' install/etc/open5gs/smf.yaml sed -i 's|UPF_IP|'$UPF_IP'|g' install/etc/open5gs/smf.yaml +sed -i 's|SMF_DNS1|'$SMF_DNS1'|g' install/etc/open5gs/smf.yaml +sed -i 's|SMF_DNS2|'$SMF_DNS2'|g' install/etc/open5gs/smf.yaml sed -i 's|UE_IPV4_INTERNET_TUN_IP|'$UE_IPV4_INTERNET_TUN_IP'|g' install/etc/open5gs/smf.yaml sed -i 's|UE_IPV4_IMS_TUN_IP|'$UE_IPV4_IMS_TUN_IP'|g' install/etc/open5gs/smf.yaml sed -i 's|PCSCF_IP|'$PCSCF_IP'|g' install/etc/open5gs/smf.yaml sed -i 's|SMF_IP|'$SMF_IP'|g' install/etc/freeDiameter/smf.conf sed -i 's|PCRF_IP|'$PCRF_IP'|g' install/etc/freeDiameter/smf.conf sed -i 's|EPC_DOMAIN|'$EPC_DOMAIN'|g' install/etc/freeDiameter/smf.conf +sed -i 's|PCRF_BIND_PORT|'$PCRF_BIND_PORT'|g' install/etc/freeDiameter/smf.conf sed -i 's|LD_LIBRARY_PATH|'$LD_LIBRARY_PATH'|g' install/etc/freeDiameter/smf.conf sed -i 's|EPC_DOMAIN|'$EPC_DOMAIN'|g' install/etc/freeDiameter/make_certs.sh - - # Generate TLS certificates ./install/etc/freeDiameter/make_certs.sh install/etc/freeDiameter diff --git a/srslte/enb.conf b/srslte/enb.conf index 1aa9c47..d370fb4 100644 --- a/srslte/enb.conf +++ b/srslte/enb.conf @@ -74,7 +74,7 @@ rx_gain = 40 #device_name = lime #device_args = index=0,cal=all,refclk=10e6 #device_args = index=0,cal=none,refclk=10e6 -#device_args = clock=external +device_args = clock=external #device_name = auto