目录

实验拓扑图

1 实验环境配置

win7:

Cent1:

Cent2:

2 NAT是做什么的

第一回合

第二回合

NAT表是什么?

3 SNAT配置

 如果内网对应的公网IP不一定咋办,比如公司是拨号网络

4 DNAT配置


实验拓扑图

centos7 iptables 配置_centos7 iptables 配置

1 实验环境配置

可以参考这篇文章 :  的静态IP、子网掩码、网关配置、路由配置 部分,跟着做,配置好实验环境。

win7:

centos7 iptables 配置_IP_02

Cent1:

centos7 iptables 配置_NAT_03

centos7 iptables 配置_内网_04

Cent2:

centos7 iptables 配置_内网_05


2 NAT是做什么的

NAT,即网络地址转换。

第一回合

现在win7想要访问Cent2的Web服务 80端口,就会构造出一个数据包

tcp协议
s:192.168.1.1
d:12.34.56.78
dport:80

然后这个数据包被发送到了cent2,然后Cent2得回包啊,于是看了看地址:192.168.1.1.
这???         (192.168.1.1是一个私有地址,目的地址是这玩意的包,在网络上直接会被丢弃的)

第二回合

现在想个办法能让数据包回去,就需要用到NAT技术了。用到NAT时候的情形。

centos7 iptables 配置_内网_06

内网的数据包发到了网关这里,网关要对这个数据包操作一番。把他的源地址改为本网关的对外公网地址。于是数据包就变成了这样》出了网关》

centos7 iptables 配置_centos7 iptables 配置_07

数据包顺利的到达了Cent2,然后回包的时候就知道要发给12.34.56.254,然后再次到了网关这里。

centos7 iptables 配置_IP_08

网关一看,这个包的目标端口是50000,从而得知这是他之前转换过的,从Cent1的NAT地址转换表查到了这个包是给win7的。于是又对数据包一通操作发给了win7。

NAT表是什么?

来看看iptables里面的NAT表是什么样?

[root@localhost ryan]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

有一说一,我傻了,网上的都说只有三条链:PREROUTING、OUTPUT、POSTROUTING,我这咋还多了一个呢。算了,继续做实验。

3 SNAT配置

POSTROUTING属于路由后的链。添加一条只要是源为192.168.1.0/24网段的就把源地址转换为12.34.56.254的规则后,再去看看NAT转发表。

[root@localhost ryan]# iptables -t nat -A POSTROUTING -p tcp -o eth37 -s 192.168.1.0/24 -j SNAT --to-source 12.34.56.254
[root@localhost ryan]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 SNAT       tcp  --  *      eth37   192.168.1.0/24       0.0.0.0/0            to:12.34.56.254

排除了FORWARD链的影响之后(iptables -F FORWARD)

win7就可以顺利访问对方的80端口了

centos7 iptables 配置_centos7 iptables 配置_09

 如果内网对应的公网IP不一定咋办,比如公司是拨号网络

现在之前的那条规则可就不一定行了。。。因为出口地址不固定。把那条规则删了

iptables -t nat -D POSTROUTING 1

然后配置新规则

iptables -t nat -A POSTROUTING -p tcp -o eth37 -s 192.168.1.0/24 -j MASQUERADE

centos7 iptables 配置_NAT_10

4 DNAT配置

路由前规则,PREROUTING之后才轮到INPUT

DNAT主要是用在外网访问内网时,在网关那里将Destination改了、

现在的网络拓扑图是外网的win7想要访问内网的cent2

centos7 iptables 配置_IP_11

iptables -t nat -A PREROUTING -i eth37 -d 12.34.56.254 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:80