iptable filter nat MASQUERADE snat dat

在这里,系统会根据IP数据包中的destination ip address中的IP地址对数据包进行分发。如果destination ip adress是本机地址,数据将会被转交给INPUT链。如果不是本机地址,则交给FORWARD链检测。
这也就是说,我们要做的DNAT要在进入这个菱形转发区域之前,也就是在PREROUTING链中做,
比如我们要把访问202.103.96.112的访问转发到192.168.0.112上:
iptables -t nat -A PREROUTING -d 202.103.96.112 -j DNAT --to-destination 192.168.0.112
这个转换过程当中,其实就是将已经达到这台Linux网关(防火墙)上的数据包上的destination ip address从202.103.96.112修改为192.168.0.112然后交给系统路由进行转发。
而SNAT自然是要在数据包流出这台机器之前的最后一个链也就是POSTROUTING链来进行操作
iptables -t nat -A POSTROUTING -s 192.168.0.0/ -j SNAT --to-source 58.20.51.66
这个语句就是告诉系统把即将要流出本机的数据的source ip address修改成为58.20.51.66。这样,数据包在达到目的机器以后,目的机器会将包返回到58.20.51.66也就是本机。如果不做这个操作,那么你的数据包在传递的过程中,reply的包肯定会丢失。
总结
PREROUTING: 位于 nat 表,用于修改目的地址(DNAT)(上一节说的是数据包作路由选择前应用此链中的规则 记住!所有的数据包进来的时侯都先由这个链处理)
POSTROUTING:位于 nat 表,用于修改源地址 (SNAT)(上一节说的是对数据包作路由选择后应用此链中的规则,所有的数据包出来的时侯都先由这个链处理.
因为某些原因需要把访问10.0.3.49上的httpd服务重定向到10.0.3.26上.所以研究了一下用iptables的NAT实现IP与端口的重定向,其实很简单,只需要两步。
1,首先需要确保linux服务器10.0.3.49开启了数据转发功能:
echo > /proc/sys/net/ipv4/ip_forward
2.10.0.3.49做NAT的ip和端口80的重定向
iptables -t nat -A PREROUTING -p tcp --dport -d 10.0.3.49 -j DNAT --to 10.0.3.26:
iptables -t nat -A POSTROUTING -d 10.0.3.26 -p tcp --dport -j SNAT --to 10.0.3.49:
iptables -A FORWARD -d 10.0.3.26 -j ACCEPT
nat表需要的三个链:
1.PREROUTING:可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT;
2.POSTROUTING:可以在这里定义进行源NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。
3.OUTPUT:定义对本地产生的数据包的目的NAT规则。
需要用到的几个动作选项:(真实环境中用大写)
redirect 将数据包重定向到另一台主机的某个端口,通常用实现透明代理和对外开放内网某些服务。
snat 源地址转换,改变数据包的源地址
dnat 目的地址转换,改变数据包的目的地址
masquerade IP伪装,只适用于ADSL等动态拨号上网的IP伪装,如果主机IP是静态分配的,就用snat
PRERROUTING:DNAT 、REDIRECT (路由之前)只支持-i,不支持-o。在作出路由之前,对目的地址进行修改
POSTROUTING:SNAT、MASQUERADE (路由之后)只支持-o,不支持-i。在作出路由之后,对源地址进行修改
OUTPUT:DNAT 、REDIRECT (本机)DNAT和REDIRECT规则用来处理来自NAT主机本身生成的出站数据包.
一、打开内核的路由功能。
要实现nat,要将文件/proc/sys/net/ipv4/ip_forward内的值改为1,(默认是0)。
二、nat不同动作的配置
1)MASQUERADE:是动态分配ip时用的IP伪装:在nat表的POSTROUTING链加入一条规则:所有从ppp0口送出的包会被伪装(MASQUERADE)
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 要想系统启动时自动实现nat,在/etc/rc.d/rc.local文件的末尾添加 echo "">/proc/sys/net/ipv4/ip_forward
2) SNAT:一般正常共享上网都用的这个。
所有从eth0(外网卡)出来的数据包的源地址改成61.99.28.1(这里指定了一个网段,一般可以不指定)
iptables -t nat -A POSTROUTING -s 192.168.1.0/ -o eth0 -j SNAT --to 61.99.28.1
3)DNAT:目的nat 做智能DNS时会用到
智能DNS:就是客户端在dns项里无论输入任何ip,都会给他定向到服务器指定的一个dnsip上去。
在路由之前所有从eth0(内网卡)进入的目的端口为53的数据包,都发送到1.2.3.4这台服务器解析。
iptables -t nat -I PREROUTING -i eth0 -p udp --dport -j DNAT --to-destination 1.2.3.4:
4)REDIRECT:重定向,这个在squid透明代理时肯定要用到它
所有从eth1进入的请求80和82端口的数据,被转发到80端口,由squid处理。
iptables -t nat -A PREROUTING - -i eth1 -p tcp -m multiport --dports , -j REDIRECT --to-ports
iptable filter nat MASQUERADE snat dat的更多相关文章
- BIGIP-LTM中的NAT和SNAT
http://250688049.blog.51cto.com/643101/1095880 一.NAT(Network Address Translation)网络地址转换1.NAT简介 NAT ...
- NAT和SNAT
在Kubernetes负载均衡的方案中遇到了SNAT的问题,查资料把SNAT和NAT的大意了解一下 详细信息可以直接访问 https://support.f5.com/kb/en-us/product ...
- 树莓派做路由器_配置防火墙filter和nat转发_转载
转自:https://blog.csdn.net/hustsselbj/article/details/45866681 如果用树莓派当作路由器转发有线和无线网络,则需要对iptables进行相关配置 ...
- SNAT DNAT MASQUERADE 区别
SNAT,DNAT,MASQUERADE都是NATMASQUERADE是SNAT的一个特例SNAT是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来 ...
- F5 SNAT NAT相关
SNAT: 跟路由器.防火墙一样,BIG-IP系统提供NAT (Network Address Translation)和SNAT(Secure Network Address Translation ...
- linux之iptable
转自:http://seanlook.com/2014/02/23/iptables-understand/ 一. netfilter与iptables Netfilter是由Rusty Russel ...
- iptables nat 技术转发
NAT 一. 什么是 NAT NAT(Network Address Translation)译为网络地址转换.通常路由器在转发我们的数据包时,仅仅会将源MAC地址换成自己的MAC地址,但是NAT技术 ...
- ubuntu 中DNAT SNAT配置实验.
1. 目的 图1 如图1所示,有A,B两台计算机,其中A配置成普通PC,B是网关.实现由A向一个不存在的IP 发起tcp连接,并能向这个不存在的ip发送数据. 同时响应这个tcp连接的是B中 ...
- iptable的使用
目录 iptables iptables iptables详解 2012-07-18 20:10:08 分类: LINUX 一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它 ...
随机推荐
- Spring 体系结构
https://www.w3cschool.cn/wkspring/dcu91icn.html 体系结构 Spring 有可能成为所有企业应用程序的一站式服务点,然而,Spring 是模块化的,允许你 ...
- lampp and testrail
https://wyzx.testrail.net szllq2000 http://129.0.1.228/testrail/ http://docs.gurock.com/testrail-adm ...
- iptables综述
1 概述 如下图所示,iptables共有Filter,Nat,Mangle和RAW共四个table,每个table还有若干个chain,每个chain中还包含若干个rule 1.1 Filter t ...
- 如何编写一个python项目
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001397616003925a ...
- easyUI datagrid 清空
最近在做一个管理系统,出于一些需要,经常要将一些datagrid清空.然后easyUI本身并没有自带的方法,然后自己动手丰衣足食吧. 清空无外乎两种思路,删除现有数据和填充空数据. 1.删除数据 va ...
- python技巧总结之set、日志、rsa加密
一.日志模块logging模块调用 1.日志模块使用原理 #!/usr/bin/python # -*- coding:utf-8 -*- import logging # 方式一: "&q ...
- Spring boot 开发WebService遇到的问题之一
当pom.xml文件中的配置: <artifactId>spring-boot-starter-parent</artifactId><version>2.0.6. ...
- C++ builder 书籍推荐
china-pub网上书店c++builder书籍专区,本专区专门为c++builder学习者提供目前最为畅销实用的c++builder技术书籍,通过对本专区c++builder书籍的了解,让您学习c ...
- 最佳虚拟容器LXC
最佳虚拟容器LXC 和"真正的虚拟机环境"不同, "容器"(container)只能在Linux上虚拟Linux, 不能虚拟WIndows, 因为它不能虚拟硬件 ...
- laravel + html ajax 多表单字段和图片一起上传
$("#article_push").on('click', function (e){ e.preventDefault(); var stylestr = $('#summer ...