iptables的NAT

网络防火墙

NAT(network address translation)网络地址转换,又分为SNAT、DNAT和PNAT

SNAT:NAT转换时请求报文替换了源地址,响应报文替换了目标地址,所以又为SNAT


DNAT:当外网用户访问局域网内的站点时,网关收到请求报文并将请求报文内的目标地

址和端口更换为局域网内的地址和端口,局域网内的站点收到请求报文后将响应报文发送

给网关,网关再将响应报文中的源地址替换为外网地址,将报文发送回外网用户


PNAT:以http服务为例,外网用户要访问内网的http服务请求的端口是80,而内网的httpd服

务工作在非标准的端口8080上,这就叫做PNAT 也叫端口重定向


环境要求:三台主机

充当路由器的主机开启ip_forward

echo net.ipv4.ip_forward >> /etc/sysctl.conf

sysctl -p

网络配置安装图中配置,

SNAT:

image.png

假设左侧NAT网卡连接的部分为内网,本地公网ip172.16.12.7,172.16.12.6不配置网关

直接在本地pc   ping  172.16.12.6是不通的,因为数据报文到达B,B查看和A不在同一网段,又没有网关,只能收到来自

A的请求报文没有回应

image.png

用SNAT解决这种情况

SNAT又分为二种情况

(1)固定的本地公网ip

iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -j SNAT --to-source 172.16.12.7

数据包可能是从防火墙本身发出或者由内部主机发出,所以由 POSTROUTING汇总后转发,因此添加在POSTROUTING

(2)拨号上网公网ip不固定,其实这种写法也适用于固定ip

iptables  -t nat -A POSTROUTING -s 192.168.12.0/24 -j MASQUERADE


DNAT:

image.png

通过互联访问本地公网ip172.16.12.7从而将请求发给本地pc,类似于调度器

iptables -t nat -A PREROUTING -d 172.16.12.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.12.17:80

应该加在PREROUTING上,以httpd为例,数据报文传送过来如果经过PREROUTING到达INPUT没有找到对应服务,

报文直接被丢弃

在B上访问172.16.12.7,访问日志源ip还是172.16.12.6

image.png

iptables -t nat -F
iptables -t nat -A PREROUTING -d 172.16.12.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.12.17:8080

将本地公网ip80端口映射成内网的8080,一个本地公网ip的80只能映射成1个端口,

PNAT:

外网访问本地pc80端口,自动转到8080,需要将httpd服务端口修改为8080

在本地pc添加端口转发规则

iptables -t nat -A PREROUTING -d 192.168.12.17 -p tcp --dport 80 -j REDIRECT --to-ports 8080

   image.png 


猜你喜欢

转载自blog.51cto.com/14322729/2427490