1、NAT(端口转发)是什么
数据包都是有原地址和目标地址的,NAT就是要对数据包的原地址或者 目标地址(也可以修改端口的)进行修改的技术。为什么我们要修改ip地址呢?是这样的互联网中只能传送公网地址的数据包,私有地址的数据包是无法传送的。这样你想下,你每天在wifi环境下看视频浏览网站的时候你的ip是什么(私有地址,你手机、pad、电脑发出来的所有数据包原地址都是私有地址。怎么在互联网上传送)。为了能让你的数据包在能在互联网上传送,必须给你一个公网ip才行。所以当你上互联网的时候,路由器会帮你把所有的数据包的原地址转换成它的wlan口的ip地址(这个就是公网ip,一般就是ADSL拨号获取的ip)。这个转换的技术就是NAT。当你所访问的服务器给你回应数据包时,路由器会把所有数据包目标地址,由它的wlan口的ip地址,改回你内网的ip地址。这样你才能上互联网。所以你每天都在使用NAT技术。
我们利用NAT可以做很多事情:
1>、比如我们可以用一台计算机当做路由器,从而控制或者监控公司所有内网的用户上互联网,对他们访问的网站都可以进行控制(比如不允许上淘宝、不允许上京东防止这帮败家老娘们上班时候瞎逛)。
2>、假设我们有一个固定的公网ip,你就可以控制外部用户访问你的内网服务器。控制他们的行为(比如你们公司有wed服务器,这样你可以控制客户的行为)。
2、语法和端口转发规则实例
DNAT : 目标地址转换
SNAT:原地址转换
-j SNAT
--to-source
-j MASQUERADE #等价于 -j SNAT --to-source 一起写。这个语法主要用在ADSL获取到的ip时(因为ip地址不确定,这个就是自动把原地址转换为你ADSL获取到的地址的)。注意这个规则最好不要用,速度很慢的。
-j DNAT
--to-destination
例子:
2.1、 echo 1 > /proc/sys/net/ipv4/ip_forward ##开启端口转发功能,临时生效。
永久生效: vim /etc/sysctl.conf ##修改net.ipv4.ip_forward = 1
sysctl -p ##生效配置文件。
2.2、规则书写例子:
iptables -t nat -A PREROUTING -d 172.168.100.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.9
iptables -t nat -A POSTROUTING -d 192.168.100.9 -p tcp --dport 80 -j SNAT --to-source 172.168.100.7 ##两行蓝色的规则效果一样
iptables -t nat -A POSTROUTING -d 192.168.100.9 -p tcp --dport 80 -j MASQUERADE
3、实用抓包命令: tcpdump -i eth0 -nn -X tcp ##抓tcp的报文