auto-assign snataddr on Mac+Windows

This commit is contained in:
JackDoan
2026-02-17 13:50:20 -06:00
parent 1cc257f997
commit 27d764ba57
2 changed files with 15 additions and 1 deletions

View File

@@ -216,6 +216,11 @@ func (t *tun) Activate() error {
}
}
}
if t.snatAddr.IsValid() && t.snatAddr.Addr().Is4() {
if err = t.activate4(t.snatAddr); err != nil {
return err
}
}
// Run the interface
ifrf.Flags = ifrf.Flags | unix.IFF_UP | unix.IFF_RUNNING
@@ -317,6 +322,10 @@ func (t *tun) reload(c *config.C, initial bool) error {
return nil
}
if !initial {
t.snatAddr = prepareSnatAddr(t, t.l, c, routes)
}
routeTree, err := makeRouteTree(t.l, routes, false)
if err != nil {
return err

View File

@@ -139,7 +139,12 @@ func (t *winTun) reload(c *config.C, initial bool) error {
func (t *winTun) Activate() error {
luid := winipcfg.LUID(t.tun.LUID())
err := luid.SetIPAddresses(t.vpnNetworks)
prefixes := t.vpnNetworks
if t.snatAddr.IsValid() {
prefixes = append(prefixes, t.snatAddr)
}
err := luid.SetIPAddresses(prefixes)
if err != nil {
return fmt.Errorf("failed to set address: %w", err)
}