NAT服务
- NAT: network address translation 网络地址转换
- PREROUTING,INPUT,OUTPUT,POSTROUTING
- 请求报文:修改源/目标IP,由定义如何修改
- 响应报文:修改源/目标IP,根据跟踪机制自动实现
- SNAT:source NAT POSTROUTING, INPUT
- 让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装
- 请求报文:修改源IP
- DNAT:destination NAT PREROUTING , OUTPUT
- 把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP
- 请求报文:修改目标IP
- PNAT: port nat,端口和IP都进行修改
1.NAT简介
查看企业网络的外网地址:在Linux输入“curl http://ipinfo.io/ip”命令 或 在Windows的浏览器,百度“IP”即可
- 利用SNAT,企业内部使用私有地址可以访问互联网
- 利用PAT,企业内部可以使多台电脑,同时使用私有地址访问互联网
- 利用DNAT,企业员工可以在外网,访问企业内部的电脑。
- 优点:因为访问互联网使用的是私有IP地址,所以提高了安全性。因为互联网上的***无法直接连通私有地址,从而***。
- 缺点:访问互联网使用的都是一个外网IP。所以网站统计量,通过统计IP地址计算访问网站人数就不准了。
注意:企业内部不可使用公有地址。因为,企业服务器会优先查询企业内部地址,如果你设置了公有IP,而一些用户访问的网站与你设置的IP地址相同,那服务器会把你的IP地址给用户,从而无法访问。更糟糕的是,如果你设置的IP地址是外网地址,并且子网掩码很小,如6.6.6.6/8,这相当于,企业内部,所有用户访问网站,如果网站是6网段的,都会访问你的电脑,想当于黑了6网段。
1.1SNAT工作原理
- 请求报文的源地址改变,就是SNAT
- 优点:省钱,提高安全性
- 缺点:因为要转换IP地址,所以性能下降
说明
企业内网用户A(172.22.0.100 123端口),想访问“www.magedu.com”网站(101.200.168.230 80端口)。但用户A是私有地址,网站服务器是公有IP地址,中间没有路由器可以连通,那么使用“NAT技术”,可以实现用户A的需求。
使用NAT的SNAT,可以把内网的私有IP地址(用户A:172.22.0.100)转换为一个外网IP地址(61.149.192.219),通过外网IP地址访问互联网上的服务器(101.200.168.230)。
如下图中,只查看“NAT”表的“请求报文”。SNAT只会修改“源地址”,“目标地址”不变。
总结:请求报文的源地址改变,就是SNAT。
1.2PAT工作原理
说明
企业内网用户A(172.22.0.100 123端口)用户B(172.22.0.200 123端口),都想访问“www.magedu.com”网站(101.200.168.230 80端口)。
假设用户A、用户B都使用123端口,那NAT服务器的响应报文,返回网站的结果就不知道要发送给哪台主机了,因为它们的端口号一样,都是123端口。
那么,使用NAT的PAT可以解决这个问题。“PAT”可以把“IP地址和端口都转换”。
就是说:NAT可以把,自身的123端口与用户A的123端口关联;自身的456端口与用户B的123端口关联。而端口号有六万多个,这样就可以实现,企业内部,可以同时很多人使用私有IP地址访问互联网。
1.3DNAT工作原理
- 请求报文的目标地址改变,就是DNAT。
- 通过SNAT,使得企业内部可以访问互联网,互联网不能访问企业内部网络。但有时候我们需要从互联网访问企业内部网络,如邮件服务器,我们有时需要在出差的时候,访问公司的邮件。这时候,可以通过NAT技术的DNAT。
- DNAT采用了端口映射的技术。即把NAT服务器的端口,映射为企业内部电脑的某一端口。下面说明中,不一定“80端口”非要对“80端口”,只是好理解才这样举例的。
- 很多对外互联网提供访问企业内部服务器,如WEB服务器,都是用的DNAT。表面看是外网地址,其实都是私有地址,因为直接暴露公司外网地址太危险,容易被***轻松破坏。
- 所以,DNAT保证了企业内部服务器的安全性,还能对外提供服务。
说明
如果员工不在公司,要访问公司内网,可使用DNAT技术。即,在NAT服务器(203.110.1.163)上做端口映射表,如下面表格:
如果访问203.110.1.163的80端口,通过DNAT,就可以访问企业内网的172.22.0.200的80端口这台机器。
同理,访问203.110.1.163的25端口,是访问企业内网的172.22.0.100的25端口这台机器。
公网 | 私网 |
---|---|
203.110.1.163 80端口 | 172.22.0.200 80端口 |
203.110.1.163 25端口 | 172.22.0.100 25端口 |
通过上面,了解DNAT的原理后,在来看DNAT的访问过程
企业用户A(6.6.6.6),想访问企业内部邮箱(172.22.0.100 25端口)。但用户A是公有地址,邮箱服务器是私有IP地址,中间没有路由器可以连通,那么使用“NAT技术”的DNAT,可以实现用户A的需求。
使用NAT的DNAT,在NAT服务器上有一张端口映射表。用户A访问NAT服务器的25端口,就会转到访问企业内部172.22.0.100的25端口上。
如下图中,只查看“NAT”表的“请求报文”。DNAT只会修改“目标地址”,“源地址”不变。
总结:请求报文的目标地址改变,就是DNAT。
2.SNAT
- nat表的target
2.1公司外网IP必须是固定专线
- 适用大型公司,或有这个需求的公司
- SNAT:固定IP
- --to-source [ipaddr[-ipaddr]][:port[-port]]
- --random
添加SNAT的格式:
iptables -t nat(nat表) -A POSTROUTING(链) -s LocalNET!(希望通过SNAT出去,连接互联网的IP地址范围。) ! -d LocalNet(目标IP地址,写不写都行。“!”号是取反的意思。) -j SNAT(指的是NAT的SNAT) --to source-ExtIP(公有地址:企业外网的IP地址。IP地址必须固定)
SNAT的示例:
设置公司内网10.0.1.0/24网段的电脑,且目标地址不是10.0.1.0/24网段,即可通过公司外网101.200.168.1-168.200.168.9中的IP地址访问互联网。
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.1/24 -j SNAT --to-source 101.200.168.1-168.200.168.9(必须是外网固定IP地址)
2.2公司外网有没有固定专线都可用
- 适用小型公司或刚创业的公司。
- MASQUERADE:动态IP,如拨号网络
- --to-ports port[-port]
- --random
- 有没有专线都可以用MASQUERADE
添加SNAT的格式:
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j MASQUERADE(伪装。即伪装成,“当时动态IP地址” 或 “当时拨号上网的IP地址”;或者可以用专线)
SNAT的示例:
设置公司内网10.0.1.0网段的电脑,可以同过公司外网,访问互联网
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j
MASQUERADE
2.3SNAT实验
设备
ID | name | IP | 说明 |
---|---|---|---|
01 | centos7nw | 192.168.238.2 | 企业内网主机 |
02 | centos7nat | 172.22.142.210(外网)、192.168.238.3(内网) | NAT服务器 |
03 | centos7ww | 172.22.142.211 | 互联网主机 |
目的
实现:“内网主机centos7nw”可以 ping通 “互联网主机centosww”
过程
1.查看
1.企业内网主机(192.168.238.2)ping NAT服务器"192.168.238.3"(成功)
2.企业内网主机(192.168.238.2)ping NAT服务器"172.22.142.210"(失败)
3.企业内网主机(192.168.238.2)ping 互联网主机"172.22.142.211"(失败)
2.设置NAT服务器
1.设置
[[email protected] ~]# iptables -t nat -A POSTROUTING -s 192.168.238.0/24 ! -d 192.168.238.0/24 -j SNAT --to-source 172.22.142.211
[[email protected] ~]#
2.查看设置的结果
[[email protected] ~]# iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 20 packets, 3295 bytes)
pkts bytes target prot opt in out source destination
·············
·············
0 0 SNAT all -- * * 192.168.238.0/24 !192.168.238.0/24 to:172.22.142.211
[[email protected] ~]#
3.验证
1.企业内网主机(192.168.238.2)ping 互联网主机"172.22.142.211"(成功)
2.在互联网主机上,使用“tcpdump -i eth1 -nn icmp”查看谁在ping“我”。发现是“172.22.142.210”在ping。
3.DNAT
- DNAT
- --to-destination [ipaddr[-ipaddr]][:port[-port]]
3.1添加DNAT的格式
iptables -t nat(nat表) -A PREROUTING(链) -d ExtIP(企业外网IP地址) -p tcp|udp --dport PORT(企业外网IP地址的端口号) -j DNAT --to-destination InterSeverIP:PORT
3.2DNAT的示例
示例1:
互联网用户,通过NAT服务器的外网地址172.18.100.6,访问企业内部的服务器10.0.1.22
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 22 -j DNAT --to-destination 10.0.1.22
示例2:
互联网用户,通过NAT服务器的外网地址172.18.100.6 80端口,访问企业内部的服务器10.0.1.22 8080端口
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 80 -j DNAT --to-destination 10.0.1.22:8080
3.3DNAT实验
设备
ID | name | IP | 说明 |
---|---|---|---|
01 | centos7nw | 192.168.238.2 | 企业内网服务器 |
02 | centos7nat | 172.22.142.210(外网)、192.168.238.3(内网) | NAT服务器 |
03 | centos7ww | 172.22.142.211 | 互联网用户主机 |
目的
实现:“互联网用户centosww可以 浏览 “企业内网web服务器centos7nw”网页
过程
1.查看
1.互联网用户(172.22.142.211)ping NAT服务器"172.22.142.210"(成功)
2.互联网用户(172.22.142.211)ping NAT服务器"192.168.238.3"(失败)
3.互联网用户(172.22.142.211)浏览 企业内部web服务器"192.168.238.2"网页(失败)
2.设置NAT服务器
1.设置
[[email protected] ~]# [[email protected] ~]# iptables -t nat -A PREROUTING -d 172.22.142.210 -p tcp --dport 80 -j DNAT --to-destination 192.168.238.2
[[email protected] ~]#
2.查看结果
[[email protected] ~]# curl 192.168.238.2
3.验证
1.互联网用户(172.22.142.211)浏览 企业内部web服务器"192.168.238.2"的网页(成功)
curl 192.168.238.2
2.在企业web服务器上,使用“tail /var/log/httpd/access_log”查看日志,查找谁在浏览网页。发现是“172.22.142.211”在浏览。
4端口转发(端口重定向)
- NAT表可用到
- 可用于:PREROUTING链、 OUTPUT链、 自定义链
- 通过改变目标主机的IP和端口,将接受的包转发至不同端口
- --to-ports port[-port]
示例
将访问本机(172.16.100.10)80端口的,都转给本机的8080端口
iptables -t nat -A PREROUTING -d 172.16.100.10 -p tcp --dport 80 -j REDIRECT --to-ports 8080
说明
1.当前,互联网用户A,想要访问企业内网的web服务器(192.168.100.2)。
2.企业内网有一台NAT服务器,外网IP是“172.22.10.2”,内网IP是“192.168.100.1”。
3.在NAT服务器上设置了DNAT,指定:NAT服务器上的80端口,映射为企业内网web服务器的8080端口。
4.想要映射成功,就必须在web服务器上做设置,即端口重定向。不然,只是单方面的在NAT服务器上配置,没有在对应的服务器(web服务器)上设置,就不会生效。
5.在web服务器上,设置httpd服务的端口为“8080”,在添加端口重定向(参考上面示例设置)。
原文地址:https://blog.51cto.com/13465487/2398686