NAT后无法在内网通过外部IP访问内部服务的问题的详细说明
来源:互联网 发布:网络鬼差系统txt下载 编辑:程序博客网 时间:2024/05/18 00:57
这是个理论问题,我们先从NAT讲起:NAT有两种基本类型,一种是SNAT(Source NAT),一种是DNAT(Dest. NAT).SNAT即源NAT是改变数据包的IP层中的源IP地址,一般是用来将不合法的IP外出请求转换成合法的IP的外出请求,就是普通的用一个或者几个合法IP来带动一整个非法IP段接入。 DNAT即目的NAT,就是改变数据包的目标IP地址,使得能对数据包重新定向,可以用做负载均衡或者用于将外部的服务请求重定向到内网的非法IP的服务器上。
好了,罗嗦了一通,大致就是这样了。 那么之所以会出现无法在DNAT的内部网络通过DNAT服务的外部IP地址来访问的情况,是因为,如果服务从内部请求,那么经过DNAT转换后,将目标IP改写成内网的IP地址,譬如172.16.10.254,而请求的机器的IP是 172.16.10.100,数据包被网关172.16.10.1顺利的重定向到172.16.10.254的服务端口,然后,192.16.10.254根据请求发送回应给目的IP地址,就是172.16.10.100,但是,问题出现了,因为172.16.10.100请求的地址是外部IP 假设是221.232.34.56,所以他等待着221.232.34.56的回应,而172.16.10.254的回应请求被看做是非法的,被丢弃了。这就是问题的所在了。
呵呵,写的有点混乱,不好意思。不知道大家明白没有.那么如何解决这个问题,我说个用iptables实现的例子,
#我们先把发向外网IP221.232.34.56 80号端口的数据重定向到172.16.10.254 理论上来讲,如果只要从外网访问,这就完成了。
iptables -t nat -A PREROUTING -p tcp -d 221.232.34.56 --dport 80 -j DNAT --to-destination 172.16.10.254
#解决内网通过外网IP访问的情况
iptables -t nat -A POSTROUTING -p tcp -d 172.16.10.254 --dport 80 -j SNAT --to-source 172.16.10.1
我们将内网的请求强行送回到网关172.16.10.1,依靠网关在内核建立的状态表再转发到真实的请求地址172.16.10.100.
当然,这并不是最好的解决方法,最好的解决方法是将服务器放在另外一个网段,也就是说所谓的DMZ(解除武装区),这样就不会出现上面所说的问题了。
如果大家还不清楚,给个参考文档:
http://iptables-tutorial.frozentux.net/iptables-tutorial.html#DNATTARGET
好了,罗嗦了一通,大致就是这样了。 那么之所以会出现无法在DNAT的内部网络通过DNAT服务的外部IP地址来访问的情况,是因为,如果服务从内部请求,那么经过DNAT转换后,将目标IP改写成内网的IP地址,譬如172.16.10.254,而请求的机器的IP是 172.16.10.100,数据包被网关172.16.10.1顺利的重定向到172.16.10.254的服务端口,然后,192.16.10.254根据请求发送回应给目的IP地址,就是172.16.10.100,但是,问题出现了,因为172.16.10.100请求的地址是外部IP 假设是221.232.34.56,所以他等待着221.232.34.56的回应,而172.16.10.254的回应请求被看做是非法的,被丢弃了。这就是问题的所在了。
呵呵,写的有点混乱,不好意思。不知道大家明白没有.那么如何解决这个问题,我说个用iptables实现的例子,
#我们先把发向外网IP221.232.34.56 80号端口的数据重定向到172.16.10.254 理论上来讲,如果只要从外网访问,这就完成了。
iptables -t nat -A PREROUTING -p tcp -d 221.232.34.56 --dport 80 -j DNAT --to-destination 172.16.10.254
#解决内网通过外网IP访问的情况
iptables -t nat -A POSTROUTING -p tcp -d 172.16.10.254 --dport 80 -j SNAT --to-source 172.16.10.1
我们将内网的请求强行送回到网关172.16.10.1,依靠网关在内核建立的状态表再转发到真实的请求地址172.16.10.100.
当然,这并不是最好的解决方法,最好的解决方法是将服务器放在另外一个网段,也就是说所谓的DMZ(解除武装区),这样就不会出现上面所说的问题了。
如果大家还不清楚,给个参考文档:
http://iptables-tutorial.frozentux.net/iptables-tutorial.html#DNATTARGET
- NAT后无法在内网通过外部IP访问内部服务的问题的详细说明
- 【Java】内部类访问的外部变量定义成final (数据保持一致,外部修改后无法通知内部,编译的时候会通过构造方法传进来) Java内部类一般访问不了外部变量
- 实现内网通过外网域名访问NAT映射的内网服务器
- nat123端口映射: 外网通过ssh访问内网非公网ip的服务器
- nat123端口映射: 外网通过ssh访问内网非公网ip的服务器
- oracle 修改过ip地址或者主机名后服务无法启动的解决办法
- vmware中nat模式中使用静态ip后无法上网的问题
- 启动docker内部的apache2服务并从外部访问
- 外部浏览器无法访问虚拟机里配置的rails环境问题,无法ip访问问题
- 模拟的QQ可以在内网通信,为什么不能在外网通信,这需要NAT穿透内网与外网通信
- 有关fms 服务的外部访问的问题的解决
- centos服务器关闭iptables防火墙后仍然无法通过公网ip访问http端口的问题
- 内网通过外网IP访问内网服务器?
- 安装部署Mysql后外部不能访问的问题排查
- 网通的IP地址段
- 网通的IP地址段
- 网通的IP地址段
- 网通的IP地址段
- C#xml的压缩与解压还原(使用系统自带的压缩与解压)(源码分享)
- 使用telerik报表控件生成报表
- Glusterfs全局统一命名空间
- Mat::create
- 添加 和删除日历闹钟
- NAT后无法在内网通过外部IP访问内部服务的问题的详细说明
- mysql分屏显示结果
- c# 获取网页源代码(可解决某些页面乱码的问题)
- Joomla 模板常用技巧函数收集
- 每天悲催的十分钟
- 适当的休息一下, 适当的把注意力从程序离开,也挺好的
- ORA-01659:无法分配超出 4 的 MINEXTENTS (在表空间 SDE 中)
- C經典百例 in PYTHON3 .2
- Collection(七) Map -----autoboxing and unboxing