mirror of
https://github.com/fosrl/olm.git
synced 2026-03-11 05:06:43 +00:00
48
olm/olm.go
48
olm/olm.go
@@ -15,7 +15,6 @@ import (
|
||||
"github.com/fosrl/olm/api"
|
||||
"github.com/fosrl/olm/network"
|
||||
"github.com/fosrl/olm/peermonitor"
|
||||
"github.com/fosrl/olm/tunfilter"
|
||||
"github.com/fosrl/olm/websocket"
|
||||
"golang.zx2c4.com/wireguard/device"
|
||||
"golang.zx2c4.com/wireguard/tun"
|
||||
@@ -71,6 +70,8 @@ var (
|
||||
holePunchData HolePunchData
|
||||
uapiListener net.Listener
|
||||
tdev tun.Device
|
||||
filteredDev *FilteredDevice
|
||||
dnsProxy *DNSProxy
|
||||
apiServer *api.API
|
||||
olmClient *websocket.Client
|
||||
tunnelCancel context.CancelFunc
|
||||
@@ -82,12 +83,6 @@ var (
|
||||
globalCtx context.Context
|
||||
stopRegister func()
|
||||
stopPing chan struct{}
|
||||
|
||||
// Packet interceptor components
|
||||
filteredDev *tunfilter.FilteredDevice
|
||||
packetInjector *tunfilter.PacketInjector
|
||||
interceptorManager *tunfilter.InterceptorManager
|
||||
ipFilter *tunfilter.IPFilter
|
||||
)
|
||||
|
||||
func Init(ctx context.Context, config GlobalConfig) {
|
||||
@@ -431,15 +426,19 @@ func StartTunnel(config TunnelConfig) {
|
||||
}
|
||||
}
|
||||
|
||||
// Create packet injector for the TUN device
|
||||
packetInjector = tunfilter.NewPacketInjector(tdev)
|
||||
// Wrap TUN device with packet filter for DNS proxy
|
||||
filteredDev = NewFilteredDevice(tdev)
|
||||
|
||||
// Create interceptor manager
|
||||
interceptorManager = tunfilter.NewInterceptorManager(packetInjector)
|
||||
|
||||
// Create an interceptor filter and wrap the TUN device
|
||||
interceptorFilter := tunfilter.NewInterceptorFilter(interceptorManager)
|
||||
filteredDev = tunfilter.NewFilteredDevice(tdev, interceptorFilter)
|
||||
// Create and start DNS proxy
|
||||
dnsProxy, err = NewDNSProxy(tdev, config.MTU)
|
||||
if err != nil {
|
||||
logger.Error("Failed to create DNS proxy: %v", err)
|
||||
return
|
||||
}
|
||||
if err := dnsProxy.Start(filteredDev); err != nil {
|
||||
logger.Error("Failed to start DNS proxy: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// fileUAPI, err := func() (*os.File, error) {
|
||||
// if config.FileDescriptorUAPI != 0 {
|
||||
@@ -1066,26 +1065,17 @@ func Close() {
|
||||
dev = nil
|
||||
}
|
||||
|
||||
// Stop packet injector
|
||||
if packetInjector != nil {
|
||||
packetInjector.Stop()
|
||||
packetInjector = nil
|
||||
// Stop DNS proxy
|
||||
if dnsProxy != nil {
|
||||
dnsProxy.Stop(filteredDev)
|
||||
dnsProxy = nil
|
||||
}
|
||||
|
||||
// Stop interceptor manager
|
||||
if interceptorManager != nil {
|
||||
interceptorManager.Stop()
|
||||
interceptorManager = nil
|
||||
}
|
||||
|
||||
// Clear packet filter
|
||||
// Clear filtered device
|
||||
if filteredDev != nil {
|
||||
filteredDev.SetFilter(nil)
|
||||
filteredDev = nil
|
||||
}
|
||||
|
||||
ipFilter = nil
|
||||
|
||||
// Close TUN device
|
||||
if tdev != nil {
|
||||
tdev.Close()
|
||||
|
||||
Reference in New Issue
Block a user