在起docker镜像的时候出现WARNING IPv4 forwarding is disabled. Networking will not work

在起docker镜像的时候出现WARNING: IPv4 forwarding is disabled. Networking will not work.

今天在一台机器上启动了一个docker镜像,然后用另一个机子调用服务发现调用不了,总是不通往,于是我用telnet地址和端口号发现这个端口是不通的,明明都让人开通了启动服务的机器的端口白名单了却无法post请求??在查了很多很多原因之后最后想起在起docker服务的时候出现了个warming

WARNING: IPv4 forwarding is disabled. Networking will not work.

上网搜了一下找到了解决的办法并执行一下两部便解决了问题可以成功通信

##Linux系统缺省并没有打开IP转发功能,要确认IP转发功能的状态,可以查看/proc文件系统
cat /proc/sys/net/ipv4/ip_forward
#如果上述文件中的值为0,说明禁止进行IP转发;如果是1,则说明IP转发功能已经打开。要想打开IP转发功能,可以直接修改
echo 1 > /proc/sys/net/ipv4/ip_forward

sysctl -p /etc/sysctl.conf

原因和机器有关:

工作原理:内网主机向公网发送数据包时,由于目的主机跟源主机不在同一网段,所以数据包暂时发往内网默认网关处理,而本网段的主机对此数据包不做任何回应。由于源主机ip是私有的,禁止在公网使用,所以必须将数据包的源发送地址修改成公网上的可用ip,这就是网关收到数据包之后首先要做的工作–ip转换。然后网关再把数据包发往目的主机。目的主机收到数据包之后,只认为这是网关发送的请求,并不知道内网主机的存在,也没必要知道,目的主机处理完请求,把回应信息发还给网关。网关收到后,将目的主机发还的数据包的目的ip地址修改为发出请求的内网主机的ip地址,并将其发给内网主机。这就是网关的第二个工作–数据包的路由转发。内网的主机只要查看数据包的目的ip与发送请求的源主机ip地址相同,就会回应,这就完成了一次请求。出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。

感谢:https://www.cnblogs.com/sfnz/p/6555723.html

猜你喜欢

转载自blog.csdn.net/qq_43535595/article/details/111183477