docker 抓取客户端真实ip


在部署docker版本nginx进行请求转发,意外发现nginx打印日志中的客户端ip并非为客户端的真实ip(192.168.2.97),而是docker虚拟网卡的ip(172.17.0.1)

推测是docker网桥和linux防火墙存在冲突,但是系统的firewall防火墙已经关闭,iptables也已关掉,不知道为啥会有影响。网上有攻略尝试把docker网桥加入到防火墙的internal区域,
1.通过ifconfig -a 找到docker网桥的名称 docker0 有的是br开头

2.把网桥加入到防火墙的internal(内部)区域
firewalld-cmd –permanent –zone=internal –change-interface=docker0(网桥名称) 感觉没用,压根没启动firewall。

网上查询docker和firewalld的冲突问题后,发现并不是docker和防火墙有冲突,而是docker与防火墙管理工具firewalld有冲突(CentOs 6 中使用iptables来管理防火墙,到了CentOs 7 默认使用firewalld来管理防火墙)。firewalld启动或者重启会将iptables的规则清空,其中就包含docker相关的规则,继续推测,启动firewalld时,虽然把docker网桥加入了internal区域,但同时又将iptables的规则清空掉了,所以我们添加的配置对于docker来说仍然没有起作用,这时就需要重启docker将相关规则进行重建,可能有些道理。

本次主机是因为在/etc/docker/daemon.json中加入了

“iptables”: false

后来去掉以后重启docker能看到客户端真是IP。
再次查看日志,成功获取到客户端真实ip


文章作者: 云上的小雨滴
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 云上的小雨滴 !
评论
  目录