首页 » Iptables入门 » 正文

Netfilter的NAT机制

Netfilter与NAT

NAT , Network Address Translation , 网络地址转换

具体的作用是什么呢? 举例来说,其实就是路由器的作用,局域网的数据包通过NAT 功能 访问网络中的主机,NAT主要是将数据包中的Source IP修改为一个可用的外网IP,因为刚开始是一个内网IP地址的话,返回的数据包可找不到该发回到哪个局域网,所以,修改成一个外网地址之后,等有数据包返回的时候,再按照之前的记录返回到具体的内网地址上

具体的过程参考下图的①②->⑤

NAT

这其中涉及两个过程:

1: 修改来源IP地址 SNAT ,对应图中的②

2: 修改目的IP地址 DNAT , 对应途中的⑥
NAT 表中我们可以看到有两个链

1: PREROUTING,如果是要修改数据包的Destination IP ,目标IP地址,我们应该放到这个链中 , 此链位于NAT的最前端, 也就是DNAT
2: OUTPUT链 :
3: POSTROUTING ,如果是要修改数据包的Source Ip, 来源地址,我们应该放到这个链中,也就是SNAT

数据包的流向 1 -> 2 -> 3

其实,我们防火墙完全可以代替一个路由器,下面我举例说明如何使用一台linux服务器来让局域网的电脑访问网络

首先,我们得有两块网卡,一块接内网,一块接外网

如下图所示:

nat-inner-out
eth0: 10.0.1.200 外网地址
eth1: 192.168.2.254 内网地址

所有内网的主机的网关全是192.168.2.254

如果有局域网的主机箱访问外网地址,数据包的Sourec IP 一定是局域网地址,这个肯定是不行的,因此,当有数据包外出时,需要时SNAT功能来修改Source IP地址

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT –to 10.0.1.200

-t nat : 说明使用的是nat表

-A POSTROUTING: 选择使用的链,也就说明是修改Destination IP , SNAT

-o eth0 : 标明数据流向

-s 192.168.0.0/24: 标明数据来源,只有这个网段的才符合这个规则

-j SNAT : 如果数据包满足以上条件,九江Source IP的内容修改 10.0.1.200,但是注意,这必须是NAT主机对外的公网IP地址

如果对外饿公网IP是变化的,那么,这么写就可以了
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

Zhiming Zhang

Senior devops at Appannie
一个奔跑在运维路上的胖子
Zhiming Zhang

Latest posts by Zhiming Zhang (see all)

本文共 1 个回复

  • 11 2019/04/12 16:37

    :grin: :eek: :???:

Comments are closed.