ssl - Traefik 2.0 TLS TCP 直通
问题描述
我有一个 VM0,其中 Traefik 作为 docker 运行,两个目标系统 VM1 和 VM2 都运行了一个网络服务器。
所有 domainA.com 请求都应通过 TCP 路由器和 tls 直通转到 VM1,因为此 Web 服务正在处理证书本身。
所有 domainB.com 请求都应该通过 http 路由器发送到 VM2,Traefik 应该为这个域生成 tls 证书。
我现在的问题是,一旦我将任何 tls 配置添加到 http 路由器,似乎 tcp passthrough 就不再起作用了。在日志中,我看到以下消息:
time="2020-03-15T21:46:18Z" level=debug msg="为请求提供默认证书:\"subdomain.DomainA.com\"" time="2020-03-15T21:46:18Z" level= debug msg="http:来自 192.168.1.116:55103 的 TLS 握手错误:远程错误:tls:未知证书" time="2020-03-15T21:46:18Z" level=debug msg="为请求提供默认证书:\ "subdomain.DomainA.com\"" time="2020-03-15T21:46:18Z" level=debug msg="http: 来自 192.168.1.116:55104 的 TLS 握手错误:远程错误:tls:未知证书"
如果我通过 Traefik 访问该网站,它会显示来自 Traefik 的自签名证书。
如果我删除了 http 路由器下的所有 tls 设置,则直通将再次起作用。
我的动态文件:
http:
routers:
HTTProuter0:
rule: "HostRegexp(`{subdomain:[a-z]+}.domainA.com`)"
service: "domainA"
entryPoints:
- "websecure"
tls:
certResolver: "myresolver"
domains:
- main: "domainA.com"
sans:
- "*.domainA.com"
services:
domainA:
loadBalancer:
servers:
- url: "https://192.168.1.13:4433"
tcp:
routers:
TCProuter0:
rule: "HostSNI(`*`)"
service: "domainB"
entryPoints:
- "websecure"
tls:
passthrough: true
services:
domainB:
loadBalancer:
servers:
- address: "192.168.1.11:443"
我的静态文件:
serversTransport:
insecureSkipVerify: true
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
spain:
address: ":4443"
certificatesResolvers:
myresolver:
acme:
email: email@email.com
storage: /etc/traefik/acme/acme.json
dnsChallenge:
provider: cloudflare
delayBeforeCheck: 60
resolvers:
- "1.1.1.1:53"
- "8.8.8.8:53"
api:
insecure: true
dashboard: true
providers:
docker: {}
file:
directory: /etc/traefik/config
watch: true
log:
filePath: /etc/traefik/traefik.log
level: DEBUG
我现在被这个问题困了几个小时。我不确定这是一个错误还是我做错了什么?
任何帮助将不胜感激!
非常感谢
解决方案
我发现了问题。难以置信,我为此浪费了这么多时间……似乎 Traefik 不支持通配符与 HostSNI 中的域结合使用。
HostSNI(`*`)
=> 作品
HostSNI(`*.mydomain.com`)
=> 不工作!!!!
HostSNI(`www.mydomain.com`,`web.mydomain.com`)
=> 工作
所以我明确添加了每个域,现在它可以工作了。
推荐阅读
- python - 在 cron 作业期间在 subshell 中引用 Python 3.7.3
- python - 无效的网址。姜戈
- c# - .net core 3 控制器中的并发/任务问题
- javascript - 未能加载资源 signalr.js.map 信号器核心
- javascript - 如何处理与图形渲染相关的 Dash (Plotly) Javascript 错误?
- grafana - 查询特定数据点的 Graphite Metrics
- r - 在 R 中获取新变量的问题
- css - ion-col 上的列之间没有填充?
- javascript - 给定未编码字符串的长度,有什么单一公式可以揭示 base-64 编码后该字符串的长度?
- python - Django Black 在 Pipenv 环境中未正确安装