ehang-io / nps

一款轻量级、高性能、功能强大的内网穿透代理服务器。支持tcp、udp、socks5、http等几乎所有流量转发,可用来访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析、内网socks5代理等等……,并带有功能强大的web管理端。a lightweight, high-performance, powerful intranet penetration proxy server, with a powerful web management terminal.
https://ehang.io/nps/documents
GNU General Public License v3.0
30.47k stars 5.5k forks source link

socks和http代理为什么不能设置 目标IP和端口? #1062

Closed yywangvr closed 2 years ago

yywangvr commented 2 years ago

问题描述

配置tcp隧道时是可以配置被代理的tcp目标端口的,这个我已经操作成功。但是,本人在内网中设置了一个http网页,端口为8888,想通过http或者sock代理进行穿透内网访问,但是发现NPS不能配置这个目标ip地址和端口。

如图所示,NPS的web管理界面添加socks代理时,为什么只能设置公网服务器的端口,却不能设置侦听的内网socks的端口呢?

所以,在不给socks和http设置被代理的内网端口时,NPS又如何找得到目标呢?是不是NPS有个bug?

sock1 sock2

初次使用,不甚理解,望赐教!

nineling commented 2 years ago

首先说明,代理≠穿透,代理是被代理的设备(终端)通过代理服务器访问代理服务器上的资源(资源包括网络资源),穿透是公网(外网)通过穿透服务器访问到你的内网资源。说简单点,代理就是你访问别人用的,你访问别人不用指定端口。穿透是别人访问你用的,你开的端口就是你的门户,你开哪个别人才能访问哪个,不然会很危险,所以要指定端口。代理IP是把你NPC(客户端)连接的服务器作为代理服务器,NPS(服务端)本身是不做代理的,连接到你的客户端,把你指定的客户端作为代理,你在任何设备上都能通过代理端口访问这个代理服务器。当然你也可以代理到你内网服务器上的客户端,然后在另一台设备(终端)上连接到代理的服务器端口,也能访问你在内网的网站,Windows自带代理的功能就可以,你可以试试。还有这不是bug

yywangvr commented 2 years ago

@nineling 谢谢你的解释,术业有专攻,看得出来你很专业。

能否根据一个具体例子再解释一下,假设现在有三台机子:

ps. 很多教程提到了nginx和域名,这个应该不是必须的吧?

nineling commented 2 years ago

我并不专业,只是个臭打游戏的想搭个服务器,没什么基础所以对不明白的人有些感同身受。 对于你的问题,访问自己的网站用代理的这个行为没什么必要。对于代理的作用给你打个比方,你的C想访问一个网站,但是C所在的地区访问不了这个网站,然而你的A所在的地区能访问,这时候你就可以在A上建立一个代理服务器,让C通过A的代理来访问这个网站(没错这个例子就是翻墙)。

你想访问A的网站直接用TCP隧道就行了,tcp是可以发送http请求的(并且不止发送http,详情百度),把你网站的端口在TCP隧道上设置成本地端口,外网端口随便设置,在NPS的IP后面加上外网的端口号就能访问网站了。 当然,你要是实在想这样也不是不行,创建http代理,选择A的NPC客户端编号,然后在C上用工具或者Windows自带的代理连接到代理服务器,IP填B机子的,端口填创建时设置的端口,然后全局代理,就可以在C上访问你的网站了。

nineling commented 2 years ago

域名相当于一个跳板,别人访问你的域名时域名服务器会把域名解析到你在后台填的ip,域名比较好记,也不会直接暴露自己的ip(不用特殊方法隐藏的话是可以查到的),域名是需要购买的,想在国内建站的话网站域名还需要备案(备案稍微有点麻烦),自己用的话直接用ip就行了。 nginx是做反向代理和降低服务器负载用的,反向代理是隐藏你的A主机的IP,让别人只能看到代理主机B的ip来保证A的安全,内网穿透的话A本来就没公网,访问网站本来就需要通过B,所以不需要反向代理,其次是 网站访问量比较大,nginx可以用一些方法降低服务器负载,具体自己查,网站访问量不大的话就没必要了。

yywangvr commented 2 years ago

@nineling 谢谢你耐心解释,问题已经解决。