ipv4 forwarding
WARNING: IPv4 forwarding is disabled. Networking will not work
出现场景: 虚拟机中安装了docker,docker启动nginx容器时,弹出以上警告内容
分析: docker网桥配置完后,需要开启转发,不然容器启动后,就会没有网络
更进一步:
出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。
要让Linux系统具有路由转发功能,需要配置一个Linux的内核参数net.ipv4.ip_forward。这个参数指定了Linux系统当前对路由转发功能的支持情况;其值为0时表示禁止进行IP转发;如果是1,则说明IP转发功能已经打开。
解决方案:
- 临时修改方式(未验证)
临时生效的配置方式,在系统重启,或对系统的网络服务进行重启后都会失效。这种方式可用于临时测试、或做实验时使用。
sysctl -w net.ipv4.ip_forward=1
或者
echo 1 > /proc/sys/net/ipv4/ip_forward
- 永久修改方式(已验证)
永久生效的配置方式,在系统重启、或对系统的网络服务进行重启后还会一直保持生效状态。这种方式可用于生产环境的部署搭建。
查看配置文件/etc/sysctl.conf
只有一堆注释,你可以直接添加配置项
net.ipv4.ip_forward=1
但是注释说明官方推荐的方式是在 /etc/sysctl.d/ 目录新建一个用户文件,如 my.conf,然后在此配置文件中添加上述配置项。
修改之后,重新加载内核参数设置
sysctl -p
验证一下,配置是否已修改,返回 net.ipv4.ip_forward = 1即成功
sysctl net.ipv4.ip_forward
重启network服务
systemctl restart network
至此结束!
参考文章 :
Linux 7 中 /etc/sysctl.conf 的位置变化 :https://www.cndba.cn/dave/article/2966