网络应用

内网穿透工具nps使用教程(二)

前言

上一篇中我们提到了如何配置nps服务端和客户端,以及如何让服务端与客户端匹配连接。本篇会介绍如何添加具体的内网穿透规则,从而让内网设备可以被外界访问。

tcp/udp隧道

使用场景
Windows远程桌面,ssh连接,vnc连接,游戏开服,内网架设dns服务器等

配置方法
以Windows远程桌面为例,其默认使用3389端口。假设局域网内有一台IP为192.168.1.100的Windows设备,那么,在同一局域网下,只要访问192.168.1.100:3389即可连接。但如果想要从外网连接,则必须添加一条tcp转发规则,把内网设备的3389端口,映射到服务端的某个端口,这里假设使用服务器的10000端口。假如服务器IP为12.34.56.78,那么,映射完成后,外网访问12.34.56.78:10000的请求会全部被转发到192.168.1.100:3389,也就是说,访问12.34.56.78:10000即可连接内网的windows设备。具体配置如下。

首先登录网页管理面板,查看并记住客户端id(例子中id是9)。选择左侧导航栏的tcp隧道,点击新增
add_tcp.png
完成后,尝试通过 服务器IP:外网端口 连接内网windows设备,如可以成功连接,则内网穿透成功。

添加udp隧道的方式与tcp类似,udp可用于映射内网dns服务器,根据自身需求配置即可。

win_rdc.png

p2p连接

使用场景
大文件传输,如在内网架设NAS,流量不经过服务器转发

要求
目标内网设备与访问端都需要运行npc,且二者NAT类型不能同时为对称型网络

视频教程

配置方法
首先,我们需要编辑内网穿透服务器的配置文件,让服务器支持p2p穿透。先通过./nps stop停止服务,打开nps/conf/nps.conf,在末尾添加以下代码

#p2p
p2p_ip=<服务器公网IP,不要填域名,不要填127.0.0.1>
p2p_port=<默认使用6000端口,可自行配置>

请确保p2p_ip准确的填写了服务器的静态公网IP,否则会导致p2p穿透失败。编辑完成后保存并退出,使用./nps start重新启动服务。

之后,请前往网页管理面板添加一条p2p转发记录
add_p2p_record.png
需要注意的是,唯一验证密钥既被作为连接密码,也被作为目标端的身份标识。如果有多条p2p记录,请保证唯一验证密钥不要重复。

完成后,可以在记录下看到访问端需要输入的命令。
visitor_command.png
如果访问端为windows设备,请把"./npc"替换为"npc"。此项记录的意思是,把访问端的本地端口(默认为2000,可在命令后添加"-local_port=xxx"来指定)绑定到目标内网设备的目标端口3389。这样,只要在访问端输入127.0.0.1:2000就能连接目标设备的远程桌面了。如果访问端和目标端的NAT类型都符合要求,那么二者就可以直接通信,流量不需要再走服务器转发了。反之,如果NAT类型不符合要求,npc会报告p2p穿透失败,并继续使用服务器转发流量。

值得注意的是,手机、平板等无法运行npc的设备是无法直接使用p2p的。如果想使用p2p连接,则要保证同网段下至少有一台能运行npc的设备(假设该设备内网IP为192.168.1.10),然后再用手机平板访问192.168.1.10:2000(或自定义本地端口)来访问目标设备。

回复

  1. liucheng liucheng
    Chrome 83 10

    我安装您的文档,普通的穿透成功了,但是p2p失败了。
    请问有什么工具可以检测p2p能否穿透成功吗?因为我无法确定,是我这边p2p无法真的无法穿透,
    还是我自己配置有问题。

  2. 张三丰 张三丰
    Sogo 10

    p2p连接建立失败,怎么查找原因

    1. Yuki Yuki
      Chrome 83 10

      我也是这样,p2p连接不成功

  3. [...]NPS其实是跟FRP差不多的工具,都是需要一个VPS作为中控,然后两边AB终端单独运行客户端,与中控建立连接。但是在这里,NPS还有一个另外的功能——P2P转发。这个P2P转发的思路真的不错,之前从来没有考虑过,现在仔细想想感觉还真的挺有道理的。仔细想一下,难道两个NAT的网络终端真的无法直接通信吗?那平常我迅雷,uTorrent怎么做的种啊?顺着这个视频的教程,在加上另一个教程,我成功的把整个系[...]

  4. nps nps
    Safari 13 < 11

    可以详细讲一下socks5代理使用吗,为什么失败了,p2p也失败了

  5. AOI AOI
    Mi

    看附图貌似博主手机和电脑p2p成功了?
    请教一下这个要怎么做到

  6. loren loren
    Chrome 99 10

    显示错误
    2022/03/18 16:34:42.282 [I] [local.go:115] successful start-up of local tcp monitoring, port 2000
    2022/03/18 16:34:43.294 [N] [local.go:142] try to connect to the server 1
    2022/03/18 16:34:43.892 [E] [control.go:290] strconv.Atoi: parsing "": invalid syntax
    2022/03/18 16:34:43.893 [E] [control.go:310] strconv.Atoi: parsing "": invalid syntax
    2022/03/18 16:34:43.893 [E] [local.go:206] strconv.Atoi: parsing "": invalid syntax
    2022/03/18 16:34:43.894 [N] [local.go:142] try to connect to the server 2
    2022/03/18 16:34:44.568 [E] [local.go:206] listen udp 192.168.11.218:60583: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
    2022/03/18 16:34:44.569 [N] [local.go:142] try to connect to the server 3
    2022/03/18 16:34:45.164 [E] [local.go:206] listen udp 192.168.11.218:60583: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
    ……

  7. ghostzwc ghostzwc
    Chrome 130 10

    tcp穿透 成功但是P2P还是失败

This is just a placeholder img.