Skip to content

Commit 20091a8

Browse files
authored
Merge pull request #545 from Dstack-TEE/feat/gateway-wildcard-custom-domain
feat: support wildcard custom domains in gateway
2 parents 5aabbd0 + fb5914b commit 20091a8

1 file changed

Lines changed: 16 additions & 5 deletions

File tree

gateway/src/proxy/tls_passthough.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,19 +58,30 @@ async fn resolve_app_address(prefix: &str, sni: &str, compat: bool) -> Result<Ap
5858
};
5959
return AppAddress::parse(data).context("failed to parse app address");
6060
}
61-
anyhow::bail!("failed to resolve legacy app address");
62-
} else {
61+
} else if let Ok(lookup) = resolver.txt_lookup(txt_domain).await {
62+
if let Some(txt_record) = lookup.iter().next() {
63+
if let Some(data) = txt_record.txt_data().first() {
64+
return AppAddress::parse(data).context("failed to parse app address");
65+
}
66+
}
67+
}
68+
69+
// wildcard fallback: try {prefix}-wildcard.{parent_domain}
70+
if let Some((_, parent)) = sni.split_once('.') {
71+
let wildcard_domain = format!("{prefix}-wildcard.{parent}");
6372
let lookup = resolver
64-
.txt_lookup(txt_domain)
73+
.txt_lookup(wildcard_domain)
6574
.await
66-
.context("failed to lookup app address")?;
75+
.context("failed to lookup wildcard app address")?;
6776
let txt_record = lookup.iter().next().context("no txt record found")?;
6877
let data = txt_record
6978
.txt_data()
7079
.first()
7180
.context("no data in txt record")?;
72-
AppAddress::parse(data).context("failed to parse app address")
81+
return AppAddress::parse(data).context("failed to parse app address");
7382
}
83+
84+
anyhow::bail!("failed to resolve app address for {sni}");
7485
}
7586

7687
pub(crate) async fn proxy_with_sni(

0 commit comments

Comments
 (0)