本教程将指导你使用 Multipass 搭建一个 Gateway-Server-Client 架构的虚拟网络环境,实现网关转发通信的场景。
- Multipass - 跨平台虚拟机管理工具
- 宿主机至少 8GB 内存和 50GB 可用磁盘空间
- 支持虚拟化的操作系统 (Windows/macOS/Linux)
macOS:
brew install --cask multipass
Ubuntu/Debian:
sudo snap install multipass
Windows: 下载并安装 Multipass Windows Installer
[Client VM] ──> [Gateway VM] ──> [Server VM]
192.168.69.24 192.168.69.22 192.168.69.23
↓
IP 转发 + NAT
- Client (192.168.69.24): 客户端,发起请求
- Gateway (192.168.69.22): 网关,负责转发流量
- Server (192.168.69.23): 服务器,提供 HTTP 服务
如果你只想快速搭建环境,可以运行我们提供的自动化脚本:
# 下载配置脚本
curl -O https://raw.githubusercontent.com/your-repo/network-lab/main/setup_network.sh
# 运行配置脚本
chmod +x setup_network.sh
./setup_network.sh
# 运行测试脚本
./test_network.sh
创建三台 Ubuntu 虚拟机:
# 创建 Gateway VM
multipass launch --name gateway --cpus 2 --memory 4G --disk 10G
# 创建 Server VM
multipass launch --name server --cpus 2 --memory 4G --disk 10G
# 创建 Client VM
multipass launch --name client --cpus 2 --memory 4G --disk 10G
验证虚拟机状态:
multipass list
预期输出:
Name State IPv4 Image
client Running 192.168.69.24 Ubuntu 24.04 LTS
gateway Running 192.168.69.22 Ubuntu 24.04 LTS
server Running 192.168.69.23 Ubuntu 24.04 LTS
# 临时启用 IP 转发
multipass exec gateway -- sudo sysctl -w net.ipv4.ip_forward=1
# 永久启用 IP 转发
multipass exec gateway -- sudo bash -c 'echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf'
# 设置 NAT 规则 - 允许内网访问外网
multipass exec gateway -- sudo iptables -t nat -A POSTROUTING -s 192.168.69.0/24 -o enp0s1 -j MASQUERADE
# 允许已建立连接的转发
multipass exec gateway -- sudo iptables -A FORWARD -i enp0s1 -o enp0s1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 允许内网之间的转发
multipass exec gateway -- sudo iptables -A FORWARD -i enp0s1 -o enp0s1 -j ACCEPT
# 检查 IP 转发状态
multipass exec gateway -- sysctl net.ipv4.ip_forward
# 查看 NAT 规则
multipass exec gateway -- sudo iptables -t nat -L POSTROUTING
# 创建简单的 HTML 文件
multipass exec server -- bash -c 'cd /home/ubuntu && echo "Hello from Server - IP: $(hostname -I)" > index.html'
# 启动 Python HTTP 服务
multipass exec server -- bash -c 'cd /home/ubuntu && nohup python3 -m http.server 8000 > server.log 2>&1 &'
# 检查服务进程
multipass exec server -- ps aux | grep python
# 检查服务端口
multipass exec server -- ss -tlnp | grep 8000
# 安装测试工具
multipass exec client -- sudo apt update
multipass exec client -- sudo apt install -y curl traceroute net-tools
# 从 Client 访问 Server HTTP 服务
multipass exec client -- curl http://192.168.69.23:8000
预期输出:
Hello from Server - IP: 192.168.69.23 fd97:7251:3a98:39aa:5054:ff:fed2:cce3
# 跟踪从 Client 到 Server 的路由
multipass exec client -- traceroute 192.168.69.23
预期输出:
traceroute to 192.168.69.23 (192.168.69.23), 30 hops max, 60 byte packets
1 192.168.69.23 (192.168.69.23) 0.408 ms 0.387 ms 0.382 ms
使用提供的测试脚本进行全面验证:
./test_network.sh
# 1. 测试 HTTP 连接
multipass exec client -- curl -v http://192.168.69.23:8000
# 2. 测试路由跟踪
multipass exec client -- traceroute 192.168.69.23
# 3. 检查 Gateway 转发规则
multipass exec gateway -- sudo iptables -L
# 4. 检查网络接口状态
multipass exec gateway -- ip addr show
multipass exec server -- ip addr show
multipass exec client -- ip addr show
# 5. 测试服务可用性
multipass exec server -- curl localhost:8000
为了确保重启后规则依然有效:
# 安装 iptables-persistent
multipass exec gateway -- sudo apt install -y iptables-persistent
# 保存当前规则
multipass exec gateway -- sudo iptables-save | sudo tee /etc/iptables/rules.v4
创建 systemd 服务文件让 HTTP 服务开机自启:
multipass exec server -- sudo tee /etc/systemd/system/webserver.service > /dev/null << 'EOF'
[Unit]
Description=Python Web Server
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu
ExecStart=/usr/bin/python3 -m http.server 8000
Restart=always
[Install]
WantedBy=multi-user.target
EOF
# 启用并启动服务
multipass exec server -- sudo systemctl enable webserver.service
multipass exec server -- sudo systemctl start webserver.service
添加流量监控功能:
# 在 Gateway 上安装网络监控工具
multipass exec gateway -- sudo apt install -y iftop tcpdump
# 监控网络流量
multipass exec gateway -- sudo tcpdump -i enp0s1 host 192.168.69.23
# 检查 Multipass 状态
multipass version
multipass list
# 重启 Multipass 服务 (macOS/Linux)
sudo multipass restart
# 检查服务状态
multipass exec server -- ps aux | grep python
multipass exec server -- ss -tlnp | grep 8000
# 重启服务
multipass exec server -- pkill python3
multipass exec server -- bash -c 'cd /home/ubuntu && nohup python3 -m http.server 8000 > server.log 2>&1 &'
# 检查 IP 转发设置
multipass exec gateway -- sysctl net.ipv4.ip_forward
# 重新配置 iptables 规则
multipass exec gateway -- sudo iptables -F
multipass exec gateway -- sudo iptables -t nat -F
# 然后重新添加规则(参考第二步)
# 检查防火墙状态
multipass exec gateway -- sudo ufw status
multipass exec server -- sudo ufw status
multipass exec client -- sudo ufw status
# 如果防火墙启用,可以临时关闭测试
multipass exec gateway -- sudo ufw disable
# 查看 Server 日志
multipass exec server -- cat server.log
# 查看系统日志
multipass exec gateway -- sudo journalctl -f
# 检查路由表
multipass exec client -- ip route
multipass exec server -- ip route
multipass exec gateway -- ip route
# 检查 ARP 表
multipass exec client -- arp -a
# 检查连接状态
multipass exec client -- netstat -tuln
根据需要调整虚拟机配置:
# 停止虚拟机
multipass stop gateway server client
# 修改配置(需要重新创建)
multipass delete gateway server client
multipass purge
# 重新创建具有更多资源的虚拟机
multipass launch --name gateway --cpus 4 --memory 8G --disk 20G
# 安装网络性能测试工具
multipass exec server -- sudo apt install -y iperf3
multipass exec client -- sudo apt install -y iperf3
# 在 Server 上启动 iperf3 服务
multipass exec server -- iperf3 -s &
# 在 Client 上测试带宽
multipass exec client -- iperf3 -c 192.168.69.23
# 停止所有虚拟机
multipass stop gateway server client
# 删除虚拟机
multipass delete gateway server client
# 清理已删除的虚拟机
multipass purge
# 验证清理完成
multipass list
# 删除配置脚本
rm -f setup_network.sh test_network.sh
# 删除日志文件
rm -f *.log
# 在 Gateway 上设置更严格的防火墙规则
multipass exec gateway -- sudo iptables -P FORWARD DROP
multipass exec gateway -- sudo iptables -A FORWARD -s 192.168.69.24 -d 192.168.69.23 -p tcp --dport 8000 -j ACCEPT
multipass exec gateway -- sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# 创建第二台服务器
multipass launch --name server2 --cpus 2 --memory 4G --disk 10G
# 在 Gateway 上配置负载均衡
multipass exec gateway -- sudo apt install -y nginx
# 配置 nginx 作为负载均衡器...
# 安装 OpenVPN
multipass exec gateway -- sudo apt install -y openvpn
# 配置 VPN 服务器...
如果遇到问题,可以:
- 查看本文档的故障排除部分
- 检查 Multipass 官方文档
- 在项目 GitHub 仓库提交 Issue
- 查看相关日志文件进行诊断
注意: 本教程基于 Ubuntu 24.04 LTS 系统,其他版本可能需要适当调整命令。