在网络上免费学习到了很多有意义的知识,参加一下活动也算是为互联网共享精神出点微薄之力。让他人少踩点坑。

-----------------------------------------------------------------------------------------------------------------------------

1.问题描述:

        有同事反馈,局域网服务器内无法访问某个摄像头IP: 172.20.154.17,导致摄像头无法推流。但他自己的办公电脑使用wifi是能正常连接摄像头的。

2.问题分析:

        (1)使用ping 命令测试,发现服务器无法 ping 通  172.20.154.17。

          (2)   使用 ip route查看路由配置:

          发现 172.20 网段走的是:172.20.0.0/16 dev br-2e23336187cd proto kernel scope link src 172.20.0.1 这个路由配置;

          对网络敏感的同学应该已经发现这是一个虚拟网卡,是由docker 创建的,由 docker 使用,而且不难发现 docker 已经把 172 开头的网段 172.17、172.18等都占用了,而且不难猜测它后续还会自动占用172开头的其他网段:

       

3.解决方案:

        既然发现问题,那么解决问题就很简单了,就是添加一条指定网段的路由:

ip route add 172.20.154.0/24 via 192.168.0.1 dev ens3
# 如果不是 root 用户需要加 sudo 执行:
sudo ip route add 172.20.154.0/24 via 192.168.0.1 dev ens3

        再次查看路由已经添加上了,网络也能正常访问了:

           这里需要注意的将这条命令中的值替换成我们网络中的实际值:比如我这里 ens3 是我们的物理网卡,也就是说让 172.20.154 网段的请求都走这个物理网卡,192.168.0.1 是我当前局域网的网关。

        其他说明:这条命令只是暂时的,因为重启后就没有了。所以要一劳永逸的话,需要做持久化配置,这里就不演示了。

4.总结:

        这个问题本质上是 docker 后,它的默认行为导致的,如果初次接触 docker ,并且对网络不熟悉的话还是容易踩坑的。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐