type
status
date
slug
summary
tags
category
icon
password
📝 前言
本文介绍外网访问的两种方式:
1.无公网IP,使用Cloudflare Tunnel。
2.有公网IP,使用Cloudflare代理,路由器的端口转发和DDNS。
以上两种方式都使用可以绕过80/443端口封禁,并且隐蔽原始的IP地址。
两种方式不冲突,可以同时使用(通过域名区分)。
最后通过安装Traefik插件,获取Cloudflare代理/隧道后面客户端的真实IP。
媒体服务等对带宽需求较大的不适合使用Cloudflare代理。
💻 Cloudflare Tunnel
使用 Cloudflare Tunnel,您可以运行cloudflared
服务,将位于内部网络的服务器安全地暴露在互联网上。例如,在您的内部网络上安装 后,您可以将您的本地 Web 应用程序暴露在互联网上,比如 example.com,使远程办公者可以在任何地方访问。
一、设置本地解析(自定义挟持域名)
假设Traefik本地IP为
192.168.1.80
,emby服务域名为https://emby.example.com
以下方法任选其一:
在路由器上设置(推荐)
因为各家路由器设置方法不一样,请自行搜索
路由器品牌或型号+自定义Hosts
,大部分可以找到对应的设置方法。下面列出部分路由器的设置方法
- 基于linux系统的路由,如OpenWrt固件、小米路由等:
大部分智能路由器是定制的linux系统,使用root账户登录SSH,修改/etc/hosts,重启生效。
- OpenWrt WEB:
网络→主机名→新增 或 网络→DHCP/DNS→自定义挟持域名
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2Fd1c5164f-014c-4b43-9304-ae9e23e94580%2Fhost1.1.png?table=block&id=274b5110-807f-4c90-8e2e-21c7769ca0d0&t=274b5110-807f-4c90-8e2e-21c7769ca0d0&width=1227&cache=v2)
- 小米路由:
米家APP→路由器卡片更多操作→路由应用→自定义Hosts。
- 爱快固件:
网络设置→DNS设置→DNS设置→增加→填写要劫持的域名和IP→保存。
- 极路由:
在应用中心,安装自定义hosts,添加劫持,重启路由器即可。
- 斐讯路由:
功能设置→高级设置→HOST配置或高级设置→系统设置→系统参数→hosts配置,使用标准hosts格式。
- 潘多拉固件:
网络→DHCP/DNS→HOSTS和解析文件→自定义DNS解析,根据提示添加即可。
- 华硕梅林固件:
首先登陆路由器后台,在系统管理→系统设置中开启
JFFS
和SSH
,然后重启路由器。使用SSH登陆路由器,在
/jffs/configs
下建立dnsmasq.conf.add
文件,文件内容addn-hosts=/jffs/configs/hosts
在
/jffs/configs
下创建自己的hosts文件,按照标准hosts规则填写需劫持的域名,然后执行service restart_dnsmasq重启或者重启路由器即可生效。- 老毛子固件:
内部网络→DHCP服务器→自定义HOSTS文件→添加一行→保存,重启生效。
自建DNS服务
DNS服务器需要长期稳定运行,有条件的可以装一个AdGuard-Home。
- AdGuard-Home:
AdGuard-Home使用Docker部署时,需分配固定IP,并将路由器的首选DNS设置为该IP。
主页→过滤器→DNS重写
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2F2c7bc40d-f45d-4021-af69-0795ed4eb2b2%2Fadg.png?table=block&id=85bbd01b-01c4-4c7d-9b13-dd2129a92695&t=85bbd01b-01c4-4c7d-9b13-dd2129a92695&width=432&cache=v2)
- Dnsmasq:
在
/etc/dnsmasq.conf
添加一行:address=/example.com/192.168.1.80
- SmartDNS:
- /domain/为后缀匹配算法,范围包含其子域名。
- ip: 可以为IPV6,或IPV4地址,可以指定多个IP地址,如果有多个IP地址,查询的时候,将会进行随机排序。
域名地址添加一行:
address /example.com/192.168.1.80
address选项中:
前缀通配与主域名匹配
// 通配
*-a.example.com
// 仅匹配子域名
*.example.com
// 仅匹配主域名
-.example.com
注意:* 和 - 仅支持写在域名开头。其他位置的写法均不支持。
添加记录到容器hosts
仅cloudflare tunnel使用,内网访问需额外设置。
在cloudflared容器的高级视图中
![notion image](https://img.biliko.net/2024/04/5d54232d71259e49a3869f3f60dd8271.png?t=61da1f2f-9e8f-4b27-90ba-4de06dfd7504)
额外参数
后面加上--add-host='emby.example.com:192.168.1.80'
二、创建隧道
- 登录至Zero Trust,然后转到Access>Tunnels。
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2F2113f287-0228-4686-9ed2-9d483e78facd%2Ftunnel1.1.png?table=block&id=e8b622ed-fdf5-46e9-a103-a63ea7ddfa94&t=e8b622ed-fdf5-46e9-a103-a63ea7ddfa94&width=336&cache=v2)
- 选择“Create a tunnel”。
输入隧道的名称。例如
myhome-VPC-01
。- 保存好红框中的token。
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2Fcad210bf-af0d-46f2-a443-414a5b122c62%2Ftunnel4.png?table=block&id=10145a4b-a74c-47ad-ad74-ebc5b3846c8b&t=10145a4b-a74c-47ad-ad74-ebc5b3846c8b&width=2254&cache=v2)
- 添加“Public hostnames”
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2F0ea0bb14-7105-4d45-a891-ed9287e8b4f6%2Ftunnel5.1.png?table=block&id=172e2f19-ec67-4b5d-8ffb-0beed18622f8&t=172e2f19-ec67-4b5d-8ffb-0beed18622f8&width=1651&cache=v2)
这里的Service指的是内网服务地址,如果经由Traefik则必须使用域名。也可以跳过Treafik,使用
http
://unraid_ip:port
三、安装cloudflared
- 找到cloudflared点击安装
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2F5c4c3974-9960-41c7-bcbe-68cd7646e827%2Ftunnel2.png?table=block&id=be5f9007-b6a9-47a4-8035-4650a139e5a0&t=be5f9007-b6a9-47a4-8035-4650a139e5a0&width=336&cache=v2)
- 打开高级视图修改
发布参数
,与创建隧道时生成的命令一致(tunnel --no-autoupdate run --token <YourToken>
)。并在br0
网络分配一个IP。
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2Fc19ae26f-9bfb-4e77-98ae-331b93ab6662%2Ftunnel3.1.png?table=block&id=6a6f9946-241e-493d-b1cd-9b4355a93b96&t=6a6f9946-241e-493d-b1cd-9b4355a93b96&width=1578&cache=v2)
此IP需要添加到Traefik受信任的IP列表中traefik.yml:
- 启动容器
注意
cloudflared使用QUIC协议,如果路由器上运行有openclash,建议关闭UDP流量转发或排除cloudflared,否则可能会连接失败。
四、完成
Tunnel状态变为HEALTHY就完成了。
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2Fd683f5c0-e711-4fc2-965a-c48fcc6a5759%2Ftunnel6.png?table=block&id=8c0be2bf-609d-49c6-93d3-403c1648d4af&t=8c0be2bf-609d-49c6-93d3-403c1648d4af&width=1488&cache=v2)
🌐 Cloudflare 代理
一、端口转发设置
在路由器
网络
-防火墙
-端口转发
中新增一条转发将路由器WAN口的8443
端口的流量转发到Traefik(192.168.1.80)的443
端口。其中8443
也可以是其他Cloudfare支持的流量代理端口。![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2F2129cf6b-8c3d-42fd-b529-37bbcbad4fcf%2Fportfwd1.png?table=block&id=938bc056-ca7e-43c1-b15d-3b96ea2741e7&t=938bc056-ca7e-43c1-b15d-3b96ea2741e7&width=1955&cache=v2)
Cloudfare默认情况下支持流量代理端口如下:
HTTP端口
- 80
- 8080
- 8880
- 2052
- 2082
- 2086
- 2095
HTTPS端口
- 443
- 2053
- 2083
- 2087
- 2096
- 8443
二、DDNS设置
- 添加一个用于DDNS的记录
名称
这里使用随机生成的字符串。IPv4地址
目前可以随便填,注意要取消Cloudflare代理。![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2Febfcc67b-e7e0-40f2-a43d-a4d3e8a38ac8%2FDDNS1.png?table=block&id=078a98a3-c375-47ae-a81a-2aad43fe9b88&t=078a98a3-c375-47ae-a81a-2aad43fe9b88&width=1837&cache=v2)
为什么要单独添加一个DDNS的记录?
为了避免与Cloudflare API不必要的交互,详细的解释可以看这篇文章。
- 添加一个CNAME记录
为了以后不用每新增一个服务就新增一个域名,
名称
这里使用了泛域名*
。目标
则是上一步中的完整域名,并且开启Cloudflare代理。![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2Fc3c236ba-6481-47a5-822c-b335c168080c%2FDDNS2.png?table=block&id=eb0830ec-4649-47b3-b0c6-426e18e23a31&t=eb0830ec-4649-47b3-b0c6-426e18e23a31&width=1839&cache=v2)
泛域名
泛域名指在一个根域名之下,所有未建立的子域名的合集。如果某子域名已经存在,那么不在此列之中。
利用通配符
*
(星号)来做次级域名以实现所有的次级域名均指向同一IP地址。- 设置DDNS
在路由器的动态DNS中新建一个条目,
域名
中的主机名与域名使用@
而不是.
分隔。![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2Fa47e5f4b-9118-475d-90eb-e17088d8e9b8%2FDDNS5.png?table=block&id=4d01697c-fcd4-40d7-89c3-d5ba5b841486&t=4d01697c-fcd4-40d7-89c3-d5ba5b841486&width=1271&cache=v2)
- 完成
等待几分钟后,前面手动设置的192.168.1.10,已经自动更新为本地公网IP。
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2F3a8c79f8-14a1-4aa1-8641-4c766b4bf6cc%2FDDNS4.png?table=block&id=fbe8c76a-04a7-46ab-b4b2-d256a2d7f92e&t=fbe8c76a-04a7-46ab-b4b2-d256a2d7f92e&width=1892&cache=v2)
三、Origin Rules设置
在Cloudflare中找到Origin Rules设置
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2F11732269-2aca-4f66-a305-ff638863162a%2Frule1.png?table=block&id=b075cc8f-e3a0-41cb-aaa9-f28a4a0f057d&t=b075cc8f-e3a0-41cb-aaa9-f28a4a0f057d&width=380&cache=v2)
创建一条端口改写规则,将目标端口重写到
8443
。这里的匹配规则可以根据需求自行设置。![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2Ffaf3e99a-8c94-4db8-b193-e99ba6322965%2Frule2.png?table=block&id=d614c1ce-58d6-4995-b0cd-79fca0baeedd&t=d614c1ce-58d6-4995-b0cd-79fca0baeedd&width=1624&cache=v2)
四、完成
这个方法相较于Workers没有每日次数限制, 相对来说也更优雅, 还提供了DDoS防护和CDN缓存, 如果觉得慢还可以关闭缓存, 只用cast IP当跳板
最后: 根据评论所说,建议开启DNSSEC和端到端(FULL)加密。
👥 真实IP
如果Traefik位于Cloudflare代理/隧道后面,它将无法从外部客户端获取真实IP以及其他信息。基于客户端IP的部分功能无法生效,如CrowdSec等。
所以我们还需要安装
Real IP from Cloudflare Proxy/Tunnel
插件来获取客户端真实IP。在下方找到此插件
该插件通过CF-Connecting-IP覆盖X-Real-IP和X-Forwarded-For来解决此问题。
如果请求来自Cloudflare,则真实IP将是Cf-Connecting-IP(在配置文件中的最可信IP)。
该插件还将CF-Visitor方案写入X-Forwarded-Proto。(这解决了在使用CF[443]→PROXY/隧道→Traefik[80]→WP[80]时,WordPress出现的无限重定向问题)
插件安装
![notion image](https://img.biliko.net/2024/04/1b612ba46de10588460dac76e969633f.png?t=12f91b8c-1188-4b5c-b56d-08093fd29ebd)
在静态配置文件中:
在动态配置文件中:
完成
可以看到插件安装好后,X-Real-IP已经是客户端的真实IP了。
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fd830565e-330b-4d2f-b216-b572f545000b%2F449fc8f8-b92f-42c0-9155-edf4e9e9a626%2Flog2.1.png?table=block&id=49c76c43-7ddf-4908-a555-d0fa7c772c3d&t=49c76c43-7ddf-4908-a555-d0fa7c772c3d&width=888&cache=v2)
📎 参考文章
有关Cloudflare使用上的问题,欢迎您在底部评论区留言,一起交流~
- 作者:Biliko
- 链接:https://biliko.net/article/traefik-part7
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章