通过域名访问内网服务器

news/2024/11/19 12:11:55/文章来源:https://www.cnblogs.com/PangXiao/p/18554581

cloudflare优选ip访问家用服务器

前言

由于一直有使用markdown写笔记的需求,但是每次处理图片的时候总是很头疼。突然,我瞥见了还在角落里面吃灰小主机,因此萌生了废物利用想法,搭建一个外网可访问的图床。图床直接使用lsky-pro就可以,关键还是在外网访问上。

于是在网上看看有没有现成的方案,功夫不负有心人,找到了两种方法:内网穿透或者DDNS。由于免费的内网穿透带宽小,所以使用DDNS方案。

家里宽带只有动态ipv6,80、443端口也不能用。于是,先通过DDNS将公网ipv6地址放到cloudflareDNS服务器上解析。但是ipv6网络普又是一个问题,在ipv4 only网络上无法访问服务器,所以要cloudflareCDN实现ipv4ipv6;加上端口转发,还可以不带端口访问服务器;最后再使用Cloudflare for SaaS配置优选ip提升下速度,似乎就圆满了。感谢cloudflare大善人。下面开始实操。

环境说明

个人还是习惯使用Ubuntu。然后我使用了一款服务器管理面板1panel。使用图形化界面可以少敲一些命令行。1panel里很多服务都是容器搭建的,兼容性不错。最后就是准备域名。如果要弄优选ip,就需要两个域名,和一个palpay账户。

实操

服务器管理面板1panel

由于下面很多操作都是在1panel面板中操作,所以提前安装好1panel。安装过程不复杂。直接去官网看就行在线安装 - 1Panel 文档

安装时它会自动帮我装上了docker,还配置好了镜像仓库源。真是太细心了。

动态域名解析DDNS-go

Github地址jeessy2/ddns-go

这里我没有去Github上下载。而是在1panel应用商店里下载。

Snipaste_2024-11-18_12-53-25

直接安装就行,防火墙放行9876端口、使用http://$LOCAL_IP:9876访问。

DNS服务商选择Cloudflare,如何将购买的域名托管至Cloudflare参考域名DNS服务托管至Cloudflare,就是如此简单创建API-Key方法参考dnsapi · acmesh-official/acme.sh Wiki

You can do this via your Cloudflare profile page, under the API Tokens section. When your create the token, under Permissions, select Zone > DNS > Edit, and under Zone Resources, only include the specific DNS zones within which you need to perform DNS challenges.

将得到的API-Key填入Token

image-20241118132750982

启用IPv6,填入需要解析的域名。

Snipaste_2024-11-18_13-29-59

完成后点击保存,会自动将DNS记录同步到cloudflare

实现IPV6 Only服务器可在IPv4网络下访问

Cloudflare提供了免费CDN代理。同时CDN支持IPv4IPv6双栈流量的互相转换。我们可以利用这一特性实现此需求。

主要步骤:打开CloudflareCDN服务,再去Origin Rules配置端口转发。

  1. Cloudflare设置

    打开每条DNS记录中的小云朵即可打开CDN服务

    Snipaste_2024-11-18_15-10-19

    点击规则 -> Origin Rules -> 创建规则。参考下图填写。域名填写自己的。端口不能随便写(比如图中的8081就不行),Cloudflare只支持部分端口转发。参考Network ports | Cloudflare Fundamentals docs自行修改。image-20241118152622782

  2. 本地服务器设置

    设置反向代理。直接在1panel中配置,不用敲一行代码。进入面板,选择网站 -> 网站根据提示安装``OpenResty`。

    image-20241118160623374

    注意安装OpenResty时配置的http/https端口要和端口转发的一致。否则无法代理。同时防火墙放行对应端口。路由器也要放行该端口(最好由路由器拨号上网)

    Snipaste_2024-11-18_16-16-00

    安装完成后,配置反向代理。 配置如图

    Snipaste_2024-11-18_16-21-45

    最后,如果建议开启https。开启方法也很简单,打开刚才建立的记录,选择HTTPS -> 启用HTTPS然后导入自己的证书即可。如何申请证书见部署免费SSL证书-acme脚本

  3. 如果使用https,要在Cloudflare中选择SSL/TLS。设置SSL/TLS加密设置为完全。

    Snipaste_2024-11-18_16-45-24

  4. 至此以及可以直接通过域名访问家庭内网服务器。如果有多个服务,可以添加多个二级域名,再重复上面步骤。

    先添加二级域名的``DNS`解析,设置端口转发,可都转发至同一端口。最后在本地设置反向代理,代理到对应服务的端口。

设置优选IP

此步骤非必要。但是由于Cloudflare服务器都在国外,访问速度比较慢,通过该方法可以一定程度上缓解。毕竟免费,又不是不能用😁

这里需要两个域名且Cloudflare绑定paypal

注册paypal账户与Cloudflare绑定paypal账户的教程在B站一搜一大堆。比较简单,国内借记卡应该都可以。

原理

现在有两个域名maindomain.com,backdomain.com,在再创建一个二级域名cdn.backdomain.com解析到优选好的ip。整个过程简单的来说就是:

maindomain.com(CNAME记录) --> cdn.backdomain.com(DNS解析CDN服务器) --> 优选CDN服务器(由于设置了Saas,CDN发现了Header字段的Host值==maindomain.com,跳转到回源域名上) --> backdomain.com最后访问到我们的服务器

设置Cloudflare for SaaS

  1. 添加回退源

    可用上面配置好的域名作为回退源。也可用其他域名,但要求backdomain.com已经在正常解析,且开启CDN

    位置:SSL/TLS -> 自定义主机。输入域名backdomain.com

  2. 添加自定义主机名,位置:SSL/TLS --> 自定义主机名 --> 添加自定义主机名(图中域名多加了个点,懒得改了)

    Snipaste_2024-11-18_10-04-58

    输入主域名:maindomian.com,其他默认即可(图中域名多加了个点,懒得改了)image-20241118100750022

    完成后,找到添加刚添加的主机名,在证书状态栏会出现待验证,点击后出现下面界面。Snipaste_2024-11-18_10-11-24

    将下面两个TXT记录分别添加至miandomain.com的``DNS记录中,证书名称填在名称处,证书验证TXT`值填在名称处。image-20241118101802924

    完成后如图Snipaste_2024-11-18_10-21-10

    回到添加回退源界面,点击刷新后,显示如图表示添加成功。Snipaste_2024-11-18_10-26-40

设置DNS

  1. maindomain.com主域名中添加CNAME记录实现miandomain.com --> cdn.backdomain.com。关闭代理,仅DNS

    image-20241118103636716

  2. backdomain.com回源域名中设置辅助域名,指向``cloudflare优选ip`。既在DNS中添加如下记录。

    Snipaste_2024-11-18_17-28-17

    优选ip选择参考XIU2/CloudflareSpeedTest: 🌩「自选优选 IP」测试 Cloudflare CDN 延迟和速度,获取最快 IP ~

其他设置

  1. 反向代理,如果使用https,导入miandomian.com的证书。

    在本地服务器上添加新的反向代理用于代理maindomian.com。方法通上点击跳转

  2. 检查SSL/TLS配置,https服务一般使用配置为完全

自动更新优选ip脚本

脚本参考CloudflareSpeedTest/script/cfst_ddns.sh at master · XIU2/CloudflareSpeedTest

使用说明自动更新 Cloudflare 中的域名解析记录为最快 IP(Windows/Linux 脚本+手动教程) · XIU2/CloudflareSpeedTest · Discussion #481

根据个人使用习惯,对脚本做了一些修改。使用时依次填入API-KEY, EMAIL, ZONE_ID, DOMAIN, RECORD_NAME

#!/bin/bashAPI_KEY="******************" # Global API-KEY 密钥
EMAIL="******************" # 帐户信息
ZONE_ID="******************" #区域ID
DOMAIN="******************" # 主域名信息 假如完镇域名为cdn.mydomain.com,则此处填mydomain.com
RECORD_NAME="***" # 修改为二级域名名称 假如完镇域名为cdn.mydomain.com,则此处填cdn
TYPE=A	#DNS A记录
PROXIED=true #开启代理
TTL=1 #表示自动./CloudflareST -o "result_ddns.txt"# 判断结果文件是否存在,如果不存在说明结果为 0
[[ ! -e "result_ddns.txt" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0CONTENT=$(sed -n "2,1p" result_ddns.txt | awk -F, '{print $1}')
if [[ -z "${CONTENT}" ]]; thenecho "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..."exit 0
fiRECORD_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records?type=A&name=${RECORD_NAME}.${DOMAIN}" -H "X-Auth-Email: ${EMAIL}" -H "X-Auth-Key: ${API_KEY}" -H "Content-Type: application/json" | jq -r '.result[0].id')if [ -z "$RECORD_ID" ]; thenecho "Error: Unable to retrieve Record ID for the specified A record."exit 1
ficurl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${RECORD_ID}" \-H "X-Auth-Email: ${EMAIL}" \-H "X-Auth-Key: ${API_KEY}" \-H "Content-Type: application/json" \--data "{\"type\":\"${TYPE}\",\"name\":\"${RECORD_NAME}\",\"content\":\"${CONTENT}\",\"ttl\":${TTL},\"proxied\":${PROXIED}}"

终端执行

# 测速脚本下载压缩包
wget -N https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.2.5/CloudflareST_linux_amd64.tar.gz
# 解压
tar -zxf CloudflareST_linux_amd64.tar.gz
# 赋予执行权限
chmod +x CloudflareST
# 新建脚本,将上面代码修改参数后复制进去。保存
vim auto_dns_update.sh
#赋予执行权限
chmod +x auto_dns_update.sh
# 执行
./auto_dns_update.sh

添加定时任务vim /etc/crontab

# 将下面一行代码加入到最后.晚上9点执行该脚本
0  21   * * *   root    cd /root/CloudflareST/ && ./auto_dns_update.sh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/836741.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法】KMP 与 Z 函数

1. KMP 1.1 算法简介 可以做到线性匹配的快速匹配字符串的算法,并可以维护字符串最长公共前后缀,扩展出计算字符串周期。 在 OI 界 KMP 算法是字符串板块中很经典的算法,可以扩展出很多巧妙的解题技巧。 1.2 算法流程 1.2.1 字符串匹配 考虑 \(O(n^2)\) 暴力的匹配,瓶颈在于…

apifox使用小记

1.copy as cURL(cmd)之后在apifox里直接import cURL 2.调用时发生301错误 通常情况下是因为有session校验存在(用户校验)。解决方案: F12里将cookie里的session取到,在apifox里全局配置 这里踩了一个坑 第一次我是import了一个get请求,发送后发生301,所以我去设置了co…

毕业实习总结报告

毕业实习总结报告这既是毕业实习要求的总结报告,也是我对AutoSAR的一点理解,更是个人对未来生活的一点思考。我不希望把这份报告草草水过,而是希望把现在的感受记录下来,给以后的自己看一看,好记性不如记下来。涉及到工作细节和隐私的部分不在此展示了。时间像一头野驴呀,…

IDEA 2024 最新激活码,激活至2099(附有效idea激活码+激活工具)

IDEA 2024最新激活码,激活至2099(附有效idea激活码+激活工具)若提示We could not validate your license ff83b7bd51f5460ca43aabd7a96863a0.信息,idea激活时提示激活码失效解决方法: IDEA 2024 解决 We could not validate your license ff83b7bd51f5460ca43aabd7a96863a…

大学物理上册

质点作曲线运动时,质点在某一点的速度方向就是沿该点曲线的切线方向。

KingbaseES V8R6备份恢复案例之---sys_backup.sh init错误

KingbaseES 、sys_rman案例说明: KingbaseES V8R6数据库单实例环境,执行sys_backup.sh init时,出现“ repo_ip [127.0.0.1] must be located in local”错误,初始化失败。 适用版本:KingbaseES V8R6 一、问题现象 如下所示,执行sys_backup.sh init时出现以下故障:二、问…

鱼厂实习,光速转正了!

从最初那一份懵懂,到如今独立承担项目,回想这一路在鱼厂的成长,每一步都像是在重塑一个新的自己。今天要分享的这篇文章,比较特殊,是我们团队一位同事写的。主要分享了他从 0 开始学编程,再到加入鱼厂光速转正的故事。长达 6000 多字,诉说了自己四年多的经历,满满的真情…

深育大讲堂 | 洞见容器存储技术原理和市场应用趋势

深育大讲堂 | 洞见容器存储技术原理和市场应用趋势 4月12日,【深育大讲堂】系列直播活动第一讲“从容器存储讲起”圆满结束。深信服产教中心资深讲师丁运管、深信服四川省云业务总监薛悟团分别就多场景下的容器存储技术以及容器技术的应用与最佳实践进行深入剖析;并聚焦前沿…

apipost学习

开发团队的痛点: 1. 任何一个团队都是由前端、后端、测试三个TEAM组成的。 2. 产品经理确定需求和过评审后,前后端开发人员一起开会研讨定接口。并先由一个开发人员负责用Swagger定义API文档; 3. 后端会参照API 文档开发接口,并进行调试,用Postman里再跑一遍。 4. 接口…

你的团队如何在项目管理中实现智能化协作?

随着科技的快速发展,现代社会的各个领域都进入了智能化与高效化的时代。在这个背景下,项目管理软件作为提升工作效率、协作能力和组织规范性的重要工具,逐渐融入了更多跨界元素。从与人工智能(AI)的结合,到与创业者的合作,再到时间管理的深度挖掘,项目管理软件已经不再…

HyperWorks一维单元创建与模型连接管理

在HyperWorks的有限元分析中,一维单元是非常重要的概念。我们可以使用一维单元连接节点,或将不匹配的网格部件进行连接,进行载荷施加,以及用于建立焊接,螺栓,铆钉等等各类工程中经常运用的模型连接方式。 一维单元的类型是非常多的。有简单的刚性连接单元,有包含复杂截面…

JAVA反序列化学习-CommonsCollections3(基于ysoserial)

环境准备 JDK1.7(7u80)、commons-collections(3.x 4.x均可这里使用3.2版本) JDK:https://repo.huaweicloud.com/java/jdk/7u80-b15/jdk-7u80-windows-x64.exe <dependency><groupId>commons-collections</groupId><artifactId>commons-collections<…