2019独角兽企业重金招聘Python工程师标准>>>

在使用NAT的网络中,内部终端的IP地址为私网地址,发出去的IP包在NAT网关处进行地址转换,以公网地址与外部联系。在转换过程中,网关建立映射 表,并维护对应连接的状态。当来自公网的包返回时,按照目的地址查找映射表,找到对应的私网地址,然后再次转换后发送给内部终端。这样,映射表中条目的增 加是由内部发往外部的数据流触发的。因此,如果外部想直接访问内部是不可能的。

在实际应用中,被NAT网关隐藏起来的内网很可能架设FTP服务器、HTTP服务器、邮件服务器等等,那么如何从外部访问这些服务器呢?Port Forwarding提供了这样的机制。Port Forwarding根据来自公网的IP包的端口,将其转发到指定的内部IP地址上。例如,一个NAT网关的WAN侧地址为123.4.5.6,内部架设 了一台FTP服务器,地址为192.168.0.8,端口21,及一台HTTP服务器,地址为192.168.0.9,端口8080NAT网关(可能是路 由器)上设置Port Forwarding规则:

若Inbound的IP包目的地址为123.4.5.6,端口21,则将其地址转换为192.168.0.8,端口21,然后向内网转发;若 Inbound的IP包目的地址为123.4.5.6,端口80,则将其地址转换为192.168.0.9,端口8080,然后向内网转发。

这样,通过设置Port Forwarding,从外网可以直接访问到内网的服务器。这里还有一个好处,对于某些linux服务器,只有root权限才可开放端口号小于1024的 服务,而使用root帐号具有一定的风险,因此如上例,可设置内网HTTP服务器端口为8080,当外部采用常规的HTTP 80端口访问时,会映射到8080端口。

路由器某一接口 inbound为 流入;outbound为流出。

Port Triggering,是指当Outbound的流来自指定的内网端口(triggered port),自动打开网关WAN侧接口的指定端口(forwarded port),并将指向forwarded ports的流转发到内网触发triggered ports的终端上。引用wiki上关于port triggering的一个例子,IRC(Internet Relay Chat)使用Ident协议(113端口)来验证用户。当连接IRC时,客户电脑通常以端口6667与服务器建立连接,然后IRC服务器建立到客户电脑 113端口的连接来验证用户。如果只有NAT,inbound到端口113的流将被丢弃,因为NAT网关无法知道是内网哪台机器发出的outbound 流。而Port Triggering则解决了这个问题。

与静态配置的Port Forwarding相比,Port Triggering提供更大的灵活性,因为无需指定具体的内网终端地址,网关会在trigger时自动记录。

Port Forwardig中的外网端口是一直开放的,而Port Triggering中外网端口是只在trigger后才开放。

从配置的角度来说,Port Forwarding需要配置内部服务器的IP地址和端口,以及外网地址的端口,Port Triggering只要配置Outbound流的端口(triggered port)和Inbound流的端口(forwarded port)

最后,顺便说一下DMZ。设置Port Forwarding实际相当于设置了一些virtual server。对于Inbound但不属于Virtual Servers表中应用程序的报文,可以将其映射到一个固定的主机,即DMZ Host。DMZ将来自外网的未知流定向到一台机器上,从而可以提供对内网其他机器的安全保护。

经常用到和说的是snat
端口转发、负载均衡是dnat

闲话少叙,举例为证:

  1. 某 网络示意图:

  2. Internet --- 网关 --- 私网服务器(内IP1)

  3. ^      ^

  4. 外IP      内IP0

复制代码

要想让私网服务器的80口能够通过外IP的8080口上访问,在Linux网关上敲入:
iptables -A PREROUTING -t nat -d 外IP -t tcp --dport 8080 -j DNAT --to-destination 内IP1:80

意思是:凡发往外IP:8080的所有tcp数据包,都把他们的目标变成内IP1:80

配置完后,公网用户就可以访问http://外IP:8080来浏览私网服务器的网页了。

转载于:https://my.oschina.net/xxjbs001/blog/187319

Port Forwarding Port Triggering相关推荐

  1. How to Set up SSH Tunneling (Port Forwarding)?

    How to Set up SSH Tunneling (Port Forwarding) Example:ssh -N -L 0.0.0.0:8005:127.0.0.1:8005 username ...

  2. 【工具使用】怎么设置SSH隧道(Port Forwarding)

    SSH隧道(SSH tunneling)是一个在一个客户端和服务器之间创建加密的SSH连接的方法,它通过能够被转播的端口进行. SSH传送(SSH forwarding)对于运送网络中的服务数据很有用 ...

  3. Port Forwarding(端口转发)简单介绍

    一. Port Forwarding的作用 正常情况下,外网设别是无法直接访问内网的,端口转发就是建立一个通道,用于外网访问内网的服务. 二. Port Forwarding简单应用 现有一台路由器, ...

  4. VSCode远程连接时Remote host key has changed, port forwarding is disabled

    could not establish connection to "":Remote host key has changed, port forwarding is disab ...

  5. 报错Exception opening port “18080“ (port may be in use), cause: “java.net.BindException: Address alrea

    Exception opening port "18080" (port may be in use), cause: "java.net.BindException: ...

  6. 从Android访问PC端的port (reverse port forwarding)

    2019独角兽企业重金招聘Python工程师标准>>> 大致就是 Device side: install SSH Server, add ssh server on 22222 p ...

  7. SSH Tunnel扫盲(ssh port forwarding端口转发)

    2019独角兽企业重金招聘Python工程师标准>>> SSH的的Port Forward,中文可以称为端口转发,是SSH的一项非常重要的功能.它可以建立一条安全的SSH通道,并把任 ...

  8. SSH port forwarding: bind: Cannot assign requested address

    https://www.electricmonk.nl/log/2014/09/24/ssh-port-forwarding-bind-cannot-assign-requested-address/ ...

  9. Win下的port forwarding

    WIndows2008 R2 将192.168.1.1的3389端口数据转发到192.168.2.1的3389端口 netsh interface portproxy add v4tov4 liste ...

最新文章

  1. Unknown host 'services.gradle.org' 解决方法
  2. cgo的几种使用方式
  3. 怎么绕过论坛回复_铝散热片铆钉怎么压得快,有没有自动化设备
  4. IOS之AFNetworking,SDWebImage,Kingfisher,Alamofire,FMDB框架的使用
  5. 平安 开源 数据库 实践_刻意的实践-成为开源
  6. pdf python定位_如何使用PyPDF2获取PDF定位
  7. Android项目中如何用好构建神器Gradle?
  8. mysql 1000万数据读取_插入1000万条数据到mysql数据库表
  9. java 依赖其他项目时如何导出_使用Eclipse将具有外部依赖性的Java项目导出到jar...
  10. C++基础算法学习——熄灯问题
  11. junetxtdb.class.php,PHP-site
  12. mysql 隐式转换 索引_MySQL性能优化:MySQL中的隐式转换造成的索引失效
  13. matlab 双谱分析,AR双谱估计的Matlab实现.doc
  14. 2019年消防工程师综合必看考点:建筑分类、高度、层数
  15. 脱单盲盒小程序源码_微信脱单盲盒源码_交友盲盒系统源码
  16. 计算机如何更新目录,wps更新目录【设置办法】
  17. 北京君正案例:超能面板PRO采用4英寸IPS超清多彩屏,值不值得买?
  18. MySQL:使用NavicatIP远程连接失败,提示“is not allowed to connect to this MySql server”
  19. 宇宙为什么没有单独存在的夸克,强行将夸克拉出来会怎样?
  20. 《黑客帝国:矩阵重启》科幻经典回归,你会选择红色药丸还是蓝色药丸

热门文章

  1. React 深度学习:ReactFiberLazyComponent
  2. 83. Remove Duplicates from Sorted List
  3. API 版本控制的几种方式
  4. Unity Game Starter Kit for Windows Store and Windows Phone Store games
  5. 在win8上安装mysql_如何在Win8系统上安装MySQL 5.6
  6. qt判断读入的字符串是否含有英文_459. 重复的子字符串
  7. 黎曼猜想的1/2和质子自旋的1/2会不会是一个数?
  8. yum 安装PHP之后如何启动,如何用yum安装php_后端开发
  9. vue请求在退出页面还执行吗_如何用 Cloudbase Framework 部署一个 Vue 项目
  10. python输入输出简单例子_Python 文件和流的简单示例