You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Docker容器作为路由器实现跨多网络流量转发?

Docker多网络路由器容器配置方案

步骤1:创建三个独立的Docker网络

先创建三个不同子网的网络,避免IP段冲突:

docker network create --subnet=192.168.1.0/24 net1
docker network create --subnet=192.168.2.0/24 net2
docker network create --subnet=192.168.3.0/24 net3

步骤2:创建并配置路由器容器

  1. 启动基础路由器容器,开启特权模式(需修改系统网络参数),先绑定第一个网络:
docker run -d --name router --privileged --network net1 ubuntu:latest sleep infinity
  1. 将另外两个网络连接到路由器容器,让它同时接入三个网络:
docker network connect net2 router
docker network connect net3 router
  1. 进入容器开启IP转发功能(核心的路由转发开关):
docker exec -it router bash
# 临时开启IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 配置永久生效,编辑/etc/sysctl.conf,添加或修改一行:
net.ipv4.ip_forward=1
# 让配置立即生效
sysctl -p

步骤3:部署业务容器并指定网关

  1. 先查看路由器在各网络的IP地址:
docker inspect router | grep -A20 "Networks"

输出里会看到路由器在net1、net2、net3对应的独立IP(例如分别为192.168.1.2、192.168.2.2、192.168.3.2)。

  1. 分别在三个网络启动业务容器,将网关指定为路由器对应网络的IP:
# net1中的业务容器
docker run -d --name container1 --network net1 --ip 192.168.1.10 --gateway 192.168.1.2 ubuntu:latest sleep infinity
# net2中的业务容器
docker run -d --name container2 --network net2 --ip 192.168.2.10 --gateway 192.168.2.2 ubuntu:latest sleep infinity
# net3中的业务容器
docker run -d --name container3 --network net3 --ip 192.168.3.10 --gateway 192.168.3.2 ubuntu:latest sleep infinity

步骤4:在路由器容器中捕获流量

进入路由器容器,安装tcpdump即可抓取各网络的数据包:

docker exec -it router bash
apt update && apt install -y tcpdump
# 抓取net1网络的流量(对应网卡eth0)
tcpdump -i eth0
# 抓取net2网络的流量(对应网卡eth1)
tcpdump -i eth1
# 抓取net3网络的流量(对应网卡eth2)
tcpdump -i eth2

关键说明

你之前用--net=router-container的方式是让业务容器共享路由器的网络命名空间,导致IP重叠,不符合需求。正确逻辑是让路由器容器同时加入三个独立网络,每个网络拥有独立IP;业务容器在各自网络内将网关指向路由器的对应IP,这样跨网络的流量必须经过路由器转发,路由器就能完全捕获所有网络的数据包。

内容的提问来源于stack exchange,提问作者Pavan Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:10:34