NAT 是 network address translation 的缩写 网络地址转换

网络地址转换主要有两种:SNAT和DNAT,即源地址转换和目标地址转换

SNAT:源地址转换

eg:多台pc机使用ADSL路由器共享上网

每个pc都配置了内网IP,当pc机要访问外部网络的时候,路由器将数据包的包头的源地址替换成器的ip

解释:当外部网络的服务器比如网站web服务器接到访问请求的时候,

他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip,这是因为,这个服务器收到的数据包的报头里边的“源地址”,已经被替换了所以叫做SNAT,基于源地址的地址转换。

DNAT是destination network address translation的 ,即目标网络地址转换

eg:典型的应用是,有个web服务器放在内网配置内网ip,前端有个防火墙配置公网ip

互联网上的访问者使用公网ip来访问这个网站,

当访问的时候,客户端发出一个数据包

这个数据包的报头里边,目标地址写的是防火墙的公网ip,防火墙会把这个数据包的报头改写一次,将目标地址改写成web服务器的内网ip,

然后再把这个数据包发送到内网的web服务器上

这样,数据包就穿透了防火墙,并从公网ip变成了一个对内网地址的访问了,即DNAT,基于目标的网络地址转换

MASQUERADE,地址伪装,在iptables中有着和SNAT相近的效果,但也有一些区别

但使用SNAT的时候,出口ip的地址范围可以是一个,也可以是多个,例如:

如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3的ip然后发出去

iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.5.3

如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3/192.168.5.4/192.168.5.5等几个ip然后发出去

iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.5.3-192.168.5.5

这就是SNAT的使用方法,即可以NAT成一个地址,也可以NAT成多个地址

但是,对于SNAT,不管是几个地址,必须明确的指定要SNAT的ip

假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变

而且改变的幅度很大,不一定是192.168.5.3到192.168.5.5范围内的地址

这个时候如果按照现在的方式来配置iptables就会出现问题了

因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的

每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip

这样是非常不好用的

MASQUERADE就是针对这种场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT

比如下边的命令:

iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE

如此配置的话,不用指定SNAT的目标ip了

不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去

这样就实现了很好的动态SNAT地址转换

 

最新文章

  1. 去除移动端 a标签 点击有一个 阴影效果
  2. wifi详解(二)
  3. Syntax highlighter for CKEditor
  4. hdu5032 Always Cook Mushroom
  5. LInux系统的C语言开发工具笔记
  6. 嵌入在网页上Flash媒体播放器(1)
  7. Linux启动kettle及linux和windows中kettle往hdfs中写数据(3)
  8. 利用wamp配置虚拟主机
  9. zookeeper的作用
  10. pandas读取文件报错
  11. java 保存到mysql数据库中文乱码
  12. Python搭建环境
  13. 盖茨基金会:如何使用Python拯救生命
  14. windows下 navicat_premium破解方法
  15. ES系列十九、kibana基本查询、可视化、仪表盘用法
  16. Linux系统备份与恢复
  17. 【Unity】10.4 类人动画角色的控制
  18. 基于非比較的排序:计数排序(countSort),桶排序(bucketSort),基数排序(radixSort)
  19. 百度NLP三面
  20. 【原创】linux命令-Axel命令 - linux多线程下载 - 费元星 - 未来星开发团队

热门文章

  1. Nginx出现500错误解决办法
  2. [bzoj] 1878 HH的项链 || 莫队
  3. BZOJ2875 [Noi2012]随机数生成器 【矩阵乘法 + 快速乘】
  4. lightgbm 学习笔记
  5. STM in Haskell
  6. linux内存管理2:内存映射和需求分页(英文名字:demand Paging,又叫:缺页中断)【转】
  7. 【转】Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04
  8. 1.tornado基础
  9. (29)C#多线程
  10. CF978C Letters【前缀和+二分查找/几房几号】