45 lines
1.5 KiB
Swift
45 lines
1.5 KiB
Swift
//
|
|
// DNSDispatcher.swift
|
|
// punchnet
|
|
//
|
|
// Created by 安礼成 on 2026/4/10.
|
|
//
|
|
import Foundation
|
|
|
|
// MARK: - DNS 分流調度器
|
|
final class DNSDispatcher {
|
|
// private let localClient: SDLLocalDNSClient
|
|
// private let cloudClient: SDLDNSClient // 假設這是你原有的雲端 Client
|
|
// private let logger: SDLLogger
|
|
// private let internalDomain = "punchsky.com"
|
|
//
|
|
// init(localClient: SDLLocalDNSClient, cloudClient: SDLDNSClient, logger: SDLLogger) {
|
|
// self.localClient = localClient
|
|
// self.cloudClient = cloudClient
|
|
// self.logger = logger
|
|
// }
|
|
//
|
|
// /// 處理來自 TUN 的原始 IP 數據包
|
|
// func dispatch(packet: IPPacket) {
|
|
// // 1. 獲取 UDP 載荷 (假設 IPv4 20字節 + UDP 8字節)
|
|
// let udpPayload = packet.data.suffix(from: 28)
|
|
//
|
|
// // 2. 解析 DNS 內容
|
|
// let parser = DNSParser(data: udpPayload)
|
|
// guard let dnsMsg = parser.parse(), let firstQuestion = dnsMsg.questions.first else {
|
|
// return
|
|
// }
|
|
//
|
|
// let domain = firstQuestion.name
|
|
//
|
|
// // 3. 根據域名分流
|
|
// if domain.hasSuffix(internalDomain) {
|
|
// logger.log("[Dispatcher] Cloud Route: \(domain)", level: .debug)
|
|
// cloudClient.forward(ipPacket: packet) // 雲端通常需要完整包做隧道封裝
|
|
// } else {
|
|
// logger.log("[Dispatcher] Local Route: \(domain)", level: .debug)
|
|
// localClient.query(dnsPayload: udpPayload) // 本地只需轉發載荷
|
|
// }
|
|
// }
|
|
}
|