热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

资料整理POSTROUTING与PREROUTING区别详解

我大概清楚一点就是从内网出去的时候用POSTROUTING进来的时候用PREROUTING,可是做透明代理的时候确是用PREROUTING。这是为什么呢?回复:sunnyggpre还是post是根据数据包的流向来确定的。通常内网到外网是pre,外望到内网是post,但是外还是内只是个相对

我大概清楚一点就是从内网出去的时候用POSTROUTING进来的时候用PREROUTING,可是做透明代理的时候确是用PREROUTING。这是为什么呢?
回复: sunnygg
pre还是post是根据数据包的流向来确定的。
通常内网到外网是pre,外望到内网是post,但是外还是内只是个相对概念,在一定条件下是可以转换的。落实到网卡上,对于每个网卡数据流入的时候必然经过pre,数量流出必然经过post。
透明代理的原理是将内网到外网的网页访问请求进行重定向,将内网的请求转发回内网的代理服务器,代理服务与网关又是一体,如果使用post进行处理,那么数据就流出了,透明代理设置也就失败了,因此必须在数据流入的时候改写规则,才能及时响应处理请求。
回复:
POSTROUTING是源地址转换,要把你的内网地址转换成公网地址才能让你上网。
PREROUTING是目的地址转换,要把别人的公网IP换成你们内部的IP,才让访问到你们内部受防火墙保护的机器。
回复:
1,你首先要明白什么是"PREROUTING" ,什么是"POSTROUTING",我们可以简单的用下面的关系来表示:
源地址发送数据--> {PREROUTING-->路由规则-->POSTROUTING} -->目的地址接收到数据
当你使用:iptables -t nat -A PREROUTING -i eth1 -d 1.2.3.4 -j DNAT --to 192.168.1.40
时,你访问1.2.3.4,linux路由器会在“路由规则”之前将目的地址改为192.168.1.40,并且Linux路由器(iptables)会同时记录下这个连接,并在数据从192.168.1.40返回时,经过linux路由器将数据发送到那台发出请求的机器。所以你的"POSTROUTING"规则没有起作用。
而"POSTROUTING"是“路由规则”之后的动作。
2,你最好能有个详细的网络拓扑图,这样我可以更好的给你解释。
3,我可以具一个简单的例子说明"PREROUTING"和"POSTROUTING"的不同应用环境:
3.1 PREROUTING的应用,
一般情况下,PREROUTING应用在普通的NAT中(也就是SNAT),如:你用ADSL上网,这样你的网络中只有一个公网IP地址(如:61.129.66.5),但你的局域网中的用户还要上网(局域网IP地址为:192.168.1.0/24),这时你可以使用PREROUTING(SNAT)来将局域网中用户的IP地址转换成61.129.66.5,使他们也可以上网:
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -j SNAT 61.129.66.5
3.2 POSTROUTING的应用,
POSTROUTING用于将你的服务器放在防火墙之后,作为保护服务器使用,例如:
A.你的服务器IP地址为:192.168.1.2;
B.你的防火墙(Linux & iptables)地址为192.168.1.1和202.96.129.5
Internet上的用户可以正常的访问202.96.129.5,但他们无法访问192.168.1.2,这时在Linux防火墙里可以做这样的设置:
iptables -t nat -A POSTROUTING -d 202.96.129.5 -j DNAT 192.168.1.2
结:最要紧的是我们要记住PREROUTING是“路由规则”之前的动作,POSTROUTING是“路由规则”之后的动作!

 

使用端口映射。比如服务器在内网192.168.0.5,服务端口8080;网关IP222.240.9.211,使用网关端口8080映射到服务器8080。命令如下:
1 #iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
   //# iptables -t nat -A POSTROUTING -d 192.168.0.0/24 -p tcp -j SNAT --to-source 222.240.9.211
   //# iptables -t nat -A POSTROUTING -d 192.168.0.5 -p tcp --dport 8080 -j SNAT --to-source 222.240.9.211 //特定一个ip特定的port使用nat
2 # iptables -t nat -A PREROUTING -p tcp -d 222.240.9.211 --dport 8080 -j DNAT --to 192.168.0.5:8080
3 # iptables -t nat -A POSTROUTING -d 192.168.0.5 -p tcp --dport 8080 -j SNAT --to-source 222.240.9.211
第1句用于当外网接口不是使用静态IP而是动态分配时内网使用snat方式连接出去,这时它会根据接口自动判断向外链接时伪装的源地址。如果使用静态IP,那么最好使用snat,可以减少对系统的压力,因为它不用判断要使用哪个IP进行伪装。也就是说,MASQUERADE方式是snat方式的一种结合系统功能的特例,它不用像snat一样指明--to-source,而转由系统自动判断。
第2个命令进行端口映射。如果是启动系统后配置必须要使用-d <外部接口IP>,而不能使用 -i <接口名称>。如果在启动时使用init,应该可以使用后者,不过没有测试。
第3个命令对内网的某个特定ip特定port使用固定snat。好像这句可以不使用,不过测试时没有这句建立了链接但好像没有数据传输。

 


推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 本文详细介绍了在Linux环境下如何有效地管理任务,包括撤销操作、挂起与恢复任务、终止后台程序以及取消定时任务的方法。这些技巧对于提高日常工作效率和系统维护至关重要。 ... [详细]
  • 本文提供了在 Kali Linux 2020.01 x64 版本上安装 Docker 的详细步骤,包括环境准备、使用清华大学镜像源、配置 APT 仓库以及安装过程中的常见问题处理。 ... [详细]
  • 本文介绍如何在Linux系统中卸载预装的OpenJDK,安装指定版本的JDK 1.8,并配置防火墙以确保系统安全性和软件兼容性。 ... [详细]
  • Ubuntu GamePack:专为游戏爱好者打造的Linux发行版
    随着Linux系统在游戏领域的应用越来越广泛,许多Linux用户开始寻求在自己的系统上畅玩游戏的方法。UALinux,一家致力于推广GNU/Linux使用的乌克兰公司,推出了基于Ubuntu 16.04的Ubuntu GamePack,旨在为Linux用户提供一个游戏友好型的操作环境。 ... [详细]
  • 众包(Crowdsourcing)是指将任务分发给广泛的社区成员完成,而非由组织内部人员独力承担。这一模式在软件测试领域尤为突出,通过结合网络与云计算技术,形成了强大的众包测试机制,对传统测试流程产生了深远影响。 ... [详细]
  • C语言实现推箱子游戏的完整代码
    本文详细介绍了如何使用C语言在Linux环境下实现一个简单的推箱子游戏,包括游戏的基本规则、地图设计及代码实现。适合C语言初学者学习。 ... [详细]
  • OBS (Open Broadcaster Software) 架构解析
    本文介绍 OBS(Open Broadcaster Software),一款专为直播设计的开源软件。文章将详细探讨其技术架构、核心组件及其开发环境要求。 ... [详细]
  • 安装双硬盘对电脑有何益处?
    面对日益增长的数据存储需求,仅通过更换更大容量的硬盘来解决空间问题并非唯一途径。本文探讨了在同一台计算机上安装两个硬盘的可能性及其带来的多种优势。 ... [详细]
  • WinSCP: 跨Windows与Linux系统的高效文件传输解决方案
    本文详细介绍了一款名为WinSCP的开源图形化SFTP客户端,该工具支持SSH协议,适用于Windows操作系统,能够实现与Linux系统之间的文件传输。对于从事嵌入式开发的技术人员来说,掌握WinSCP的使用方法将极大提高工作效率。 ... [详细]
  • 字节跳动夏季招聘面试经验分享
    本文详细记录了字节跳动夏季招聘的面试经历,涵盖了一、二、三轮面试的技术问题及项目讨论,旨在为准备类似面试的求职者提供参考。 ... [详细]
  • 利用SSH隧道实现外网对局域网机器的安全访问
    本文探讨了一种常见的网络配置问题及其解决方案,即如何在外网环境下安全地访问位于局域网内的计算机。特别介绍了使用SSH反向隧道技术来实现这一目标的具体步骤和注意事项。 ... [详细]
  • LCUI 2.1.0 版本现已推出,这是一个用 C 语言编写的图形用户界面开发库,适合创建轻量级的桌面应用程序。此次更新包括多项修复和功能增强,并正式宣布将启动 Android 支持的开发计划。 ... [详细]
author-avatar
幸运的天使棒棒糖_634
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有