K2P路由器安装frp远程管理N1机顶盒

image-20240325192321502

下一步计划:由于scrcpy的audio forwarding 需要 Android 11+;可有其他方案能传输语音?usbaudio 如果存在的话就可以使用web端的scrcpy共享出机顶盒的TVBOX点播功能

有什么用

frp内网穿透后,可以主动发起远程控制处于无共网IP下的ADSL宽带内主机

借助以下主体(前提条件):

  1. FRPS 服务端
    1. 自行搭建服务端(详细见文章:Docker搭建FRP内网穿透服务)
    2. 可以使用互联网上开放的FRP服务端也是可以的(无需自己搭建)
    3. 运行着FRPS服务端程序
  2. K2P路由器(被控端)
    1. 用来宽带拨号用的路由器,路由器ADSL拨号(或者DHCP自动获取光猫下的IP)上网
    2. 安装FRPC客户端,搭配frpc.ini配置文件(定义了如何将本地内网中的特定服务穿透到互联网中)
  3. 本地电脑(主控端)
    1. 这也是运行FRPC客户端,搭配frpc.ini配置文件(定义了如何将被控端特定的穿透,承接到本地的特定端口来;实现:访问本机特定端口既等同于访问远程被控端主机的特定主机+端口)
    2. 本文已Mac OSX为例,通过Terminal终端,运行./frpc frpc.ini来启动p2p模式;实现:访问本机特定端口既等同于访问远程被控端主机的特定主机+端口
    3. 根据被控端穿透的服务(比如http或者ssh等…);通过打开浏览器或者命令行来连接本地的特定端口,实现:等同于访问远程被控端主机的特定主机+端口(这整个过程,我理解为:‘穿透’)

K2P路由器安装frp远程管理N1机顶盒

怎么用

通过配置好以后的FRP服务端,K2P路由器运行frpc和本地电脑运行frpc;最终使用浏览器或者命令行来访问远程被控端主机的特定主机+端口

例子一:打开浏览器,在地址栏中输入:http://127.0.0.1:22251/

例子二:打开Terminal,输入安卓远程控制桌面的命令 scrcpy –tcpip=127.0.0.1:22253

例子三:打开Terminal,输入ssh admin@127.0.0.1 -p 22252

相关内容

跨ISP运营商网络连接被屏蔽故障与解决

故障表现:同样的客户端(被控端+主控端)和服务端,当被控端和主控端跨越不同的网络宽带运营商时,数据网络连接被屏蔽掉了;比如被控端处于中国移动的ADSL;主控端在中国移动的网络下可以正常连接scrcpy –tcpip=127.0.0.1:22253,而当主控端的网络切换到中国联通的ADSL网络下则无法连接成功。

解决方法探索:

  1. 切换FRP的配置,从端对端的模式到,连接仅连接到FRPS服务端的模式。

    根据Docker搭建FRP内网穿透服务配置实例如下:

    [zl_f10_n1_adb5555]
    type = tcp
    local_ip = 192.168.1.243
    local_port = 5555
    remote_port = 6008

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #这种服务器中转模式下的测试
    scrcpy --tcpip=192.168.6.116:6008

    #更新完配置以后,需要远程重启frpc;这个地方有一个技巧性的坑,如果直接kill掉原先的frpc进程就会永久性断连了,需要用到shell的 && 命令,来一次性执行多条指令,实例如下:
    kill -9 762 && /tmp/frpc -c /etc/storage/frpc.ini &
    #这里假设原先的frpc进程ID是762,我们先kill(这时我们当前的ssh其实已经断开了),然后连续执行 && 新的 frpc,并且 & 后台执行(这很关键,确保当前ssh进程关闭以后,frpc在后台继续执行)。
    #这样就实现了刷新frpc进程的目的,刷新是为了启用新的frpc.ini配置。

    #9:09pm 切换到中国移动的WIFI,也是无法连接, 可能n1关机了,换个时间继续测试
    #通过Web http://127.0.0.1:22251 查看,确定了问题是因为n1关机,换个时间继续测试

0405 3:20pm 切换到hby的中国移动宽带,依旧无法连接到ZL的中国移动下的192.168.1.243 5555

每天晚上6点多看btv体育休闲,晚7点出门遛弯

1:25pm

scrcpy –tcpip=127.0.0.1:22253 可以正常连接!

scrcpy –tcpip=192.168.6.116:6008 无法正常连接

偶尔又无法连接,scrcpy –tcpip=127.0.0.1:22253 可以连接,不稳定。不清楚问题在那里。

先用udpxy - 8013 在ZL的K2P上面,继续测试一下联通性;把路由器上面的8013frp穿透到本地,看看中国移动的IPTV组播可否正常使用+连接?

1
p2p_zl_k2p_iptvudpxy

http://127.0.0.1:22254/rtp/228.1.1.115:8000

没有udpxy数据;又能连接上 scrcpy –tcpip=127.0.0.1:22253

0406 6:02pm 刚刚scrcpy –tcpip=192.168.6.116:6008连接成功。手动退出断开后尝试scrcpy –tcpip=127.0.0.1:22253无法连接,同时在此使用scrcpy –tcpip=192.168.6.116:6008又可以连接成功。 好费解

更新了/etc/storage/frpc.ini,重新退出再登录frp以后,scrcpy –tcpip=127.0.0.1:22253成功,而scrcpy –tcpip=192.168.6.116:6008失败了;说明目标端口唯一时,仅能在配置文件中设置一个映射(仅一个映射有效)

还有一个经验就是在scrcpy运行的过程中,不要去强制退出进程,否则有可能会导致无法连接(应耐心等待起联通或不联通失败信息)

image-20240406182256871

发现udpxy的版本不同,如何升级ZL K2P的udpxy版本?

实现方法

着重分享一下第二步的:K2P路由器(被控端)和第三步的本地电脑(主控端)安装和配置的frpc客户端以及配置文件。

K2P路由器(被控端)

  1. 登录到K2P的SSH中下载和安装frpc客户端

    1. ssh admin@192.168.1.12
      admin@192.168.1.12‘s password:

    2. 输入密码,登录后运行以下命令下载frpc文件到本地/tmp目录

      1
      2
      3
      sleep 10 && wget -P /tmp http://opt.cn2qq.com/opt-file/frpc && chmod 777 /tmp/frpc

      #这个过程可以验证frpc是否正常被下载到本地
  2. 本地新建一个文件frpc.ini,通过以下命令上传到K2P的/etc/storage目录下

    1. scp /Users/carlzeng/AppTesting/frp/zl/frpc.ini admin@192.168.1.12:/etc/storage
  3. 运行frpc

    1
    2
    3
    /tmp/frpc -c /etc/storage/frpc.ini >/dev/null 2>&1 &

    #这个过程可以验证frpc是否正常启动
  4. 登录K2P得web UI,高级设置-自定义设置-脚本-在 WAN 上行/下行启动后执行: 中加上以下代码配置页面的地址举例:http://192.168.1.12:8080/Advanced_Scripts_Content.asp

    1
    2
    3
    sleep 10 && wget -P /tmp http://opt.cn2qq.com/opt-file/frpc && chmod 777 /tmp/frpc

    /tmp/frpc -c /etc/storage/frpc.ini >/dev/null 2>&1 &

被控端的frpc.ini例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[common]
server_addr = frp.carlzeng.com
server_port = 7000
token = ******

#穿透本地的http WEB服务
[p2p_zl_k2p]
type = stcp
sk = password******
local_ip = 192.168.1.12
local_port = 8080

#穿透本地的ssh服务
[p2p_zl_k2p_ssh]
type = stcp
sk = password******
local_ip = 192.168.1.12
local_port = 22

#比如安卓手机termux穿透adb 5555端口,这个名称要对应主控端A的server_name名称
[p2p_zl_n1_adb]
type = stcp
sk = password******
local_ip = 192.168.1.243
local_port = 5555

本地电脑(主控端)

主控端的的frpc.ini例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[common]
server_addr = frp.carlzeng.com
server_port = 7000
# auth token
token = token = ******

[p2p_zl_k2p_visitor]
type = stcp
role = visitor
server_name = p2p_zl_k2p
sk = password******
bind_addr = 127.0.0.1
bind_port = 22251


[p2p_zl_k2p_ssh_visitor]
type = stcp
role = visitor
server_name = p2p_zl_k2p_ssh
sk = password******
bind_addr = 127.0.0.1
bind_port = 22252

[p2p_zl_n1_adb_visitor]
type = stcp
role = visitor
server_name = p2p_zl_n1_adb
sk = password******
bind_addr = 127.0.0.1
bind_port = 22253

打开terminal 运行:frpc -c frpc.ini

这样就映射远程被控端的应用到本地端口了,也就是穿透过去。

再打开另一个terminal 运行:

scrcpy,Display and control your Android device

1
2
scrcpy --tcpip=127.0.0.1:22253  
#对应p2p_zl_n1_adb,已被映射到本地的127.0.0.1:22253,相当于连接到远程局域网中的192.168.1.243:5555;

这样就连接到N1的远程管理桌面,可以远程控制N1的界面(由于不到android 11的版本,声音不支持被传输到远程)

灵感来源

路由器frp客户端,最新客户端下载:http://opt.cn2qq.com/opt-file/frpc

scrcpy

Docker搭建FRP内网穿透服务

K2P设置实例(南方移动ADSL)

被控端(远程被访问/控制的服务或主机)

image-20260726110621348

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#frp.jsxz.cf是免费提供的frp服务器,如果需要使用,请修改下面两处的“test”为你的名称,比如"hello"
#然后可以通过http://hello.jsxz.cf访问你的设备
#如果无法正常使用,请更改名称,注意名称不能和别人重复
[common]
server_addr = op.carlzeng.com
server_port = 57999
token = 123456

[webFloor#2]
type = tcp
local_port = 80
remote_port = 6003

[webFloor#1]
type = tcp
local_ip = 192.168.10.1
local_port = 8080
remote_port = 6004

[cq_f2_k2p_ssh22]
type = stcp
sk = abcdefg
local_ip = 127.0.0.1
local_port = 80
#remote_port = 6008

#这是一楼主卧的故障n1(网线时连时不连通20240323已退休)
[cq_f1_n1_adb5555]
type = tcp
local_ip = 192.168.2.164
local_port = 5555
remote_port = 6007

#这是二楼主卧的n1,20240323已拿到一楼主卧使用
[p2p_f1_n1_adb5555]
type = stcp
sk = password
local_ip = 192.168.2.201
local_port = 5555



#这是一楼大厅入口的N5105,20260725放在一楼大厅使用
[p2p_f1_n5105_web80]
type = stcp
sk = password
local_ip = 192.168.10.250
local_port = 80
#这是错误的,因为ESXI是443的ssl 不是80端口
[p2p_f1_n5105_web80]
type = stcp
sk = password
local_ip = 192.168.10.250
local_port = 443

[tcp_f1_n5105_web80]
type = tcp
local_ip = 192.168.10.250
local_port = 443
remote_port = 6008


#端口转发示例,去除下面每行前面的"#"并修改remote_port,注意remote_port不能和别人重复,否则无法正常启用
#[ssh]
#type = tcp
#local_ip = 127.0.0.1
#local_port = 22
#remote_port = 6000


image-20260726233931368

本机主控端(MAC电脑操作 访问远程内网服务)

运行命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
./frpc -c frpc.ini


frpc.ini 内容节选
# CQC 村前村, 主控端A

[p2p_f1_n1_adb5555_visitor]
type = stcp
role = visitor
server_name = p2p_f1_n1_adb5555
sk = password
bind_addr = 127.0.0.1
bind_port = 22241

#一楼的K2P http://k2pcq1.carlzeng.com:4443/
#二楼的K2P https://k2pcq2.carlzeng.com:4443/


#这是一楼大厅入口的N5105,20260725放在一楼大厅使用
[p2p_f1_n5105_web80_visitor]
type = stcp
role = visitor
server_name = p2p_f1_n5105_web80
sk = password
bind_addr = 127.0.0.1
bind_port = 57777

image-20260726113557486

20260726 奇怪的是, 在南方移动ADSL网络环境下, 无法访问任何一个被frp穿透出来的服务.

This site can’t be reached
127.0.0.1 refused to connect.

image-20260726120358252

直接解决的方案是:

  1. 先用116debian主机的frpc把服务连接起来; 错误; 就是在K2P中
    1. 在哪里配置? 见下面仔细分解
    2. 就是在K2P的frpc.ini中配置, 但是配置的是type=tcp; 而不是type=stcp
  2. 然后使用NPMhttp://192.168.6.116:881/nginx/proxy把frpc的端口反代出来
    1. 在远程的Nginx Proxy Manager中设置新的域名,
    2. 映射到frps中显示的, 到达了本地局域网的6008端口(比如 tcp的 特定设置端口)
  3. 受限的网络, 通过访问NPM公网IP反代出来的4443端口来, 间接的frpc连接上

想要实现这样的workaround, 先要在Debian中修改一下配置文件添加上挂钩关联

1
2
3
4
5
6
ssh 192.168.6.116

#root@Debian11:/www/server/panel/data/compose/frps
#这是服务端的配置和部署; 可是我忘记了客户端frpc放在那个目录了, 确定是在这台6.116?

http://192.168.6.116:6004

这个TCP在那里设置的呢?

image-20260726131338536

发现一个常驻进程在DS918中, 是frpc, 有相应的frpc.ini

1
2
3
#关闭frpc进程的同时, 重新启动frpc进程
kill 7462 && nohup /usr/local/frp/frpc -c /usr/local/frp/frpc.ini >/dev/n
ull 2>&1 &

但是没有在此DS918frpc.ini中发现相关的

反而在K2P本身frpc.ini中映射一个端口

[webFloor#1]
type = tcp
local_ip = 192.168.10.1
local_port = 8080
remote_port = 6004

#添加 n5105, web80的 tcp, 查看http://192.168.6.116:9527/static/#/proxies/tcp

[tcp_f1_n5105_web80]
type = tcp
local_ip = 192.168.10.250
local_port = 80
remote_port = 6008

然后这个6008就可以在服务端看到了!

image-20260726140147658

然后NPM配置新的域名: k2pcq1n5105.carlzeng.com

同样设置后: https://k2pcq1n5105.carlzeng.com:4443/ 却 却 却 无法访问:

The connection has timed out

The server at k2pcq1n5105.carlzeng.com is taking too long to respond.

重启了frps, 重新保修刷新的NPM, 重启尝试刷新页面, 故障依旧.

可能是被116的BT宝塔 系统防火墙给挡住了
image-20260726141051128

防火墙开启了这些端口后, 依旧无法连接

k2pzl.carlzeng.com
Created: 3rd December 2023
http://192.168.6.116:6002 Custom Public Online

服务端没有收到监听的端口6002, 说明frpc没有正常在k2p上运行(或者关闭后, 没有自动重启, 不正常保持进程)

之前配置错误在了源主机的端口上了, 不是80端口, 而是443端口!!!

之前配置错误在了源主机的端口上了, 不是80端口, 而是443端口!!!

错误在了源主机的端口上了, 不是80端口, 而是443端口!!!

修改了NPM连接到https协议后, 也可以正常反代出来了

https://k2pcq1n5105.carlzeng.com:4443/
Created: 26th July 2026
https://192.168.6.116:6008 Custom Public Online

其他方法, 给EXSI的linux系统安装easytier

开启ssh; 在本地局域网UI 界面中

image-20260726141654701

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
carlzeng@MacBook-Pro-3 frp % ssh [email protected]
The authenticity of host '192.168.10.250 (192.168.10.250)' can't be established.
ECDSA key fingerprint is: SHA256:f+1d4DGLeQdq9F+4jpTCXjb5T+iAs3n0dXWRe3bD95M
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.250' (ECDSA) to the list of known hosts.
** WARNING: connection is not using a post-quantum key exchange algorithm.
** This session may be vulnerable to "store now, decrypt later" attacks.
** The server may need to be upgraded. See https://openssh.com/pq.html
([email protected]) Password:
The time and date of this login have been sent to the system logs.

WARNING:
All commands run on the ESXi shell are logged and may be included in
support bundles. Do not provide passwords directly on the command line.
Most tools can prompt for secrets or accept them from standard input.

VMware offers powerful and supported automation tools. Please
see https://developer.vmware.com for details.

The ESXi Shell can be disabled by an administrative user. See the
vSphere Security documentation for more information.
[root@localhost:~]

个性化需求沟通 扫客服加V加群: