K2P路由器安装frp远程管理N1机顶盒
下一步计划:由于scrcpy的audio forwarding 需要 Android 11+;可有其他方案能传输语音?usbaudio 如果存在的话就可以使用web端的scrcpy共享出机顶盒的TVBOX点播功能
有什么用
frp内网穿透后,可以主动发起远程控制处于无共网IP下的ADSL宽带内主机
借助以下主体(前提条件):
- FRPS 服务端
- 自行搭建服务端(详细见文章:Docker搭建FRP内网穿透服务)
- 可以使用互联网上开放的FRP服务端也是可以的(无需自己搭建)
- 运行着FRPS服务端程序
- K2P路由器(被控端)
- 用来宽带拨号用的路由器,路由器ADSL拨号(或者DHCP自动获取光猫下的IP)上网
- 安装FRPC客户端,搭配frpc.ini配置文件(定义了如何将本地内网中的特定服务穿透到互联网中)
- 本地电脑(主控端)
- 这也是运行FRPC客户端,搭配frpc.ini配置文件(定义了如何将被控端特定的穿透,承接到本地的特定端口来;实现:访问本机特定端口既等同于访问远程被控端主机的特定主机+端口)
- 本文已Mac OSX为例,通过Terminal终端,运行./frpc frpc.ini来启动p2p模式;实现:访问本机特定端口既等同于访问远程被控端主机的特定主机+端口
- 根据被控端穿透的服务(比如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网络下则无法连接成功。
解决方法探索:
-
切换FRP的配置,从端对端的模式到,连接仅连接到FRPS服务端的模式。
根据Docker搭建FRP内网穿透服务配置实例如下:
[zl_f10_n1_adb5555]
type = tcp
local_ip = 192.168.1.243
local_port = 5555
remote_port = 6008#这种服务器中转模式下的测试 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组播可否正常使用+连接?
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运行的过程中,不要去强制退出进程,否则有可能会导致无法连接(应耐心等待起联通或不联通失败信息)
发现udpxy的版本不同,如何升级ZL K2P的udpxy版本?
实现方法
着重分享一下第二步的:K2P路由器(被控端)和第三步的本地电脑(主控端)安装和配置的frpc客户端以及配置文件。
K2P路由器(被控端)
-
登录到K2P的SSH中下载和安装frpc客户端
-
ssh admin@192.168.1.12
admin@192.168.1.12's password: -
输入密码,登录后运行以下命令下载frpc文件到本地/tmp目录
sleep 10 && wget -P /tmp http://opt.cn2qq.com/opt-file/frpc && chmod 777 /tmp/frpc #这个过程可以验证frpc是否正常被下载到本地
-
-
本地新建一个文件frpc.ini,通过以下命令上传到K2P的/etc/storage目录下
- scp /Users/carlzeng/AppTesting/frp/zl/frpc.ini admin@192.168.1.12:/etc/storage
-
运行frpc
/tmp/frpc -c /etc/storage/frpc.ini >/dev/null 2>&1 & #这个过程可以验证frpc是否正常启动
-
登录K2P得web UI,高级设置-自定义设置-脚本-在 WAN 上行/下行启动后执行: 中加上以下代码配置页面的地址举例:http://192.168.1.12:8080/Advanced_Scripts_Content.asp
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例子:
[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例子:
[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
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的版本,声音不支持被传输到远程)