从 Docker 无网络问题到 ip_forward()

从 Docker 无网络问题到 ip_forward()

💡 原文中文,约3200字,阅读约需8分钟。
📝

内容提要

在部署Docker容器时,发现无法连接外网,经过排查发现Linux内核的IP转发未开启。手动开启后问题解决,并需修改配置文件以防重启后失效。在研究过程中了解了sysctl工具及Linux内核设计,感受到内核代码的复杂性与趣味性。

🎯

关键要点

  • 在部署Docker容器时,发现无法连接外网,经过排查发现Linux内核的IP转发未开启。
  • 手动开启IP转发后,问题解决,但需修改配置文件以防重启后失效。
  • 云服务厂商提供的主机可能会主动关闭IP转发,需要检查sysctl配置。
  • sysctl工具用于读取和写入内核配置,源自BSD Unix。
  • Linux内核中执行IP转发的逻辑在net子系统,具体代码在net/ipv4/ip_forward.c。
  • rtable是Linux内核中常见的设计,封装数据和行为,支持多种功能。
  • 研究Linux内核代码带来了新的理解和乐趣,AI时代使得阅读内核代码变得更简单。

延伸问答

Docker容器无法连接外网的原因是什么?

Docker容器无法连接外网的原因是Linux内核的IP转发未开启。

如何手动开启Linux内核的IP转发?

可以通过命令'sudo sysctl -w net.ipv4.ip_forward=1'手动开启IP转发。

为什么云服务厂商会关闭IP转发?

云服务厂商可能会出于安全考虑主动关闭IP转发。

sysctl工具的作用是什么?

sysctl工具用于读取和写入Linux内核的配置。

如何确保IP转发在系统重启后仍然有效?

需要修改配置文件,如/etc/sysctl.conf,确保net.ipv4.ip_forward=1。

Linux内核中执行IP转发的代码在哪里?

执行IP转发的逻辑代码在net/ipv4/ip_forward.c文件中。

➡️

继续阅读