I’m trying to deploy UPFs in different network namespaces on the same VM, just like test_ulcl.sh. Now UERANSIM can access free5gc, but when I ping google, free5gc shows destination unreachable.
those are my config files and shell script.
smfcfg.yaml
configuration:
smfName: SMF
sbi:
scheme: http
registerIPv4: 127.0.0.2 # IP used to register to NRF
bindingIPv4: 127.0.0.2 # IP used to bind the service
port: 8000
pfcp:
addr: 10.200.200.1
userplane_information:
up_nodes:
gNB1:
type: AN
an_ip: 192.188.2.3
UPF1:
type: UPF
node_id: 10.200.200.101
sNssaiUpfInfos:
- sNssai:
sst: 1
sd: 010203
dnnUpfInfoList:
- dnn: internet
- sNssai:
sst: 1
sd: 112233
dnnUpfInfoList:
- dnn: internet
interfaces:
- interfaceType: N3
endpoints:
- 192.168.2.11
networkInstance: internet
- interfaceType: N9
endpoints:
- 10.200.200.101
networkInstance: internet
UPF2:
type: UPF
node_id: 10.200.200.102
sNssaiUpfInfos:
- sNssai:
sst: 1
sd: 010203
dnnUpfInfoList:
- dnn: internet
pools:
- cidr: 60.60.0.0/16
interfaces:
- interfaceType: N9
endpoints:
- 10.200.200.102
networkInstance: internet
UPF3:
type: UPF
node_id: 10.200.200.103
sNssaiUpfInfos:
- sNssai:
sst: 1
sd: 010203
dnnUpfInfoList:
- dnn: internet
pools:
- cidr: 60.61.0.1/32
interfaces:
- interfaceType: N9
endpoints:
- 10.200.200.103
networkInstance: internet
links:
- A: gNB1
B: UPF1
- A: UPF1
B: UPF2
- A: UPF1
B: UPF3
nrfUri: http://127.0.0.10:8000
ulcl: true
upfcfg01.yaml
The IP list of the N4 interface on this UPF (Can’t set to 0.0.0.0)
pfcp:
- addr: 10.200.200.101
gtpu:
- addr: 0.0.0.0
dnn_list:
- dnn: intranet
cidr: 60.60.0.0/16
upfcfg02.yaml
pfcp:
- addr: 10.200.200.102
gtpu:
- addr: 10.200.200.102
dnn_list:
- dnn: internet
cidr: 60.61.0.0/16
upfcfg03.yaml
pfcp:
- addr: 10.200.200.103
gtpu:
- addr: 10.200.200.103
dnn_list:
- dnn: internet
cidr: 60.62.0.0/16
run.sh
#!/usr/bin/env bash
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
sudo systemctl stop ufw
PID_LIST=()
UPFNS=“UPFns”
UPF_NUM=3
Setup bridge
sudo ip link add veth0 type veth peer name br-veth0
sudo ip link set veth0 up
sudo ip addr add 60.60.0.1/24 dev lo
sudo ip addr add 10.200.200.1/24 dev veth0
sudo ip addr add 10.200.200.2/24 dev veth0
sudo ip link add free5gc-br type bridge
sudo ip link set free5gc-br up
sudo ip link set br-veth0 up
sudo ip link set br-veth0 master free5gc-br
sudo iptables -I FORWARD 1 -j ACCEPT
sleep 1
sudo sh -c “echo 1 > /proc/sys/net/ipv4/conf/veth0/accept_local”
sudo sh -c “echo 1 > /proc/sys/net/ipv4/conf/br-veth0/accept_local”
sudo sh -c “echo 0 > /proc/sys/net/ipv4/conf/veth0/rp_filter”
sudo sh -c “echo 0 > /proc/sys/net/ipv4/conf/br-veth0/rp_filter”
sudo iptables -I FORWARD 1 -j ACCEPT
Setup network namespace
cd NFs/upf/build
for i in $(seq -f “%02g” 1 UPF_NUM); do
sudo ip netns add "{UPFNS}{i}"
sudo ip link add "veth{i}" type veth peer name “br-veth${i}”
sudo ip link set “veth${i}” netns “{UPFNS}{i}”
sudo ip link set “br-veth${i}” up
sudo ip netns exec “{UPFNS}{i}” ip addr add “60.60.0.1${i}” dev lo
sudo ip netns exec “{UPFNS}{i}” ip link set lo up
sudo ip netns exec “{UPFNS}{i}” ip addr add “10.200.200.1${i}/24” dev “veth${i}”
sudo ip netns exec “{UPFNS}{i}” ip link set “veth${i}” up
sudo ip netns exec “{UPFNS}{i}” route add default gw 10.200.200.1
sudo ip link set “br-veth${i}” master free5gc-br
sudo -E ip netns exec “{UPFNS}{i}” ./bin/free5gc-upfd -f ./config/upfcfg${i}.yaml &
PID_LIST+=(!)
sleep 1
sudo sh -c "echo 1 > /proc/sys/net/ipv4/conf/br-veth{i}/accept_local"
sudo sh -c “echo 0 > /proc/sys/net/ipv4/conf/br-veth${i}/rp_filter”
sleep 1
done
sudo sh -c “echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter”
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
sudo iptables -I FORWARD 1 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 60.60.0.0/24 ! -o upfgtp -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 60.61.0.0/24 ! -o upfgtp -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 60.62.0.0/24 ! -o upfgtp -j MASQUERADE
sleep 1
cd …/…/…
NF_LIST=“nrf amf smf udr pcf udm nssf ausf”
export GIN_MODE=release
for NF in {NF_LIST}; do
./bin/{NF} &
PID_LIST+=($!)
sleep 0.1
done