diff --git a/ipn/ipnlocal/local.go b/ipn/ipnlocal/local.go index 07c7aeaa1..27095a85c 100644 --- a/ipn/ipnlocal/local.go +++ b/ipn/ipnlocal/local.go @@ -2362,6 +2362,9 @@ func (b *LocalBackend) checkPrefsLocked(p *ipn.Prefs) error { if err := b.checkSSHPrefsLocked(p); err != nil { errs = append(errs, err) } + if err := b.checkExitNodePrefsLocked(p); err != nil { + errs = append(errs, err) + } return multierr.New(errs...) } @@ -2441,6 +2444,13 @@ func (b *LocalBackend) isDefaultServerLocked() bool { return prefs.ControlURLOrDefault() == ipn.DefaultControlURL } +func (b *LocalBackend) checkExitNodePrefsLocked(p *ipn.Prefs) error { + if (p.ExitNodeIP.IsValid() || p.ExitNodeID != "") && p.AdvertisesExitNode() { + return errors.New("Cannot advertise an exit node and use an exit node at the same time.") + } + return nil +} + func (b *LocalBackend) EditPrefs(mp *ipn.MaskedPrefs) (ipn.PrefsView, error) { b.mu.Lock() if mp.EggSet {