说明:
这是典型的内网部署通过防火墙映射至公网的应用访问时序,使用单点认证需在应用服务器
配置单点服务
信息、应用服务
信息,因需要公网提供服务,都配置成公网地址,对应认证服务器地址***.94.78.76 端口 20008,应用服务器地址 ***.94.78.93 端口10004
- 应用服务器 内网地址 192.168.5.109 服务部署 Tomcat 使用端口 8080
映射公网 *.94.78.93 端口 10004 - 单点认证服务器 内网地址 192.168.5.207 端口 8080
映射至公网 ***.94.78.76 端口 20008
重定向URL
通过公网 访问服务:http://***.94.78.93:10004/vocs
会被单点认证服务器拦截,会拼接路径: http:// ***.94.78.93:20008/xxxxx?app=vocs&url=http:// ***.94.78.93:10004/vocs
(路径只为表现功能,不代表实际路径)
问题
到目前,一切看起来都很正常,也符合单点认证服务集成配置要求,但现实总会出现些奇怪的状况,比如:***.94.78.93 , ***.94.78.76 都是虚地址,更要命的是在 192.168.5.109 上居然ping不通***.94.78.76 !好在能ping通 192.168.5.207 这个局域网地址
如何解决?
如果单点认证服务能够把认证配置和跳转配置分开,可配置成不同IP就能解决问题,或者网管能够帮调整下网络,让192.168.5.109能够访问到单点认证的公网IP也能解决问题.
理想很丰满,现实却很骨干,协调后,得到的回馈是:单点认证服务暂时不支持分开配置,网管那边下班了(周五),怎么办?周一早上要给领导演示啊
第三条路
抖了半天包袱,终于到正题了 m_m,默念10遍“ping公网不通,内网通”!
要是使用的是域名就好了,配置下host就能蒙混过关,但哪来域名啊,到目前为止也没看过给什么应用分过域名,哪怕是三级域名!只能说这叫想得美……
能不能控制下路由或把访问的公网IP,改成内网IP!改IP,代理行吗?还得搞实验环境,代理后还得改写目标地址,改写目标地址,好像有那么点对的味道!
定个小目标,就来改写目标地址试试
以前用iptables实现过访问转发,iptables好像有改写目标地址,一通搜索,大部分都是说的是转发的,剩下的也描述的好晦涩,那些为了流量而复制黏贴内容的广告网站,你们有操守嘛!!!你们这些搬运工,把代码格式弄得那么差,也不标注源地址,更可恨的是某些搜索引擎,居然还让他们排前面,是不是自己不敢挂的广告就让他们来挂 !!!
只能恶补下基础,找iptables的完整教程,好在 慕课网上有个不错的教程(实际因为前面的项目使用iptables配置转发的时候看过一遍,但是脑子里面一点印象都没有了,难道真的是老了嘛,记忆力差成这样了-_-! ),整个教程又搂了一遍,然后又开始试错n小时就过去了……
大致思路
使用iptables的net地址转化,把 5.109对 **.94.78.76的访问转换成 5.207的访问,回来的IP地址再改为 \**.94.78.76
最初是这样的:
出去:
1 | iptables -t nat -A PREROUTING -p tcp --dport 20009 -d ***.94.78.76 -j DNAT --to 192.168.5.207:8080 |
回来:1
iptables -t nat -A POSTROUTING -d 192.168.5.207 -p tcp --dport 8080 -j SNAT --to ***.94.78.76:20009
最后是这样的:1
iptables -t nat -A OUTPUT -p tcp --dport 20009 -d ***.94.78.76 -j DNAT --to 192.168.5.207:8080
表面上是被路由坑了,实际还是对iptables没搞清楚,虽然理论上效果是一致的
后记
写这篇分享主要为iptables可用来改写目标地址,另外过程中也请网络运维的工程师帮看写出来的语句,请人帮忙一定要描述清问题,最好是请别人帮看代码写的对不对,而不是请人帮你写,因为不在一个频道上的对话,需要多大的面子啊