Linux 篇 | NAT服务

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

时间: 2024-10-25 19:43:54

Linux 篇 | NAT服务的相关文章

linux配置vncserver服务

挨踢这么多年,几乎很少记录自己解决的问题,因为总感觉那些问题对于高手来说,都是小菜,所以碍于颜面,不好意思写! 后来想明白了,写下来,能帮助新手,又能帮自己做个记录,下次碰到同样问题,就不用百度google了-- 这篇就算***作吧,好了,言归正传-- 想连接某台linux服务器,方法很多,但是听说除了vnc,其他方法断开网络后,程序会中断运行,只是听说,具体是不是这样,我就不太清楚了,为了保险,还是就用vnc吧. 1.           安装vncserver 我安装linux系统的时候,没

Linux之Web服务(2)Httpd服务配置之一

Linux之Web服务(2)Httpd服务配置之一 Apache HTTP Server Apache HTTP 服务器,简称Apache,是非常留下的Web服务器软件.通常和脚步语言比如PHP,数据库MySQL一起工作,合成为LAMP栈(Linux, Apache, MySQL, PHP). 当然流行的Web服务器还有nigix,但是nigix虽然轻量级很稳定,但是功能并不如Apache HTTP功能丰富,并且现在的Apache HTTP还支持模块化功能,及可以开发自己的功能模块并加入到此We

Linux之Web服务(2)Httpd服务配置之二

Linux之Web服务(2)Httpd服务配置之二 前言 在上一篇通过一些简单的案例或说明来介绍了部分关于Httpd2.4中httpd.conf配置文件中的配置选项及对应的功能.主要是对访问控制和在处理对指定目录或文件进行访问控制的一些安全问题性的处理.但是一直没有提到访问控制的具体讲解,本篇列出访问控制的具体使用选项和功能,以及其它高级配置. 1.Httpd2.4 文档访问授权具体参数 前提:文档访问授权选项配置只适合在以下标签中生效: <Directory >  <FIles>

Linux之Web服务(2)Httpd服务配置之四

Linux之Web服务(2)Httpd服务配置之四 前言 接上一篇的虚拟主机,本片主要介绍虚拟主机的一些搭建和部署,本篇通过一个具体的案例来显示虚拟主机的作用和特性. 案例功能介绍: (1) 准备DNS解析3个域名或者添加/etc/hostst/3条主机名IP档案,解决域名解析 (2) 基于主机名实现三个虚拟主机 (3) 每虚拟主机使用独立的访问日志和错误日志 (4) 在第二个虚拟主机上提供/status: (5) 在第三个虚拟主机提供路径别名/bbs,访问其它文件系统路径: (6) 第三个虚拟

网络版shell之网络编程练习篇--telnet服务端

网络版shell之网络编程练习篇--telnet服务端 以前写过一个shell命令解释器,对与shell命令解释器的执行流程有了清晰的认识,这段时间学习网络编程,至于网络编程的细节以及知识点,已经在上 一遍博客中,转载了从网上摘的文章,基本概括了网络编程的主要api,而对于程序员,更重要的是解决实际问题的能力,所以练习是非常重要的,现在,我们在 一起shell命令解释器的基础上,写一个基于socket网络编程的网络版shell命令解释器,也可以称之为telnet服务端.  telnet服务端代码

linux下DNS服务器之视图和轮询

案例4 视图  viwer 拓扑图: 1.查看帮助 [[email protected] ~]# vim /usr/share/doc/bind-9.8.2/sample/etc/named.conf [[email protected] ~]# cd /var/named/chroot/etc 2.[[email protected] etc]# vim named.conf 添加视图: 36 view    "lan-view" 37 { 38 zone "."

linux下维护服务器之常用命令

linux下维护服务器之常用命令! 第1套如下: 正则表达式: 1.如何不要文件中的空白行和注释语句: [[email protected] ~]# grep -v '^$' 文件名 |grep -v '^#' 2.如何查阅系统上面正在运作当中的程序呢? 利用静态的 ps 或者是动态的top,还能以 pstree 来查阅程序树之间的关系! 一个是叧能查阅自己 bash 程序癿『 ps -l 』一个则是可以查阅 所有系统运作癿程序『 ps aux 』 [[email protected] ~]#

linux下tomcat服务的启动、关闭与错误跟踪

linux下tomcat服务的启动.关闭与错误跟踪,远程连接到服务器以后,通常通过以下几种方式启动关闭tomcat服务: 1).启动tomcat服务 进入tomcat主目录下的bin目录,然后执行如下命令: ./startup.sh 2).关闭tomcat服务 进入tomcat主目录下的bin目录,然后执行如下命令: ./shutdown.sh 通过1)启动的tomcat有个弊端,当客户端连接断开的时候,tomcat服务也就立即关闭了,通过以下命令可以作为linux服务一直运行 3).作为服务启

linux下vsftp服务搭建

实验拓扑: Linux Client -----RHEL5.9(vmnet1)----------(vmnet1) Win7 Client 实验一:测试默认安装vsftpd的结果 匿名用户与本地用户都可以登录 匿名用户登录到/var/ftp,只能下载不能上传 本地用户登录到本地用户的家目录,可以上传和下载 [[email protected] ~]# rpm -q vsftpd  //检查软件包是否安装 package vsftpd is not installed [[email protec