Advanced Start¶
对应于官方文档的 Build free5GC from scratch
实验配置¶
- 宿主机: Ubuntu24.04LTS
- 试验平台: 使用 VMware Workstation 创设三台虚拟机, Ubuntu 20.04 Server
- ubuntu:
ubuntu@ubuntu
- 备用
- free5gc:
free5gc@free5gc
- free5gc 移动网络仿真器
- ueransim:
ueransim@ueransim
- ueransim 模拟器框架
- ubuntu:
网络配置:
- ubuntu:
- ens34: 动态IP,没自己绑定,
172.16.122.129
- 已翻墙:
~/.config/mihomo
下运行./clash-linux
ping www.baidu.com/1.1.1.1/8.8.8.8
都可以- 已配置SSH,跟github互联
- ens34: 动态IP,没自己绑定,
- free5gc:
- ens34: 静态IP,自己设定,
172.16.122.131
- 已翻墙:
~/.config/mihomo
下运行 `./clash-linux ping www.baidu.com/1.1.1.1/8.8.8.8
都可以- 已配置SSH,跟github互联
- ens34: 静态IP,自己设定,
- ueransim:
- ens34: 静态IP,自己设定,
172.16.122.133
- 已翻墙:
~/.config/mihomo
下运行 `./clash-linux ping www.baidu.com/1.1.1.1/8.8.8.8
都可以- 已配置SSH,跟github互联
- ens34: 静态IP,自己设定,
连接方式: 在宿主机新开3个CLI窗口
- Window 1:
- Window 2:
- Window 3:
实验流程¶
参考的是: CSDN 传送门
Tip
笔者已经很多年没看CSDN这种小破站了,但是这篇写的确实还不错
笔者的主体实验流程根据上述CSDN文档,但也存在一些问题,因此重新梳理一下:
配置实验机器¶
-
如何配置机器:
-
网络配置:
- 按照上面“实验配置”中的网络参数:
- free5gc: host-only interface = ens34, 静态IP, 自行设定
- ueransim: host-only interface = ens34, 静态IP, 自行设定
- 确保:
- free5gc 和 ueransim 能够被宿主机终端以SSH访问, 测试:
Bash 1 2
ssh [email protected] ssh [email protected]
- free5gc 和 ueransim 之间可以互相ping通
Bash 1 2 3 4
# 在 [email protected] ping 172.16.122.133 # 在 [email protected] ping 172.16.122.131
- free5gc 和 ueransim 能够被宿主机终端以SSH访问, 测试:
- 按照上面“实验配置”中的网络参数:
过程解析与汇总¶
Danger
这一部分是笔者的“踩坑帖”,类似于cheat sheet
还包含了常见问题的处理方式
(1) 如何改变一台设备的主机名
Bash | |
---|---|
1 2 |
|
(2) 如何改变端口的IP
人为设定成静态IP
Bash | |
---|---|
1 2 |
|
改变内容, 举个例子:
Bash | |
---|---|
1 2 3 4 5 6 7 8 9 |
|
让配置生效:
Bash | |
---|---|
1 2 |
|
随后检查:
Bash | |
---|---|
1 2 |
|
(3) 确定 kernel 版本:
Bash | |
---|---|
1 |
|
(4) go 的常见报错处理:
网络资源获取失败
package golang.org/x/sys/unix: unrecognized import path "golang.org/x/sys/unix" (https fetch: Get https://golang.org/x/sys/unix?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
通常是由于网络连接问题导致无法访问 golang.org
的资源。这种情况在某些网络环境中较为常见,尤其是在无法直接访问 Google 服务的地区
解决方式 1:
Bash | |
---|---|
1 2 3 4 5 6 7 8 |
|
Why 1 works
这种方法绕过了 Go 在网络上自动下载依赖包的机制,而是通过 Git 直接克隆仓库到本地的 $GOPATH/src
目录中。这样做可以避免网络连接问题和 DNS 解析问题
为什么需要放在 $GOPATH/src/golang.org/x
目录中:
Go 的包管理机制依赖于 包的导入路径与文件系统路径之间的对应 。例如,包 golang.org/x/sys
的源代码应该位于 $GOPATH/src/golang.org/x/sys
目录中
通过将克隆的仓库放在正确的目录结构中,Go 可以正确地找到并使用这些包
解决方式 2:
Bash | |
---|---|
1 2 3 4 5 |
|
Why 2 works
- 设置
GO111MODULE=on
,确保 Go 使用 Go Modules 来管理依赖包。这是从 Go 1.11 开始引入的包管理系统,旨在更好地管理项目依赖 - 设置
GOPROXY=https://goproxy.cn
指定了一个代理服务器 (go的国内CDN) 来下载依赖包, 国内可访问; 可以绕过可能存在的网络限制或 DNS 解析问题,确保依赖包可以被成功下载
free5gc主机网络设置
Bash | |
---|---|
1 2 3 4 |
|
- 上述配置每次关机后都会自动失去效果, 因此每当free5gc开机一次,就要单独运行上述指令
[DATA_NETWORK_INTERFACE]
指的是可访问外部网络的接口, 在我这里指的是ens33
(5) ping 的接口
Bash | |
---|---|
1 2 3 4 5 6 |
|
使用方式¶
本地终端SSH连接¶
- free5gc 开机并登陆
- 宿主机终端SSH连接上:
ssh [email protected]
- 宿主机终端SSH连接上:
- ueransim 开机并登陆
- 宿主机终端SSH连接上:
ssh [email protected]
- 宿主机终端SSH连接上:
free5gc的启动项¶
Bash | |
---|---|
1 2 3 4 5 6 7 8 9 10 |
|
Danger
- 上述配置每次关机后都会自动失去效果, 因此每当free5gc开机一次,就要单独运行上述指令
[DATA_NETWORK_INTERFACE]
指的是可访问外部网络的接口, 在我这里指的是ens33
free5gc的用前测试¶
(1) 检测配置信息是否被原文件覆盖: 如有覆盖,改成自己设备信息
详见 CSDN 中的 free5gc 网络参数配置
Bash | |
---|---|
1 2 3 |
|
(2) 执行单元测试:
Bash | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
(3) 两个设备相互ping:
Bash | |
---|---|
1 2 3 4 |
|
后续实验¶
完结撒花🎉