Port Forwarding Port Triggering
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
闲话少叙,举例为证:
某 网络示意图:
Internet --- 网关 --- 私网服务器(内IP1)
^ ^
外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相关推荐
- 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 ...
- 【工具使用】怎么设置SSH隧道(Port Forwarding)
SSH隧道(SSH tunneling)是一个在一个客户端和服务器之间创建加密的SSH连接的方法,它通过能够被转播的端口进行. SSH传送(SSH forwarding)对于运送网络中的服务数据很有用 ...
- Port Forwarding(端口转发)简单介绍
一. Port Forwarding的作用 正常情况下,外网设别是无法直接访问内网的,端口转发就是建立一个通道,用于外网访问内网的服务. 二. Port Forwarding简单应用 现有一台路由器, ...
- VSCode远程连接时Remote host key has changed, port forwarding is disabled
could not establish connection to "":Remote host key has changed, port forwarding is disab ...
- 报错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: ...
- 从Android访问PC端的port (reverse port forwarding)
2019独角兽企业重金招聘Python工程师标准>>> 大致就是 Device side: install SSH Server, add ssh server on 22222 p ...
- SSH Tunnel扫盲(ssh port forwarding端口转发)
2019独角兽企业重金招聘Python工程师标准>>> SSH的的Port Forward,中文可以称为端口转发,是SSH的一项非常重要的功能.它可以建立一条安全的SSH通道,并把任 ...
- SSH port forwarding: bind: Cannot assign requested address
https://www.electricmonk.nl/log/2014/09/24/ssh-port-forwarding-bind-cannot-assign-requested-address/ ...
- Win下的port forwarding
WIndows2008 R2 将192.168.1.1的3389端口数据转发到192.168.2.1的3389端口 netsh interface portproxy add v4tov4 liste ...
最新文章
- Unknown host 'services.gradle.org' 解决方法
- cgo的几种使用方式
- 怎么绕过论坛回复_铝散热片铆钉怎么压得快,有没有自动化设备
- IOS之AFNetworking,SDWebImage,Kingfisher,Alamofire,FMDB框架的使用
- 平安 开源 数据库 实践_刻意的实践-成为开源
- pdf python定位_如何使用PyPDF2获取PDF定位
- Android项目中如何用好构建神器Gradle?
- mysql 1000万数据读取_插入1000万条数据到mysql数据库表
- java 依赖其他项目时如何导出_使用Eclipse将具有外部依赖性的Java项目导出到jar...
- C++基础算法学习——熄灯问题
- junetxtdb.class.php,PHP-site
- mysql 隐式转换 索引_MySQL性能优化:MySQL中的隐式转换造成的索引失效
- matlab 双谱分析,AR双谱估计的Matlab实现.doc
- 2019年消防工程师综合必看考点:建筑分类、高度、层数
- 脱单盲盒小程序源码_微信脱单盲盒源码_交友盲盒系统源码
- 计算机如何更新目录,wps更新目录【设置办法】
- 北京君正案例:超能面板PRO采用4英寸IPS超清多彩屏,值不值得买?
- MySQL:使用NavicatIP远程连接失败,提示“is not allowed to connect to this MySql server”
- 宇宙为什么没有单独存在的夸克,强行将夸克拉出来会怎样?
- 《黑客帝国:矩阵重启》科幻经典回归,你会选择红色药丸还是蓝色药丸
热门文章
- React 深度学习:ReactFiberLazyComponent
- 83. Remove Duplicates from Sorted List
- API 版本控制的几种方式
- Unity Game Starter Kit for Windows Store and Windows Phone Store games
- 在win8上安装mysql_如何在Win8系统上安装MySQL 5.6
- qt判断读入的字符串是否含有英文_459. 重复的子字符串
- 黎曼猜想的1/2和质子自旋的1/2会不会是一个数?
- yum 安装PHP之后如何启动,如何用yum安装php_后端开发
- vue请求在退出页面还执行吗_如何用 Cloudbase Framework 部署一个 Vue 项目
- python输入输出简单例子_Python 文件和流的简单示例