NAT

网络地址转换(NetworkAddress Translation),缩写为 NAT

原理:

NAT 技术可以重写 IP 数据包的源 IP 或者目的 IP,被普遍地用来解决公网 IP 地址短缺的

问题。它的主要原理就是,网络中的多台主机,通过共享同一个公网 IP 地址,来访问外网

资源。同时,由于 NAT 屏蔽了内网网络,自然也就为局域网中的机器提供了安全隔离

分类:

NAT 的主要目的,是实现地址转换。


根据实现方式的不同,NAT 可以分为三类:

静态 NAT,即内网 IP 与公网 IP 是一对一的永久映射关系;

动态 NAT,即内网 IP 从公网 IP 池中,动态选择一个进行映射;

网络地址端口转换 NAPT(Network Address and Port Translation),即把内网 IP 映

射到公网 IP 的不同端口上,让多个内网 IP 可以共享同一个公网 IP 地址


根据转换方式的不同,我们又可以把 NAPT 分为三类:

第一类是源地址转换 SNAT,即目的地址不变,只替换源 IP 或源端口。SNAT 主要用于,

多个内网 IP 共享同一个公网 IP ,来访问外网资源的场景。

第二类是目的地址转换 DNAT,即源 IP 保持不变,只替换目的 IP 或者目的端口。DNAT

主要通过公网 IP 的不同端口号,来访问内网的多种服务,同时会隐藏后端服务器的真实

IP 地址。

第三类是双向地址转换,即同时使用 SNAT 和 DNAT。当接收到网络包时,执行

DNAT,把目的 IP 转换为内网 IP;而在发送网络包时,执行 SNAT,把源 IP 替换为外部

IP。

配置:

要实现 NAT 功能,主要是在 nat 表进行操作。而 nat 表内置了三个 链:

PREROUTING,用于路由判断前所执行的规则,比如,对接收到的数据包进行

DNAT。

POSTROUTING,用于路由判断后所执行的规则,比如,对发送或转发的数据包进行

SNAT 或 MASQUERADE。

OUTPUT,类似于 PREROUTING,但只处理从本机发送出去的包

SNAT

为一个子网统一配置 SNAT,并由 Linux 选择默认的出口 IP。这实际上就是经常说的 MASQUERADE:

iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE

为具体的 IP 地址配置 SNAT,并指定转换后的源地址:

iptables -t nat -A POSTROUTING -s 192.168.0.2 -j SNAT --to-source 100.100.100.100


DNAT

ipables -t nat -A PREROUTING -d 100.100.100.100 -j DNAT --to-destination 192.168.0.2


双向地址转换

是同时添加 SNAT 和 DNAT 规则,为公网 IP 和内网 IP 实现一对一的映射关系,

iptables -t nat -A POSTROUTING -s 192.168.0.2 -j SNAT --to-source 100.100.100.100

 iptables -t nat -A PREROUTING -d 100.100.100.100 -j DNAT --to-destination 192.168.0.2


注意:

在使用 iptables 配置 NAT 规则时,Linux 需要转发来自其他 IP 的网络包,要开启 Linux 的 IP 转发功能

查看是否开启:0为未开启,1为开启

sysctl net.ipv4.ip_forward

设置开启:

sysctl -w net.ipv4.ip_forward=1


为了避免重启后配置丢失,要将配置写入 /etc/sysctl.conf

net.ipv4.ip_forward=1

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容