在实际的云手机项目上(云手机技术揭秘!低成本实现1台电脑变百部"虚拟手机"实战),我们有时会需要让不同的终端通过不同的网络出口访问互联网。如果是物理网络,可以参考我们之前的企业路由器进行配置(连WiFi就能切IP!揭秘企业级路由器多VPN出口黑科技!)。但云手机基于Docker网络,将源IP地址暴露出来不是一个好方案,所以我们可以结合策略路由来操作一下。
为了直观进行展示,我们重新构建一个Ubuntu系统的docker镜像,安装好常用的命令工具。Dockerfile文件内容如下:
nano Dockerfile# 创建 Dockerfile 文件FROM ubuntu:24.04# 安装基础工具包RUN apt-get update && apt-get install -y iproute2 tar wget lshw ethtool iputils-ping traceroute curl
然后,我们使用Dockerfile文件来构建Docker镜像,并命名为ubuntu2204:0520。
docker build -t ubuntu2404:0520 .
这样,我们就得到了一个Ubuntu系统的Docker镜像。
接下来,我们先看一下默认的Docker网络。
默认情况下,Docker容器可以通过连接到bridge驱动类型的docker0网络,获取172.17.0.1/16网段的IP地址;在访问互联网时,查找系统路由表进行转发。
那我们就创建一个名为Singapore的Docker网络,驱动类型选择为bridge,设置子网为10.1.11.0/24,命令如下:
docker network create -d bridge \ --subnet=10.1.11.0/24 \ Singapore
可以看到,网络创建成功,使用docker network ls查看的名称为Singapore,但是查看IP地址时显示的网卡名称却是br-7172fe7c7488,多少有点不方便。
回顾一下(Docker网络从入门到精通:7个核心命令实战详解),我们可以使用-o指定网络选项com.docker.network.bridge.name,将值指定为Singapore。
docker network create -d bridge \ --subnet=10.1.11.0/24 \ -o com.docker.network.bridge.name=Singapore \ Singapore
这样,我们就得到了一个完整的Singapore网络。
接下来,我们创建一个Docker容器,并将其网络连接到Singapore网络。
docker run -it --rm \ --name=Singapore \ --network=Singapore \ ubuntu2404:0520
可以看到,该容器自动获取到了Singapore网络的子网地址10.1.11.2/24。此时,容器的流量还没有转发到新加坡网络。
接下来,我们创建一个名为Singapore的路由表,编号ID为101。
echo "101 Singapore" >> /etc/iproute2/rt_tables
然后,就是创建策略路由。我们假设你已经参考之前的文章完成了全球网络的搭建(netmaker),指定该路由表的网络出口下一跳为新加坡,同时指定源地址为Singapore网络的查此表进行转发。
ip route add default via 10.33.5.1 table 101ip rule add from 10.1.11.0/24 lookup 101 priority 1001
此时,我们再查看容器的网络出口,就变成新加坡了。
按照这个做法,我们再新建一个名为Quanzhou的Docker网络,驱动类型选择为bridge,设置子网为10.1.12.0/24,命令如下:
docker network create -d bridge \ --subnet=10.1.12.0/24 \ -o com.docker.network.bridge.name=Quanzhou \ Quanzhou
再创建一个指定泉州网络出口的策略路由。
echo "102 Quanzhou" >> /etc/iproute2/rt_tablesip route add default via 192.168.200.1 table 102ip rule add from 10.1.12.0/24 lookup 102 priority 1002ip rule show
最后,我们再创建一个Docker容器,并将其网络连接到Quanzhou网络。
docker run -it --rm \ --name=Quanzhou \ --network=Quanzhou \ ubuntu2404:0520
可以看到,这个容器的出口网络直接就是泉州网络了。
最后,我们完整展示一下,如何将容器连接到不同的网络出口。
怎么样?这里的Docker容器使用的是Ubuntu系统,如果换成云手机的系统,不就可以实现随心落地全球网络了吗?
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://zblog.hqyman.cn/post/11325.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~