nat123,启用nat模式坏处

网络延迟是最核心的网络性能指标。 受网络传输、网络分组处理等各种因素的影响,网络延迟不可避免。 但是,如果网络延迟过大,将直接影响用户的体验。

NAT原理NAT技术能够改写IP分组的源IP或目的地IP,一般用于解决公共网的IP地址不足的问题。 其主要原理是网络中的多个主机通过共享同一公共IP地址来访问外部网资源。 同时,由于NAT中断了内部网,当然为局域网内的设备提供了安全的隔离。

NAT可以配置在支持网络地址转换的路由器(称为NAT网关)上,也可以配置在Linux服务器上。 如果采用第二种方法,Linux服务器实际上充当“软”路由器。

NAT的主要目的是实现地址转换。 根据实现方法的不同,NAT可以分为三类:

静态NAT,即内联网IP和公共网络IP是一对一的永久映射关系; 动态NAT,即内联网IP,动态地从公共IP池中选择一个进行映射; 网络地址端口转换napt (网络地址转换端口转换),即将内部网IP映射到公共网络IP上的不同端口,其中多个内部网IP是同一公共网络NAPT是目前最受欢迎的NAT类型,在Linux上配置的NAT也是这种类型。 根据变换方式的不同,也可以将NAPT分为3种。

第一个是源地址转换SNAT。 也就是说,目标地址不会更改,仅替换源IP或源端口。 SNAT主要用于多个内部网IP共享同一公共IP以访问外部网资源的情况。

第二个是目标地址转换DNAT。 这意味着源IP不会更改,仅替换目标IP或目标端口。 DNAT主要通过公共IP的不同端口号访问内部网的多个服务,以隐藏后端服务器的实际IP地址。

第三种是双向地址转换,同时使用SNAT和DNAT。 在接收到网络分组时,执行DNAT并将目的地IP转换为内部网IP; 另一方面,在发送网络分组时,执行SNAT,并将源IP替换为外部IP。

由于双向地址转换实际上是外联网IP和内联网IP的一对一映射关系,因此在虚拟化环境中,虚拟机通常被分配有浮动的公共网络IP地址。

为了让你理解NAPT,我画了图。 我们假设:

本地服务器的内部网IP地址为192.168.0.2; NAT网关的公共网络IP地址为100.100.100.100; 访问目标服务器baidu.com的地址为123.125.115.110。 SNAT和DNAT过程如下图所示。

从图中可以看出,可以看出以下内容。

服务器访问baidu.com时,NAT网关将源地址从服务器的内部网IP 192.168.0.2替换为公用IP地址100.100.100.100,然后将该源地址当baidu.com发送回响应包时,NAT网关还将目标地址从公用网络IP地址100.100.100替换为服务器中的网络IP 192.168.0.2,然后单击iptables和NAT Linux内核提供的Netfilter框架允许更改网络数据包(如NAT )和过滤防火墙。 在此基础上,iptables、ip6tables和ebtables等工具提供了更易于使用的命令行界面,使系统管理员能够配置和管理NAT和防火墙规则。

其中,iptables是最常用的配置工具之一。 为了掌握iptables的原理和使用方法,最核心的是明确网络数据包通过Netfilter时的工作流程。 下图说明了这个过程。

在此图中,绿色背景框表示用于管理链的表(table )。 Linux支持四种类型的表:过滤器、nat、mangle和raw。

与table一起的白色背景框表示管理特定iptables规则的链(chain )。 每个表可以包含多个链,例如:

过滤器表包含内置的INPUT、OUTPUT和前向链; nat表内置了PREROUTING、POSTROUTING、OUTPUT等。 当然,如果需要,也可以建立自己的链条。

灰色conntrack表示到跟踪模块的连接。 通过内核中的连接跟踪表,即哈希表记录网络连接的状态是实现iptables状态过滤(-m state )和NAT的基础。

所有iptables规则都位于这些表和链中,并按照图的顺序和规则的优先级执行。

关于今天的主题,要实现NAT功能,主要在NAT表中操作。 nat表内置了三个链。

PREROUTING用于在路由判断之前执行的规则,例如,对接收的包进行DNAT。 POSTROUTING用于在路由确定后运行的规则,如SNAT或MASQUERADE发送或转发的包。 OUTPUT类似于PREROUTING,但只处理本地发送的数据包。 熟悉iptables表和链后

,相应的 NAT 规则就比较简单了。我们还以 NAPT 的三个分类为例,来具体解读一下。

SNAT

根据刚才内容,我们知道,SNAT 需要在 nat 表的 POSTROUTING 链中配置。我们常用两种方式来配置它。

第一种方法,是为一个子网统一配置 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

再来看 DNAT,显然,DNAT 需要在 nat 表的 PREROUTING 或者 OUTPUT 链中配置,其中, PREROUTING 链更常用一些(因为它还可以用于转发的包)。

$ iptables -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 转发功能。

你可以执行下面的命令,查看这一功能是否开启。如果输出的结果是 1,就表示已经开启了 IP 转发:

$ sysctl net.ipv4.ip_forwardnet.ipv4.ip_forward = 1

如果还没开启,你可以执行下面的命令,手动开启:

$ sysctl -w net.ipv4.ip_forward=1net.ipv4.ip_forward = 1

当然,为了避免重启后配置丢失,不要忘记将配置写入 /etc/sysctl.conf 文件中:

$ cat /etc/sysctl.conf | grep ip_forwardnet.ipv4.ip_forward=1

讲了这么多的原理,那当碰到 NAT 的性能问题时,又该怎么办呢?结合我们今天学过的 NAT 原理,你先自己想想,动手试试,下节课我们继续“分解”。

总结

今天,我们一起学习了 Linux 网络地址转换 NAT 的原理。

NAT 技术能够重写 IP 数据包的源 IP 或目的 IP,所以普遍用来解决公网 IP 地址短缺的问题。它可以让网络中的多台主机,通过共享同一个公网 IP 地址,来访问外网资源。同时,由于 NAT 屏蔽了内网网络,也为局域网中机器起到安全隔离的作用。

Linux 中的 NAT ,基于内核的连接跟踪模块实现。所以,它维护每个连接状态的同时,也会带来很高的性能成本。具体 NAT 性能问题的分析方法,我们将在下节课继续学习。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注