3

玩客云换魔百盒

 8 months ago
source link: https://greenhathg.github.io/2023/12/31/%E7%8E%A9%E5%AE%A2%E4%BA%91%E6%8D%A2%E9%AD%94%E7%99%BE%E7%9B%92/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

GreenHatHG の Blog

玩客云换魔百盒

发表于 2023-12-31|更新于 2023-12-31|Linux
字数总计:2.3k|阅读时长:8 分钟 | 阅读量:3| 评论数:0

服役了两年的玩客云差不多也该换了,主要是配置方面感觉不够用,特别是当全局代理的情况下,总有断流的情况,而且是 32 位 + 1G RAM+8G ROM,小内存有点捉急。

所以就看了下有没有稍微好的产品,搜索了下发现有个魔百盒还可以,cm311-1a,2G RAM+16G ROM,amlogic s905l3a cpu 对比玩客云的 s805 好点,内存方面也是翻倍,不到 70 的价格,虽然现在的价格比前一两年贵了十几二十块,但是也能接受。

买这个便宜性能凑合的盒子主要用来挂一些简单的服务,比如 memos,青龙,v2raya 等,还有一些内网穿透的需求

image-20231231125838647

比较安全的内网穿透软件有 Cloudflare Warp、Tailscale、Zerotier 等,大概都是通过 VPN 建议连接的,比直接开放端口可外网直接连接安全多了。

要使用这些软件,server 和 client 都得安装一个程序,因为某些原因,我的某些 client 不能装类似的软件,所以只能 pass 了。

所以只能使用 frp 之类的,为了避免直接暴露端口,使用 stcp/sudp 协议。对于 stcp/sudp 而言,也得在 server 和 client 分别安装 frps 和 frpc,但是 frpc 上连接 stcp/sudp 是得重新一个监听本地端口的,也就是说,本地 frpc 启动后,是通过 127.0.0.1:2333(假设)访问服务的,所以某些特殊的 client,可以通过局域网连接到这些端口实现,具体的配置如下:

frps:

bindPort = 12345
auth.token = "token1"
#webServer.addr = "0.0.0.0"
#webServer.port = 12346
#webServer.user = "user"
#webServer.password = "password"
transport.tls.certFile = "/home/server.crt"
transport.tls.keyFile = "/home/server.key"
transport.tls.trustedCaFile = "/home/ca.crt"

魔百盒 frpc:

serverAddr = "1.2.3.4"
serverPort = 12345
auth.token = "token1"
transport.tls.certFile = "/home/client.crt"
transport.tls.keyFile = "/home/client.key"
transport.tls.trustedCaFile = "/home/ca.crt"

[[proxies]]
name = "ssh"
type = "stcp"
secretKey = "token2"
localIP = "127.0.0.1"
localPort = 22

[[proxies]]
name = "rdp"
type = "stcp"
secretKey = "token3"
localIp = "192.168.18.102"
localPort = 3389
transport.useCompression = true

[[proxies]]
name = "memos"
type = "stcp"
secretKey = "token4"
localIp = "127.0.0.1"
localPort = 5230
transport.useCompression = true

[[proxies]]
name = "wol"
type = "sudp"
secretKey = "token5"
localIp = "192.168.18.255"
localPort = 9

client frpc 连接:

serverAddr = "1.2.3.4"
serverPort = 12345
auth.token = "token1"
transport.tls.certFile = "/home/client.crt"
transport.tls.keyFile = "/home/client.key"
transport.tls.trustedCaFile = "/home/ca.crt"

[[visitors]]
name = "secret_ssh_visitor"
type = "stcp"
serverName = "ssh"
secretKey = "token2"
bindAddr = "127.0.0.1"
bindPort = 6001

[[visitors]]
name = "secret_rdp_visitor"
type = "stcp"
serverName = "rdp"
secretKey = "token3"
bindAddr = "0.0.0.0"
bindPort = 6002
transport.useCompression = true

[[visitors]]
name = "secret_wol_visitor"
type = "sudp"
serverName = "wol"
secretKey = "token5"
bindAddr = "127.0.0.1"
bindPort = 6000

client 本地启动 frpc 后,比如 rdp 服务,因为监听了 0.0.0.0:6002,所以另外一个 client 可以通过其局域网 ip 连接到 rdp 服务,不用单独装 frpc。

useEncryption

通过设置 transport.useEncryption = true,将 frpc 与 frps 之间的通信内容加密传输,将会有效防止传输内容被截取。

通信安全及优化 | frp

这个的意思其实是说,它加密的是 frpc 客户端(提供服务的内网客户端)和 frps(公网服务器)之间的连接,但是最终用户和公网服务器之间的传输该是怎么样的还是怎么样的,如果是明文 http 传输,那么依旧是明文 http 传输。

[[proxies]]
name = "memos"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5230
remotePort = 6000

image-20231231181244116

STCP 和 SUDP 的 (S) 的含义是 Secret。其作用是为 TCP 和 UDP 类型的服务提供一种安全访问的能力,避免让端口直接暴露在公网上导致任何人都能访问到。

frp 会在访问端监听一个端口和服务端的端口做映射。访问端的用户需要提供相同的密钥才能连接成功,从而保证安全性。

STCP & SUDP | frp

使用 stcp 的配置,整个传输过程没有明文的 http 协议,流量通过 tls 协议加密。

[[proxies]]
name = "memos"
type = "stcp"
secretKey = "token4"
localIp = "127.0.0.1"
localPort = 5230
transport.useCompression = true

image-20231231182211016

image-20231231182442642

trustedCaFile

transport.useEncryptionSTCP 等功能能有效防止流量内容在通信过程中被盗取,但是无法判断对方的身份是否合法,存在被中间人攻击的风险。为此 frp 支持 frpc 和 frps 之间的流量通过 TLS 协议加密,并且支持客户端或服务端单向验证,双向验证等功能。
自定义 TLS 协议加密 | frp

这个措施是为了判断对方身份是否合法,建议还是配置一下,证书生成本地就行,而且能够多提供一层保障。


For more:
提高 frp 内网穿透的安全性 - 南山崔崔的个人站点

Systemctl 重试

某些情况下机器网络断了后,可以增加一些举措来重连,如果 frp 用 systemctl 管理,可使用以下配置

[Unit]
Description = frp server
Wants=network-online.target
After=network.target network-online.target
Requires=network-online.target

[Service]
Type = simple
ExecStart = /root/frp_0.53.2_linux_arm64/frpc -c /root/frp_0.53.2_linux_arm64/frpc.toml
ExecStop=/bin/kill $MAINPID
Restart=always
RestartSec=5
StartLimitInterval=0

[Install]
WantedBy = multi-user.target

因为需要用 windows 进行远程,但是又省电费,所以一个举措就是当要远程的时候才唤醒电脑进行远程,平时睡眠状态,达到省钱的效果,可以使用一个叫做 WOL 的功能,需要的配置如下:

目前这个内网穿透只在魔百盒里面跑,如果魔百盒出问题了怎么办,比如突然间系统卡死,或者死机,那么肯定会影响到挂的服务。

这里定义一下哪些服务是必须有容错的,哪些服务挂了也无所谓,等到回到家再处理就行。

  • Windows 远程:这个必须容错,主要使用的场景是外出图书馆或者回家远程回来
  • Memos:主要用来记录和查看之前记录的一些想法
    • 部署在魔百盒,所以魔百盒挂了它也挂了,那也没办法,不过这个东西不紧急,记录可以临时记录在 notion
    • 查看的话也不是非常紧急,是用于平时消遣看下以前记录的东西,用别的东西消遣也行,比如看下订阅的 RSS,微博等
    • 其实这里可以部署个服务在手机上,毕竟现在数据备份在 github,拉一下就好,不过懒得弄
  • 魔百盒 ssh:挂了就连不上了,倒是可以搞个智能插座,挂了重启一下,这下好多服务也恢复了
  • wol:这个理论上必须得容错,用于唤醒 windows,但是必须得有魔百盒才能在外网使用,所以魔百盒挂了也是没办法。

其实看下来关键还是 Windows 远程,其他的都是无关要紧,忍一忍,怎么搞呢,一般分为硬件和软件问题。

对于硬件问题下面模拟了一些情况:

光猫 路由器 魔百盒 是否常见 原因
✔️ ✔️ ✔️ 不太常见 系统不稳定
✔️ ✔️ 不太常见 还是真是不知道啥原因,最常见是插座松了,很小概率是路由器坏了或者温度过高引起死机等问题
✔️ 不太常见 一般是宽带网络出问题了,有概率插座送了,很少是因为硬件坏了
常见 赶紧充电费吧

没有列出一些其他问题,比如电脑硬盘挂了,系统自动更新挂了,插座烧了的情况。。。

上面看出,其实主要路由器能正常工作,就还有得救,否则一般都没有得搞了,所以对于春节回家这种场景,需要检查一下电费是否够,插座是否插好

对于软件问题,一般是针对 windows 上和魔百盒上的软件来言,有一下措施:

  1. windows 电源和魔百盒电源都通过智能插座连接,出现问题远程重启机器。
  2. windows 上安装别的远程软件或者 frpc 有用吗,如果需要用 wol 服务,估计不行,因为睡眠模式下这些软件都连接不上,如果不用 wol 服务,最好在 windows 上安装一个 frpc 和别的远程软件。

Memos

部署了 memos 后,还需要备份一下数据,这里采用的是 github 的私有仓库,定时提交文件即可

docker stop memos
cd /root/.memos
git add .
message="$(date "+%Y%m%d-%H%M%S")"
git commit -m "$message"
git branch -M main
git config credential.helper '!f() { sleep 1; echo "username=${GIT_USER}"; echo "password=${GIT_PASSWORD}"; }; f'
git push -u origin main -f
docker start memos
0 */2 * * * export GIT_USER=ghp_xxxx; export GIT_PASSWORD="$GIT_USER";bash /root/.memos/backup.sh

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK