feat: add mdns hostname metadata variant and fix vhost routing

- Add HostnameMetadata::Mdns variant to distinguish mDNS from private domains
- Mark mDNS addresses as private (public: false) since mDNS is local-only
- Fall back to null SNI entry when hostname not found in vhost mapping
- Simplify public detection in ProxyTarget filter
- Pass hostname to update_addresses for mDNS domain name generation
This commit is contained in:
Aiden McClelland
2026-02-14 15:34:48 -07:00
parent 098d9275f4
commit 3a63f3b840
16 changed files with 105 additions and 45 deletions

View File

@@ -30,6 +30,7 @@ function getGatewayIds(h: T.HostnameInfo): string[] {
case 'ipv6':
case 'public-domain':
return [h.metadata.gateway]
case 'mdns':
case 'private-domain':
return h.metadata.gateways
case 'plugin':
@@ -45,8 +46,10 @@ function getAddressType(h: T.HostnameInfo): string {
return 'IPv6'
case 'public-domain':
return 'Public Domain'
case 'mdns':
return 'mDNS'
case 'private-domain':
return h.host.endsWith('.local') ? 'mDNS' : 'Private Domain'
return 'Private Domain'
case 'plugin':
return 'Plugin'
}
@@ -84,8 +87,7 @@ export class InterfaceService {
const isDomain =
h.metadata.kind === 'private-domain' ||
h.metadata.kind === 'public-domain'
const isMdns =
h.metadata.kind === 'private-domain' && h.host.endsWith('.local')
const isMdns = h.metadata.kind === 'mdns'
const address: GatewayAddress = {
enabled,

View File

@@ -2137,7 +2137,7 @@ export namespace Mock {
host: 'adjective-noun.local',
port: 1234,
metadata: {
kind: 'private-domain',
kind: 'mdns',
gateways: ['eth0', 'wlan0'],
},
},

View File

@@ -49,7 +49,7 @@ export const mockPatchData: DataModel = {
host: 'adjective-noun.local',
port: 443,
metadata: {
kind: 'private-domain',
kind: 'mdns',
gateways: ['eth0', 'wlan0'],
},
},
@@ -515,7 +515,7 @@ export const mockPatchData: DataModel = {
host: 'adjective-noun.local',
port: 443,
metadata: {
kind: 'private-domain',
kind: 'mdns',
gateways: ['eth0'],
},
},
@@ -622,7 +622,7 @@ export const mockPatchData: DataModel = {
host: 'adjective-noun.local',
port: 8332,
metadata: {
kind: 'private-domain',
kind: 'mdns',
gateways: ['eth0'],
},
},