场景:托管到机房一台机器,安装 LINUX 或 EXSI 系统 ,在这台机器上装 2 到 3 台虚拟机(用 A,B,C 代替), 只有一个公网 IP 。 问题:如果我把公网 IP 的 80 或 443 转发到虚拟机 A 上,在虚拟机内用网络查看命令“:netstat 查看 访问虚拟机 A 80 ,443 对应服务器的 IP ,是内网 IP 。而不是真实的客户 IP 。 怎么实现 虚拟机内 netstat 能看到真实的客户访问 IP 而不是内网地址。是要装软路由吗,还是有其它方案。谢谢
1
seers 168 天前
网络不要用 nat ,用桥接
|
2
povsister 168 天前
如果网关可以跑 nginx ,可以用 proxy protocol 反代转发
如果网关就是普通路由,那需要三层真实 IP ,网关做个策略路由+mangle force route ,别用 NAT 就行了 |
3
privil 168 天前
80 443 最前面起个 Nginx xff 后端应用就能获取到 IP 了
|
7
FabricPath 168 天前
用 toa ,搜 TCP Option Address
|
8
chinanala 168 天前
不管前面怎样转发,在最后面一台 Nginx 配置文件中加上识别代码就正常了:
set_real_ip_from 0.0.0.0/0; real_ip_header X-Forwarded-For; real_ip_recursive on; 我开始是用 iptables 转发,这个工作在三层,如果前端套 CDN 的话,没法把用户真实 IP 带过去。 后面改用 haproxy ,可以设置走 TCP 或者 HTTP ,然后后端 Nginx 配置里加上 xff 识别代码就能完美实现需求。 |
9
GuuJiang 168 天前 via iPhone
想要 netstat 看到是不可能的,除非你自己魔改一个 netstat ,前面所有答案都没有审题吗?
答案就是,不要拘泥于 netstat ,而是在具体的应用里识别,因为不管是 xff 也好,代理协议也好,都是把真实 ip 作为应用层数据的一部分携带过去,后端需要自行提取 |
12
LoliconInside 168 天前
@chinanala haproxy 的话,你可以 nginx 开启 proxy_protocol 就可以正确识别来源 IP ,不用做额外调整
|