mirror of
https://github.com/SagerNet/sing-tun.git
synced 2025-03-31 10:27:39 +03:00
Improve add windows route
This commit is contained in:
parent
f457988090
commit
aa9d9c6296
1 changed files with 37 additions and 18 deletions
|
@ -172,15 +172,9 @@ func (t *NativeTun) Start() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, routeRange := range routeRanges {
|
||||
if routeRange.Addr().Is4() {
|
||||
err = luid.AddRoute(routeRange, gateway4, 0)
|
||||
} else {
|
||||
err = luid.AddRoute(routeRange, gateway6, 0)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = addRouteList(luid, routeRanges, gateway4, gateway6, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = windnsapi.FlushResolverCache()
|
||||
if err != nil {
|
||||
|
@ -560,15 +554,9 @@ func (t *NativeTun) UpdateRouteOptions(tunOptions Options) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, routeRange := range routeRanges {
|
||||
if routeRange.Addr().Is4() {
|
||||
err = luid.AddRoute(routeRange, gateway4, 0)
|
||||
} else {
|
||||
err = luid.AddRoute(routeRange, gateway6, 0)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = addRouteList(luid, routeRanges, gateway4, gateway6, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = windnsapi.FlushResolverCache()
|
||||
if err != nil {
|
||||
|
@ -577,6 +565,37 @@ func (t *NativeTun) UpdateRouteOptions(tunOptions Options) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func addRouteList(luid winipcfg.LUID, destinations []netip.Prefix, gateway4 netip.Addr, gateway6 netip.Addr, metric uint32) error {
|
||||
row := winipcfg.MibIPforwardRow2{}
|
||||
row.Init()
|
||||
row.InterfaceLUID = luid
|
||||
row.Metric = metric
|
||||
nextHop4 := row.NextHop
|
||||
nextHop6 := row.NextHop
|
||||
if gateway4.IsValid() {
|
||||
nextHop4.SetAddr(gateway4)
|
||||
}
|
||||
if gateway6.IsValid() {
|
||||
nextHop6.SetAddr(gateway6)
|
||||
}
|
||||
for _, destination := range destinations {
|
||||
err := row.DestinationPrefix.SetPrefix(destination)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if destination.Addr().Is4() {
|
||||
row.NextHop = nextHop4
|
||||
} else {
|
||||
row.NextHop = nextHop6
|
||||
}
|
||||
err = row.Create()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func generateGUIDByDeviceName(name string) *windows.GUID {
|
||||
hash := md5.New()
|
||||
hash.Write([]byte("wintun"))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue