iptables与NAT

本文深入解析NAT(网络地址转换)技术,包括SNAT(源地址转换)和DNAT(目标地址转换)的工作原理,以及如何在不同场景下配置SNAT和DNAT,确保局域网与公网的有效通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

    在日常使用环境中,不会为每台 主机/服务器 单独分配IP地址,一是没有足够多的IP地址(IPv4)供我们使用,二是出于安全角度考虑(不会直接暴露在互联网上),它们通常被部署在局域网内。但是局域网内与外部的通信成为了一大问题,NAT(Network Address Translation)技术是解决局域网与外部通信的一种好方法。其实在早期,它的出现是为了隐藏内部主机,即出于安全角度而设计的。
    NAT又根据主机(有NAT功能的网关)部署的位置和实现的地址转换类型不同,分为SNAT(Source Network Address Translation,源地址转换)和DNAT(Destination Network Address Translation,目标地址转换)。


SNAT与DNAT:

模型一:
在这里插入图片描述
    如上图所示,客户端在局域网内,服务器在公网。客户端的网关匹配来自客户端的数据包,在POSTROUTING结点上将符合条件的客户端发来的数据包进行修改,主要是将源IP地址改为自己的某公网IP地址,进而将数据报文发出去,称为SNAT。
    远端服务器收到这份数据包后,则会回应给客户端的网关,客户端网关收到这份回应报文,通过在之前修改数据报文与客户端建立的某种关联(Connect Track Table,连接追踪表),在PREROUTING结点上将报文的目标IP地址修改为客户端地址,接着发给客户端,称为DNAT。此模型中,对客户端发出的请求报文做SNAT,对服务器发来的响应报文做DNAT。
    假设如果客户端数据包的源IP地址不进行转换,则服务器回应的是客户端地址(局域网地址),该数据包则不会在互联网上进行路由传送。

模型二:
在这里插入图片描述
    同样的,对于不同的部署情况其SNAT与DNAT的部署略有不同。如上图所示,服务器部署在局域网内。服务器的网关匹配来自客户端数据报文(也可以是局域网内的客户端经网关做SNAT后的数据报文),在PREROUTING结点(客户端发出的数据报文目标IP地址是服务器网关的IP地址,如果在非PREROUTING结点修改,则网关进行路由,发现目标是自己,直接拆解数据报文)上将符合条件的客户端发来的数据包进行修改,主要是将目标IP地址改为服务器的IP地址,接着将数据包发给服务器。
    服务器回应时,目标IP是客户端IP(或者是为客户端做SNAT的网关),源IP是自己,服务器网关收到后做一次SNAT,将源IP改为自己的某公网地址,即SNAT。在此模型中,对服务器发出的响应报文做SNAT,对客户端的发来的请求报文做DNAT。
总结就是: 对局域网发往公网的数据做SNAT,对公网发往局域网(严格来说是公网发给网关)的数据做DNAT。NAT功能的主机需要开启核心转发。


相关配置

SNAT配置: 在网关防火墙nat表POSTROUTING结点做源地址转换
例:对172.27.0.0/16局域网的主机访问web服务器(IP:10.0.0.1,PORT:80)的数据包做SNAT,网关公网出口IP:192.168.1.1

# iptables -t nat -A POSTROUTING -s 172.27.0.0/16 -d 10.0.0.1 -p tcp --dport 80 -j SNAT --to-source 192.168.1.1
或:
# iptables -t nat -A POSTROUTING -s 172.27.0.0/16 -d 10.0.0.1 -p tcp --dport 80 -j SNAT --to-source MASQUERADE

DNAT配置: 在网关防护墙nat表PREROUTING结点做目标地址转换
例:在对内网web服务器(IP:10.0.0.1 PORT:80)的网关接受的数据包(客户端发给服务器的数据)做DNAT,网关公网IP:192.168.1.1

# iptables -t nat -A PREROUTING -d 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1

注: 如果需要进行端口映射,即访问网关的端口与服务器实际开放的端口不一致时,只要在–to-destination后跟上IP:PORT的形式即可,如10.0.0.1:8080
    如要对NAT的一些地址转换行为进行限制,在nat表中是不可以直接添加DROP或REJECT匹配条目的。因此,想要对像nat表中POSTROUTING链添加的转换策略进行限制,可以在filter表中FORWARD链添加过滤条目,事先过滤一些数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值