定义
半透明反向代理一般是指 代理本身对于客户端透明,对于服务端可见。
从客户端视角看,客户端访问的还是服务端,客户端不知道代理的存在。
从服务端视角看,服务端只能看到代理,看不到真实的客户端。
示意图
- 客户端访问服务器的数据包,通过交换机时,交换机利用配置的策略(此时数据包的目的mac被改为nginx机器)把数据包引流到nginx机器,数据包入口为36.57的网卡。这一步很重要。
- 流量到达nginx机器后,此时数据包的目的ip是仍然是server机器,所以需要利用iptables规则修改包的目的ip为nginx机器,然后才能与nginx建立tcp连接。nginx的1234端口代理的是服务器192.168.37.6,nginx此时作为反向代理的准备完成。
iptables -t nat -A PREROUTING -d 192.168.37.6 -p tcp --dport 3306 –j DNAT --to-destination 192.168.36.57:1234
- 客户端发往服务器的数据包,都会中转经过nginx,然后在发送给服务器。
- 服务器响应给客户端的数据包,会首先到达nginx,再由nginx转给客户端。
遗留问题
nginx机器有2张网卡,流量入口一定是从36.57的网卡。那么流量出口呢?
从41.15网卡出去?从36.57网卡出去?
基于路由的匹配规则,流量从哪张网卡出去都是有可能的。如果41.15是千兆网卡,36.57是万兆网卡,那么从万兆网卡出去无疑是最好的选择,那么就需要用到linux的策略路由。
策略路由
添加路由表
ip route add default via 192.168.36.1 dev enp24s0f1 table 101
添加策略路由
ip rule add from 192.168.37.6 table 101
ip rule add to 192.168.37.6 table 101
src和dst是服务器(192.168.37.6),都走路由表101,而这张路由表以网卡(192.168.36.57)为出口的
持久化配置
在/etc/sysconfig/network-scripts目录下,添加rule-XXXX和route-XXXX文件,实现配置持久化。
- route-enp24s0f1
default via 192.168.36.1 dev enp24s0f1 table 101
- rule-enp24s0f1
from 192.168.37.6 table 101
to 192.168.37.6 table 101