(CentOS7)iptables之网络地址转换NAT实验(SNAT、DNAT)

tech2023-09-07  91

目录

实验拓扑图​

1 实验环境配置

win7:​

Cent1:​

Cent2:​

2 NAT是做什么的

第一回合

第二回合

NAT表是什么?

3 SNAT配置

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

4 DNAT配置


实验拓扑图

1 实验环境配置

可以参考这篇文章 : https://blog.csdn.net/Drifter_Galaxy/article/details/108366661 的静态IP、子网掩码、网关配置、路由配置 部分,跟着做,配置好实验环境。

win7:

Cent1:

Cent2:


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时候的情形。

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

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

网关一看,这个包的目标端口是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端口了

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

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

iptables -t nat -D POSTROUTING 1

然后配置新规则

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

4 DNAT配置

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

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

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

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

 

最新回复(0)