Linux NAT(网络地址转换)
NAT是在数据包通过路由器或防火墙时重写数据包的源地址和目的地址。管理员重写IP包的源地址或目的地址的原因有很多。到目前为止,最常见的原因是使用私人IP地址访问互联网。
今天,几乎所有的私人企业和家庭网络都使用私人IP地址。除了面向internet的外部广域网外,不需要使用真实的IP地址。有时,管理员可能纯粹为了性能而在DMZ中为web服务器和其他半私有资源使用私有地址。
那么为什么这些私人地址不能在互联网上使用呢?
这些内部IP地址不是唯一的。私有地址块是IANA(国际分配号码授权机构)的策略,用来减缓IPv4地址范围的耗尽和可能的耗尽。通过分发这些私有地址块在私有网络中使用,那么真正的IP地址就可以保留下来,以便在Internet上需要它们时使用。
管理员可以在其网络中自由使用IANA的私有地址块如下:
10.0.0.0/16
172.16.0.0/12
192.168.0.0/16
管理员可以随意使用这些地址和子网,因为没有人会在网络边界之外看到这些地址。这些地址曾经是完全合法的地址。所发生的是(通过将它们分配给公众使用)它们不再是唯一的。数以百计,甚至数以百万计的小型网络正在使用相同的IP地址范围。互联网上的私人地址由IANA指定。缺省情况下,所有网关路由器都配置了在出口接口上过滤掉它们。如果任何私有地址的数据包被丢弃,它们将被丢弃在下一跳路由器上。
NAT就是解决这个问题的一种方法,因为NAT为私有地址的主机访问Internet提供了一种方便的方式。NAT通过用“真实”的IP地址重写源地址,巧妙地借用外部广域网接口,确保数据包现在兼容并能够穿越互联网。
通过Udemy.com的课程了解更多关于Linux和NAT的知识。
NAT在实践中
在下面的场景中,有一个小型的私有网络,它有三台计算机:一台是Linux服务器,它将被配置为路由器,允许所有三台机器共享一个ADSL互联网连接。
主机名 | IP地址 | 网关 |
Linux01 | 以太网0 = 192.168.1.1 (DHCP服务器)以太网1 = 203.53.122.65 | 0/0/0/0203.53.122.66 |
Windows-01 | 192.168.1.2 (DHCP客户端) | 192.168.1.1 |
Windows-02 | 192.168.1.3 (DHCP客户端) | 192.168.1.1 |
步骤1—在Linux机器上配置NAT时,管理员应确保Linux发行版上已经配置或至少安装了一些先决条件。这些是iptables和称为Netfilter的包过滤框架。安装了Netfilter和两个或多个网络接口后,管理员可以使用命令集iptables来配置Linux机器,使其充当路由器并执行NAT。
#重要提示:在内核中激活ip转发!#默认情况下禁用!$ >Echo "1" > /proc/sys/net/ipv4/ip_forward#加载各个模块。通常它们已经加载了#(特别是对于更新的内核),在这种情况下#不需要以下命令。#负载iptables模块:$ >modprobe ip_tables#激活连接跟踪#(考虑连接状态)$ >modprobe ip_conntrack#IRC的特殊功能:$ >modprobe ip_conntrack_irc#FTP的特殊功能:$ >modprobe ip_conntrack_ftp
现在,iptables模块被加载并配置为转发IP报文。
下一步是配置iptables规则,用internet接口的外部IP地址重写传入的IP数据包的源地址。
步骤2 -#将局域网连接到因特网上$ >iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
这里的语法如下
- -t = select NAT Table for configuration。
- -A =将规则追加到post - strouting链
- - o eth = 1append对于离开外部网络接口Ethernet 1的报文的规则
- -j Masquerade =应该进行的动作来伪装数据包,即重写IP地址,因为数据包被转发出以太网1的地址
步骤3 -
其他本地Windows客户端通过DHCP指向Linux机器的内部以太网接口192.168.1.1作为默认网关。
来自内部接口(以太网0)上的其他网络主机的源地址为(192.16.1.x)范围的数据包将从(以太网1)路由到源地址为203.53.122.66的Internet
剩下的就是通过在Windows客户端上浏览互联网来检查配置。
其他NAT行动
上面的场景是在网络中实现NAT的一个非常常见的原因。在这种情况下,Linux路由器用外部接口Eth-1的公网IP地址重写了离开网络的报文的源地址。
然而,也有其他的选择:
#在下面的表选择中,命令和匹配模式
#将被缩写为[…]
#Source-NAT:将“sender”修改为“123.123.123.123”
$ >iptables[…-j SNAT——to-source 123.123.123.123
#掩码:将发送端更改为发送网络接口
$ >iptables[…] - j化妆舞会
#目的nat:将“收件人”修改为“123.123.123.123”,端口为22
$ >iptables[…-j DNAT——to-destination 123.123.123.123:22
#重定向到本地端口8080
$ >iptables[…-j重定向——到端口8080
以上选择如下:
- SNAT =源NAT——这与上面的示例类似,只是提供了一个特定的IP地址,而不是一个接口
- DNAT =目的NAT -用提供的地址重写目的地址的地址
- 重定向——这被称为端口重定向,当从互联网访问私有地址上的互联网主机时很有用。