目录
实验拓扑图
1 实验环境配置
win7:
Cent1:
Cent2:
2 NAT是做什么的
第一回合
第二回合
NAT表是什么?
3 SNAT配置
如果内网对应的公网IP不一定咋办,比如公司是拨号网络
4 DNAT配置
实验拓扑图
1 实验环境配置
可以参考这篇文章 : 的静态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