服务器运维之Cpolar

标签: 无 分类: 未分类 创建时间:2024-08-14 09:45:43 更新时间:2025-01-17 10:39:23

1.Cpolar

价格:600,10M带宽,360个连接数;1200元,20M带宽。只能固定tcp地址,但是不能自定义tcp地址;无法实现udp映射。

在选择地区的时候,需要选择 china vip 这个地区,否则可能就会启动不了。

2.安装

1
2
3
4
5
6
7
8
9
10
11
# 一键安装脚本
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

# 启动
systemctl enable cpolar; systemctl start cpolar

# 查看是否启动
cpolar version

# 卸载
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash -s -- --remove

3.使用

1
2
3
4
5
# 认证,从管理控制台获取 token
cpolar authtoken xxxxxxx

# 暴漏8080端口为了测试
cpolar http 8080

4.管理控制台

本地安装之后,可以打开 http://127.0.0.1:9200/#/login,进行管理控制台登录,可以在管理控制台上创建隧道,管理启动隧道。

参考文章:
【1】.Cpolar:实现内网穿透的利器 windows 版本的安装
【2】.cpolar

5.配置自定义域名

(1) 登陆cpolar地址,找到 “预留”,填入需要保留的自定义域名,比如:*.openmap.tech,选择保留,会得到一个 cname

(2) 登陆阿里云域名管理,增加一个域名,指向 CNAME 记录就好了。

(3) 登陆cpolar的管理控制台,然后编辑隧道,选择自定义域名,填入相应配置好的域名,就可以了。

(4) 关于泛域名
增加了一个 *.example.com 这样的泛域名,那么就可以在阿里云指向一个字域名,全部CNAME配置为这个保留的泛域名的 CNAME 地址。

参考文章:
【1】.配置自定义域名

6.固定TCP地址

目前cploar只能支持固定tcp地址,不能实现自定义 tcp 地址。

参考文章:
【1】.配置固定TCP端口地址

7.minio

可以借助于 cpolar 实现 minio 的对外访问的功能

参考文章:
【1】.Docker部署MinIO对象存储服务器结合Cpolar实现远程访问 这里配置了 http 映射
【2】.Linux 本地MinIO存储服务远程调用上传文件 这是 cpolar 的人写的使用 tcp 进行映射的方法

8.无法上传大文件

  • 需求:使用 cpolar 将部署到内网中的 minio 暴漏给外部,供 大疆机场将机场的媒体文件上传到内部minio上
  • 现象:问题主要出现在了上传过程中,因为机场文件持续上传,好几天了,但是一点文件都没有写入到minio里面去,而且cpolar也经常无法访问,无法重启。后来我停止机场文件上传,使用 rclone 从阿里云 oss 上下载文件,复制到 cpolar 暴漏到 minio 地址上去,结果也同样无法处理大文件,比如3.5G的文件。不仅仅是大文件,而且比如1.2G的文件也是会出现问题的。

我不断的尝试,遇到的问题:长时间运行之后,cpolar 就会崩溃,在安装 cpolar 上的机器上 ping 我的自定义域名,结果无法ping通,我远程阿里云之后,结果能ping通,联系了售后之后,结果就是说有网关拦截了我的网络。目前的网络架构是使用cpolar将内网minio对外开放,然后大疆机场通过获取minio地址将飞过的无人机视频弄到里面去。

最后的结论就是 cpolar 无法上传大文件,如果超过 3.5G 就会报错,中断传输。然后重新上传,然后再次中断,最后还是一样。

【尝试方案】
(1)按照官方支持的要求,我先把区域从 China 区域换到了 China VIP 区域,结果还是出现问题。

(2)我用cpolar代理minio,在minio正常运行的情况下,cpolar配置的两个隧道就在运行之后,莫名其妙的死掉了。

(3)我知道minio为什么会一直出现存不进去数据了,因为数据太大,就一直在传,但是cpolar会隔一个小时左右掉线一次,然后重启,结果传输的数据都没有了,结果又是重新传,最后导致好几天都没有数据存进去。

(4)查看了在线的网络控制台,在状态一览里面,结果在线隧道里面是有在线状态的,但是创建时间不对,我明明是昨天创建的这个东西,但是却显示的是今天。

(5)不断的重启,不断的重新创建隧道,结果也经常出现问题。

(6)端口存在,但是显示服务不存在

(7)服务存在,能ping通,但是访问不了

(8)运行一段时间之后,隧道就死掉了,然后过一段时间就会重启

(9)登陆超时

(9)创建隧道超时

(9)重启服务,显示服务不存在

(10)隧道在线,能ping通,应用程序也启动了,但是就是访问不了。我重启之后,隧道启动了,可以正常访问了,然后在进行大文件上传,文件没上传完,服务就挂掉了,我这个时候去ping,能ping通,nethogs没有流量,控制台显示在线,应用程序启动了,用speedtest进行测速,网速正常的,但是就是访问不了。过了二十分钟左右,啥都没动,然后隧道又可以访问了,nethogs观察流量也正常了。我看了看在线的隧道,显示的时间就是重启之后的时间了。

(11)他们叫我用他们的域名试一试,不要用自定义的域名,这个我怎么尝试呢?后来还是尝试着做了做,结果好像也没用。

(12)还是尝试了将 http 协议转换为了 tcp 协议,然后降低了 rclone 的传输进程数。也就是说使用的是固定tcp端口的形式,而不是使用 http 接口的形式。

1
2
3
4
5
6
7
8
9
10
[minio-intranet]
type = s3
provider = Minio
env_auth = false
access_key_id = hjkjminio
secret_access_key = hjkj@Minio_0601
region = cn-east-1
#endpoint = https://xx
#endpoint = https://xx.nas.cpolar.cn
endpoint=http://9.tcp.vip.cpolar.cn:xxx

(13)我发现了一个问题,那就是说如果白天我限速500k的时候,正常传输文件没有问题,但是当我夜里把带宽限制取消之后,就会出现文件传输中断的情况,也就是说,我买了10M带宽,其实我不能满带宽传输,只能限制到500k,或者900k这个样子,才能保证数据传输不中断。

1
2
3
4
5
6
7
8
9
#!/bin/bash
logfilename=rclone_hjkj_$(date +%Y%m%d).log

count=`ps -ef| grep '/usr/local/rclone/rclone' | grep -v "grep" | wc -l `
echo "count: "$count", time: "$(date "+%Y-%m-%d %H:%M:%S");

if [ $count == 0 ]; then
nohup /usr/local/rclone/rclone moveto -v oss:/zjhjkj/drone minio-intranet:/zjhjkj/drone --exclude "snapshot/" --exclude "upload/" --exclude "geofence_bbaae5134a5ccb0be47990ad4fbfe6c1.json" --multi-thread-streams 0 --exclude "*.kmz" --fast-list --drive-acknowledge-abuse --s3-chunk-size 64M --cache-chunk-size 64M --checkers 32 --transfers 1 --buffer-size=500M --bwlimit "08:00,off:512k 19:00,1M" --timeout 120m > /usr/local/rclone/logs/$logfilename 2>&1 &
fi

我想着给出的解释就是,如果不限速,那么就会有可能出现 cpolar 全部带宽占满了,但是为了和 cpolar 服务器通讯,又会占用一部分,于是就可能会导致数据传输中断。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。