`cloudflare`优选`ip`访问内网服务器
  Lyt1yAddsGRV 2天前 15 0

cloudflare优选ip访问内网服务器

server

前言

众所周知,家庭内网服务器一般只有动态ipv6公网,且外网无法访问内网服务器的80、443端口,通过域名直接访问内网服务器便成了拦在新手入门的一道门槛。此篇文章记录我解决这一问题的过程。

环境说明

需要提前注册好域名,且将域名托管到Cloudflare上。具体教程参考域名DNS服务托管至Cloudflare,就是如此简单
操作系统使用Ubuntu。服务器管理面板使用的是1panel,功能和宝塔面板差不多,我个人更喜欢1panel

实操

服务器管理面板1panel

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

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

动态域名解析DDNS-go

Github地址jeessy2/ddns-go

1panel应用商店里下载更方便,可以不用去Github上下载。

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

DNS服务商选择Cloudflare,创建API-Key:

api-key-create

Snipaste_2024-11-19_14-25-16

将得到的API-Key填入Token

ddns

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

ipv6

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

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

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

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

  1. Cloudflare设置

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

    cdn

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

  2. 本地服务器设置

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

    OpenResty
    注意安装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,将它解析到优选CDN服务器的ip

通过域名访问我们服务器的过程,简单来说就是:

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

设置Cloudflare for SaaS

  1. 添加回退源

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

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

    location

  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名称填在下图的名称处,证书验证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回源域名中设置一个二级域名,即辅助域名cdn.backdomain.com,添加DNS解析记录,指向``cloudflare优选CDN服务器IP。既在DNS`中添加如下记录

    Snipaste_2024-11-18_17-28-17

    获取优选IP。方法参考XIU2/CloudflareSpeedTest: 🌩「自选优选 IP」测试 Cloudflare CDN 延迟和速度,获取最快 IP ~。现在可以随便写一个IP,后面可以用脚本获取,自动更新。

其他设置

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

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

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

自动更新优选ip脚本

脚本来源CloudflareSpeedTest/script/cfst_ddns.sh at master · XIU2/CloudflareSpeedTest

使用方法:

  1. 下载测速脚本

    # 解压
    tar -zxf CloudflareST_linux_amd64.tar.gz
    # 赋予执行权限
    chmod +x CloudflareST
    # 执行
    ./CloudflareST
    

    执行完后会获得10个网络状况比较好的IP,填写到这里,点击跳转

  2. 每次手动填写总归不太方便,所以参考CloudflareSpeedTest/script/cfst_ddns.bat at master · XIU2/CloudflareSpeedTest,按照自己的使用习惯,写了自动更新DNS记录的脚本。

    官方脚本的使用说明XIU2/CloudflareSpeedTest: 🌩「自选优选 IP」测试 Cloudflare CDN 延迟和速度,获取最快 IP !当然也支持其他 CDN / 网站 IP ~

    修改后的脚本使用说明:

    vim dns_auto_update.sh
    

    复制以下内容

    #!/bin/bash
    
    API_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=false #关闭代理
    TTL=1 #表示自动
    
    
    ./CloudflareST -o "result_ddns.txt"
    
    # 判断结果文件是否存在,如果不存在说明结果为 0
    [[ ! -e "result_ddns.txt" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0
    
    CONTENT=$(sed -n "2,1p" result_ddns.txt | awk -F, '{print $1}')
    if [[ -z "${CONTENT}" ]]; then
      echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..."
      exit 0
    fi
    
    RECORD_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" ]; then
      echo "Error: Unable to retrieve Record ID for the specified A record."
      exit 1
    fi
    
    
    curl -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}}"
    

    依次填入API-KEY, EMAIL, ZONE_ID, DOMAIN, RECORD_NAME值,保存脚本。

    #赋予执行权限
    chmod +x auto_dns_update.sh
    # 执行
    ./auto_dns_update.sh
    

    添加定时任务vim /etc/crontab

    # 将下面一行代码加入到最后.表示晚上9点执行该脚本 ...修改为你脚本所在的路径
    0  21   * * *   root    cd /.../CloudflareST/ && ./auto_dns_update.sh
    

    至此,配置完成。

总结

  1. 此方法可以不带端口访问内网服务器,隐藏源站IP,

  2. 使用此方法虽然可以通过域名成功访问内网服务器,但是,由于CloudflareCDN服务器在国外,延迟与速度不会太好看。需求不高可以使用。

相关链接

  1. XIU2/CloudflareSpeedTest: 🌩「自选优选 IP」测试 Cloudflare CDN 延迟和速度,获取最快 IP !当然也支持其他 CDN / 网站 IP ~
  2. https://www.bilibili.com/video/BV1PPy6YzE5C/?spm_id_from=333.337.search-card.all.click
  3. 没有公网IP?cloudflare优选IP,高速内网穿透
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2天前 0

暂无评论