fix dns client

This commit is contained in:
anlicheng 2026-01-07 17:58:19 +08:00
parent 9d3a380063
commit abfc35aa7d
3 changed files with 19 additions and 14 deletions

View File

@ -11,7 +11,7 @@ import NIOPosix
// sn-server
@available(macOS 14, *)
actor DNSClient {
actor SDLDNSClientActor {
private let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
private let asyncChannel: NIOAsyncChannel<AddressedEnvelope<ByteBuffer>, AddressedEnvelope<ByteBuffer>>
private let (writeStream, writeContinuation) = AsyncStream.makeStream(of: Data.self, bufferingPolicy: .unbounded)
@ -101,7 +101,7 @@ actor DNSClient {
}
extension DNSClient {
extension SDLDNSClientActor {
struct Helper {
static let dnsServer: String = "100.100.100.100"

View File

@ -44,7 +44,7 @@ actor SDLTunnelProviderActor {
}
//
func setNetworkSettings(devAddr: SDLDevAddr, dnsServer: String) async throws {
func setNetworkSettings(devAddr: SDLDevAddr, dnsServer: String) async throws -> String {
let netAddress = SDLNetAddress(ip: devAddr.netAddr, maskLen: UInt8(devAddr.netBitLen))
let routes = [
Route(dstAddress: netAddress.networkAddress, subnetMask: netAddress.maskAddress),
@ -74,6 +74,8 @@ actor SDLTunnelProviderActor {
networkSettings.ipv4Settings = ipv4Settings
//
try await self.provider.setTunnelNetworkSettings(networkSettings)
return netAddress.ipAddress
}
// , 线packetFlow

View File

@ -52,9 +52,8 @@ public class SDLContext {
var superClientActor: SDLSuperClientActor?
var providerActor: SDLTunnelProviderActor
var puncherActor: SDLPuncherActor
// dnsclient
var dnsClient: DNSClient?
var dnsClientActor: SDLDNSClientActor?
//
private var readTask: Task<(), Never>?
@ -258,7 +257,7 @@ public class SDLContext {
private func startDnsClient() async throws {
let remoteDnsServer = config.remoteDnsServer
let dnsSocketAddress = try SocketAddress.makeAddressResolvingHost(remoteDnsServer, port: 15353)
self.dnsClient = try await DNSClient(dnsServerAddress: dnsSocketAddress, logger: self.logger)
self.dnsClientActor = try await SDLDNSClientActor(dnsServerAddress: dnsSocketAddress, logger: self.logger)
try await withThrowingTaskGroup(of: Void.self) { group in
defer {
@ -266,11 +265,11 @@ public class SDLContext {
}
group.addTask {
try await self.dnsClient?.start()
try await self.dnsClientActor?.start()
}
group.addTask {
if let packetFlow = self.dnsClient?.packetFlow {
if let packetFlow = self.dnsClientActor?.packetFlow {
for await packet in packetFlow {
let nePacket = NEPacket(data: packet, protocolFamily: 2)
await self.providerActor.writePackets(packets: [nePacket])
@ -320,7 +319,9 @@ public class SDLContext {
// tun
do {
try await self.providerActor.setNetworkSettings(devAddr: self.devAddr, dnsServer: DNSClient.Helper.dnsServer)
let ipAddress = try await self.providerActor.setNetworkSettings(devAddr: self.devAddr, dnsServer: SDLDNSClientActor.Helper.dnsServer)
await self.noticeClient?.send(data: NoticeMessage.ipAdress(ip: ipAddress))
self.startReader()
} catch let err {
self.logger.log("[SDLContext] setTunnelNetworkSettings get error: \(err)", level: .error)
@ -386,7 +387,9 @@ public class SDLContext {
// tun
do {
try await self.providerActor.setNetworkSettings(devAddr: self.devAddr, dnsServer: DNSClient.Helper.dnsServer)
let ipAddress = try await self.providerActor.setNetworkSettings(devAddr: self.devAddr, dnsServer: SDLDNSClientActor.Helper.dnsServer)
await self.noticeClient?.send(data: NoticeMessage.ipAdress(ip: ipAddress))
self.startReader()
} catch let err {
self.logger.log("[SDLContext] setTunnelNetworkSettings get error: \(err)", level: .error)
@ -536,10 +539,10 @@ public class SDLContext {
return
}
if DNSClient.Helper.isDnsRequestPacket(ipPacket: packet) {
if SDLDNSClientActor.Helper.isDnsRequestPacket(ipPacket: packet) {
let destIp = packet.header.destination_ip
NSLog("destIp: \(destIp), int: \(packet.header.destination)")
await self.dnsClient?.forward(ipPacket: packet)
self.logger.log("[DNSQuery] destIp: \(destIp), int: \(packet.header.destination)", level: .debug)
await self.dnsClientActor?.forward(ipPacket: packet)
}
else {
Task.detached {
@ -604,7 +607,7 @@ public class SDLContext {
self.rootTask?.cancel()
self.udpHoleActor = nil
self.superClientActor = nil
self.dnsClient = nil
self.dnsClientActor = nil
}
// mac