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 // sn-server
@available(macOS 14, *) @available(macOS 14, *)
actor DNSClient { actor SDLDNSClientActor {
private let group = MultiThreadedEventLoopGroup(numberOfThreads: 1) private let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
private let asyncChannel: NIOAsyncChannel<AddressedEnvelope<ByteBuffer>, AddressedEnvelope<ByteBuffer>> private let asyncChannel: NIOAsyncChannel<AddressedEnvelope<ByteBuffer>, AddressedEnvelope<ByteBuffer>>
private let (writeStream, writeContinuation) = AsyncStream.makeStream(of: Data.self, bufferingPolicy: .unbounded) private let (writeStream, writeContinuation) = AsyncStream.makeStream(of: Data.self, bufferingPolicy: .unbounded)
@ -101,7 +101,7 @@ actor DNSClient {
} }
extension DNSClient { extension SDLDNSClientActor {
struct Helper { struct Helper {
static let dnsServer: String = "100.100.100.100" 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 netAddress = SDLNetAddress(ip: devAddr.netAddr, maskLen: UInt8(devAddr.netBitLen))
let routes = [ let routes = [
Route(dstAddress: netAddress.networkAddress, subnetMask: netAddress.maskAddress), Route(dstAddress: netAddress.networkAddress, subnetMask: netAddress.maskAddress),
@ -74,6 +74,8 @@ actor SDLTunnelProviderActor {
networkSettings.ipv4Settings = ipv4Settings networkSettings.ipv4Settings = ipv4Settings
// //
try await self.provider.setTunnelNetworkSettings(networkSettings) try await self.provider.setTunnelNetworkSettings(networkSettings)
return netAddress.ipAddress
} }
// , 线packetFlow // , 线packetFlow

View File

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