将本地端口直接映射到远程地址或通过http隧道映射,绕过防火墙,将较少的服务端口暴露给外部网络,如互联网
安装
npm -g install proxy-tcp
运行:推荐使用 pm2
第一个参数为配置文件的路径,其中 .mapping 中设置端口映射关系。
cd `npm -g root`/proxy-tcp
pm2 start . --name proxy-tcp --instances 2 -- "./example/pm2.json"
or
pm2 start `npm -g root`/proxy-tcp/example/pm2.json
edit pm2.json, change mapping part to meet your requirement.
proxy-tcp `npm -g root`/proxy-tcp/example/pm2.json
连接内网被屏蔽互联网访问的 tcp 服务,如 oracle
(directly)
/ -------------------> \
client ------> proxy-tcp target(TCP server)
(TCP server) \ --- http tunnel ---> /
^
(http server that accept method:connect request)
客户端侧启动 port mapper,将连接到本地端口的连接接续到最终目标监听地址,包括两种方式:
配置数据格式,形如
"mapping": {
"127.0.0.1:6003": {
"target": "qhtdb1:61521",
"proxy": "localhost:80"
},
":6001": {
"target": "qhtdb1:61521"
}
}
mapping := (
key: {
target: "host:port",
proxy?: "host:port"
}
)
在 DMZ 区域,防火墙策略经常是内网地址到外网地址之间双向不能直接连接,
只能通过 DMZ 区的地址间接连接。
通过本代理,一方比如说外部要想访问内部服务,可以采用如下方案:
意义:
如果 DMZ 防火墙策略规定只能留一个对外部监听端口,
那么可以部署一个一次性且配置不会改变的 http tunnel(参考 uniproxy),
然后再外网部署本TCP代理,配置通过 http tunnel 代理连接到目的内网地址。
这样,以后不管添加多少网络接续配置,都不用去DMZ对 http tunnel 做任何变动,
只要在外网修改本TCP代理的配置即可,维护十分方便。
很多时候,组织内部网络中的服务,特别是http服务,通过一个统一的对外 reverse http server 来访问,
外部互联网用户访问该组织的服务,都先访问该对外http服务,并由之反向代理到内部http服务。
但是,当一些内部服务,如 oracle service,他是基于 TCP 而不是 http 的,
那么默认情况下,oracle client 端软件只能直接发出TCP数据,无法使用 http tunnel。
因此,可以做以下三项工作来弥补: