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.top
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.top
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内网穿透服务