admin
发布于 2023-11-06 / 384 阅读
0
0

内网穿透折腾记录

背景

因为退役一台笔记本,就想扔老家了,也给家里人当个备用机用。但里面积攒了好多年的项目,真的是好多年的珍藏啊,还不定期的想从这台机器拷项目,查资料,甚至因为随着年龄增长,记忆力越来越差,有些之前的项目还想跑起来看看,所以要用到内网穿透了。

然后开始折腾,下面是折腾的过程,中间各种问题,各种查,各种安,各种各种,各种。。。

DDNS(tpddns和花生壳)

因为去年咬牙搞了个tp-link飞流系列的AX10280,当时因为弄了一堆摄像头和智能家电原来的路由老有设备掉线,所以搞了个声称带机量超大的。结果到了今年热乎劲过了,现在就日常的电视连着,搞了台NAS,其他平常个人手机,就我爸自己在家,完全没发挥余地了。

记得之前路由的管页面里有tp官方的ddns,好像叫tpddns.cn,登陆账号后,每台绑定的路由器都能且仅能申请一个域名,两年前记得给nas设置外网访问的时候,曾经调试过,但最近突然发觉不灵了。这个nas也是躺在角落吃灰了,好几个月没开机了。

先ip地址和mac绑定,锁死电脑ip,供虚拟服务器和dmz主机配置使用。

dmz因为要暴露全部端口,没配。

一顿操作猛如虎,机器本地起了个8080服务,一测死活不通,检查半天配置,还是不通。

记得前两年也是这么配的,当时确实通了。查了半天帖子,看到有人现在设备太多了。像这样自己制定个外部端口的基本都不行了,因为这些端口基本被用光了。因为之前弄nas的时候,申请了电信的公网ip,直接ip加端口都不通,上面的话得到了验证。

此路不通,放弃。

然后偶然发现,ddns里还支持花生壳。索性就又申请了个花生壳,也是各种认证,实名的,最后花生壳给个1年有效期的,明年这个时候要58一年续费,这个先不提。配置完了直接这个域名加我开放的1999和28888端口仍旧不通。

emo了。后来看到向日葵的官网要配什么端口映射,再次印证上面说 的自定义外部端口不行的结论。

此时一测确实通了。nice了没一会,发现速度太慢,1mbs带宽,也就128k下载速度。

然后想找同类替代去了。

cloudnet

度娘一搜,出来一堆,随手点开了个。看着页面风格还行,看着有免费使用套餐,最主要的一条不限速。

这不巧了么。赶紧注册,地址如下:

https://login.cloudnet.world/#/signup?referral=chmg1j73ts

注册登录后,全端支持,挺专业,然后我安装了windows客户端,绑定了一条,很不错。速度很快。

然后多扫了一眼的时候,发现有个流量限制,一月一个G好像,shit。放弃。

ngrok.cc

突然想起来以前做支付回调的时候用过一款,叫啥来忘了。ng啥啥啥的,然后开始度娘,最后终于找到了。下载最新版的ngrox,找回以前注册账号,退役电脑上乱码,shit。然后我开始去寻找那多年的珍藏。全盘搜了下找到了,然后开发客户端发现不乱码了。nice了。

虽然有个免费的,也是限速128k,是长期免费哟。限速也认了。

此时我应该停了的。应该睡觉的。

然而,只是多看了一眼ngrok的搜索结果列表,又打开了新世纪了。

自己搭建 ngrok 服务实现内网穿透(转)


发现了这位大佬的帖子,原文出处在这里:

https://imququ.com/post/self-hosted-ngrokd.html

9月份刚薅羊毛了两台aws,看到能自己搭建,那不是解决了速度和流量的问题。然后按这里面执行。

作为一个javaer,他们这些go和c++的命令好些看不懂,又牵扯了泛域名配置,证书生成等。这步真的是各种报错,各种装软件了。然后aws那可怜的1g1核的负载满了,反正就是慢。

经过好多次尝试,终于编译通过,证书生成,找了两台机器测试通过,这就是好几个小时之后了。生成ngrokd的机器是aws的unbuntu最新系统,拿出编译生成的ngrok客户端,传到一台本地虚拟机后,开始启动客户端。然后。。。

然后开始升级。make升级顺利,见原文教程:

https://blog.csdn.net/xuelang532777032/article/details/114283286

https://blog.csdn.net/qq_41054313/article/details/119455667?spm=1001.2014.3001.5502

Linux升级gcc到最新版本gcc-11.2.0时,费鸟劲了,

等了很久之后,想到,这个服务端可以在有公网ip地址的机器生成,但是这客户端还得按平台编译,着是麻烦了点。

最后,gcc11.2终于几个小时候装完了,仍旧那个错。或许我不应该太执着,服务端是ubuntu22,客户端我非要弄个centos7,折腾这久,客户端还是启动失败,中间尝试了从客户端机器重新生成证书,重新编译,最终在这centos上还是没成功,

折腾了这好几个小时,我想累了。但又觉得不调通岂不是辜负了这几个小时。

于是我想到用和服务端机器一样的系统的机器,来搭建和测试。

最终正好两台aws,正好,都装成了ubuntu了。正好,刚刚好。

于是一台生成,然后启动ngrokd,然后将ngrok上传另一台,终于成功了。

下面是步骤。

------------------------------------------------------------------------------

git clone https://github.com/tutumcloud/ngrok.git ngrok
cd ngrok

vi genca-v3.ext

粘入内容:
----------
[ alt_names ]
DNS.1 = mydomain.com
DNS.2 = *.mydomain.com


[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:TRUE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
#extendedKeyUsage = critical, timeStamping, serverAuth, clientAuth
subjectAltName = @alt_names
-----------------



NGROK_DOMAIN="mydomain.com"

openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -days 10000 -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -extfile genca-v3.ext -extensions v3_req  -out server.crt

cp base.pem assets/client/tls/ngrokroot.crt



sudo make release-server release-client


sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="mydomain.com" -httpAddr=":8081" -httpsAddr=":8082"



客户端启动

./ngrok  -subdomain=pub -proto=http -config=ngrok.cfg 80

和大佬博客里说的相比,增加了一步,原文如下:

https://tech.hiofd.com/solve-legacy-common-name/

解决x509: certificate relies on legacy Common Name field, use SANs instead报错,

按这里说的生成证书后,终于通了。

shit。over。。。

然后看到这位大佬在评论里说的另一款。

基于 HTTP/2 的 WEB 内网穿透实现(转)

先上原文链接:

https://imququ.com/post/tunnel-to-localhost-base-on-http2.html

这大佬原理讲的清楚,软件也好用。几分钟搞定。大佬就是大佬。

然后继续回去等gcc11编译完成,继续那个自己搭建ngrox服务的办法。


评论