fix dns client
This commit is contained in:
parent
9d3a380063
commit
abfc35aa7d
@ -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"
|
||||
@ -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
|
||||
|
||||
@ -52,9 +52,8 @@ public class SDLContext {
|
||||
var superClientActor: SDLSuperClientActor?
|
||||
var providerActor: SDLTunnelProviderActor
|
||||
var puncherActor: SDLPuncherActor
|
||||
|
||||
// dns的client对象
|
||||
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地址
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user