码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 篇 | NAT服务

时间:2019-05-23 09:34:37      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:拨号   out   mamicode   企业服务   结果   小型   端口号   centos   enter   

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.设置
[root@centos7nat ~]# 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
[root@centos7nat ~]#

2.查看设置的结果
[root@centos7nat ~]# 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
[root@centos7nat ~]#

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.设置
[root@centos7nat ~]# [root@centos7nat ~]# iptables -t nat -A PREROUTING -d 172.22.142.210 -p tcp --dport 80 -j DNAT --to-destination 192.168.238.2
[root@centos7nat ~]#

2.查看结果
[root@centos7nat ~]# 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”,在添加端口重定向(参考上面示例设置)。

Linux 篇 | NAT服务

标签:拨号   out   mamicode   企业服务   结果   小型   端口号   centos   enter   

原文地址:https://blog.51cto.com/13465487/2398686

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!