|
|
@@ -99,11 +99,11 @@ func ixHandshakeStage0(f *Interface, hh *HandshakeHostInfo) bool {
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
-func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet []byte, h *header.H) {
|
|
|
+func ixHandshakeStage1(f *Interface, via ViaSender, packet []byte, h *header.H) {
|
|
|
cs := f.pki.getCertState()
|
|
|
crt := cs.GetDefaultCertificate()
|
|
|
if crt == nil {
|
|
|
- f.l.WithField("udpAddr", addr).
|
|
|
+ f.l.WithField("from", via).
|
|
|
WithField("handshake", m{"stage": 0, "style": "ix_psk0"}).
|
|
|
WithField("certVersion", cs.initiatingVersion).
|
|
|
Error("Unable to handshake with host because no certificate is available")
|
|
|
@@ -112,7 +112,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
|
|
|
ci, err := NewConnectionState(f.l, cs, crt, false, noise.HandshakeIX)
|
|
|
if err != nil {
|
|
|
- f.l.WithError(err).WithField("udpAddr", addr).
|
|
|
+ f.l.WithError(err).WithField("from", via).
|
|
|
WithField("handshake", m{"stage": 1, "style": "ix_psk0"}).
|
|
|
Error("Failed to create connection state")
|
|
|
return
|
|
|
@@ -123,7 +123,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
|
|
|
msg, _, _, err := ci.H.ReadMessage(nil, packet[header.Len:])
|
|
|
if err != nil {
|
|
|
- f.l.WithError(err).WithField("udpAddr", addr).
|
|
|
+ f.l.WithError(err).WithField("from", via).
|
|
|
WithField("handshake", m{"stage": 1, "style": "ix_psk0"}).
|
|
|
Error("Failed to call noise.ReadMessage")
|
|
|
return
|
|
|
@@ -132,7 +132,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
hs := &NebulaHandshake{}
|
|
|
err = hs.Unmarshal(msg)
|
|
|
if err != nil || hs.Details == nil {
|
|
|
- f.l.WithError(err).WithField("udpAddr", addr).
|
|
|
+ f.l.WithError(err).WithField("from", via).
|
|
|
WithField("handshake", m{"stage": 1, "style": "ix_psk0"}).
|
|
|
Error("Failed unmarshal handshake message")
|
|
|
return
|
|
|
@@ -140,7 +140,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
|
|
|
rc, err := cert.Recombine(cert.Version(hs.Details.CertVersion), hs.Details.Cert, ci.H.PeerStatic(), ci.Curve())
|
|
|
if err != nil {
|
|
|
- f.l.WithError(err).WithField("udpAddr", addr).
|
|
|
+ f.l.WithError(err).WithField("from", via).
|
|
|
WithField("handshake", m{"stage": 1, "style": "ix_psk0"}).
|
|
|
Info("Handshake did not contain a certificate")
|
|
|
return
|
|
|
@@ -153,7 +153,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
fp = "<error generating certificate fingerprint>"
|
|
|
}
|
|
|
|
|
|
- e := f.l.WithError(err).WithField("udpAddr", addr).
|
|
|
+ e := f.l.WithError(err).WithField("from", via).
|
|
|
WithField("handshake", m{"stage": 1, "style": "ix_psk0"}).
|
|
|
WithField("certVpnNetworks", rc.Networks()).
|
|
|
WithField("certFingerprint", fp)
|
|
|
@@ -172,7 +172,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
if myCertOtherVersion == nil {
|
|
|
if f.l.Level >= logrus.DebugLevel {
|
|
|
f.l.WithError(err).WithFields(m{
|
|
|
- "udpAddr": addr,
|
|
|
+ "from": via,
|
|
|
"handshake": m{"stage": 1, "style": "ix_psk0"},
|
|
|
"cert": remoteCert,
|
|
|
}).Debug("Might be unable to handshake with host due to missing certificate version")
|
|
|
@@ -184,7 +184,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
}
|
|
|
|
|
|
if len(remoteCert.Certificate.Networks()) == 0 {
|
|
|
- f.l.WithError(err).WithField("udpAddr", addr).
|
|
|
+ f.l.WithError(err).WithField("from", via).
|
|
|
WithField("cert", remoteCert).
|
|
|
WithField("handshake", m{"stage": 1, "style": "ix_psk0"}).
|
|
|
Info("No networks in certificate")
|
|
|
@@ -201,7 +201,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
vpnAddrs := make([]netip.Addr, len(vpnNetworks))
|
|
|
for i, network := range vpnNetworks {
|
|
|
if f.myVpnAddrsTable.Contains(network.Addr()) {
|
|
|
- f.l.WithField("vpnNetworks", vpnNetworks).WithField("udpAddr", addr).
|
|
|
+ f.l.WithField("vpnNetworks", vpnNetworks).WithField("from", via).
|
|
|
WithField("certName", certName).
|
|
|
WithField("certVersion", certVersion).
|
|
|
WithField("fingerprint", fingerprint).
|
|
|
@@ -215,18 +215,18 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if addr.IsValid() {
|
|
|
- // addr can be invalid when the tunnel is being relayed.
|
|
|
+ if !via.IsRelayed {
|
|
|
// We only want to apply the remote allow list for direct tunnels here
|
|
|
- if !f.lightHouse.GetRemoteAllowList().AllowAll(vpnAddrs, addr.Addr()) {
|
|
|
- f.l.WithField("vpnAddrs", vpnAddrs).WithField("udpAddr", addr).Debug("lighthouse.remote_allow_list denied incoming handshake")
|
|
|
+ if !f.lightHouse.GetRemoteAllowList().AllowAll(vpnAddrs, via.UdpAddr.Addr()) {
|
|
|
+ f.l.WithField("vpnAddrs", vpnAddrs).WithField("from", via).
|
|
|
+ Debug("lighthouse.remote_allow_list denied incoming handshake")
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
myIndex, err := generateIndex(f.l)
|
|
|
if err != nil {
|
|
|
- f.l.WithError(err).WithField("vpnAddrs", vpnAddrs).WithField("udpAddr", addr).
|
|
|
+ f.l.WithError(err).WithField("vpnAddrs", vpnAddrs).WithField("from", via).
|
|
|
WithField("certName", certName).
|
|
|
WithField("certVersion", certVersion).
|
|
|
WithField("fingerprint", fingerprint).
|
|
|
@@ -251,7 +251,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
|
|
|
msgRxL := f.l.WithFields(m{
|
|
|
"vpnAddrs": vpnAddrs,
|
|
|
- "udpAddr": addr,
|
|
|
+ "from": via,
|
|
|
"certName": certName,
|
|
|
"certVersion": certVersion,
|
|
|
"fingerprint": fingerprint,
|
|
|
@@ -283,7 +283,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
|
|
|
hsBytes, err := hs.Marshal()
|
|
|
if err != nil {
|
|
|
- f.l.WithError(err).WithField("vpnAddrs", hostinfo.vpnAddrs).WithField("udpAddr", addr).
|
|
|
+ f.l.WithError(err).WithField("vpnAddrs", hostinfo.vpnAddrs).WithField("from", via).
|
|
|
WithField("certName", certName).
|
|
|
WithField("certVersion", certVersion).
|
|
|
WithField("fingerprint", fingerprint).
|
|
|
@@ -295,7 +295,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
nh := header.Encode(make([]byte, header.Len), header.Version, header.Handshake, header.HandshakeIXPSK0, hs.Details.InitiatorIndex, 2)
|
|
|
msg, dKey, eKey, err := ci.H.WriteMessage(nh, hsBytes)
|
|
|
if err != nil {
|
|
|
- f.l.WithError(err).WithField("vpnAddrs", hostinfo.vpnAddrs).WithField("udpAddr", addr).
|
|
|
+ f.l.WithError(err).WithField("vpnAddrs", hostinfo.vpnAddrs).WithField("from", via).
|
|
|
WithField("certName", certName).
|
|
|
WithField("certVersion", certVersion).
|
|
|
WithField("fingerprint", fingerprint).
|
|
|
@@ -303,7 +303,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
WithField("handshake", m{"stage": 1, "style": "ix_psk0"}).Error("Failed to call noise.WriteMessage")
|
|
|
return
|
|
|
} else if dKey == nil || eKey == nil {
|
|
|
- f.l.WithField("vpnAddrs", hostinfo.vpnAddrs).WithField("udpAddr", addr).
|
|
|
+ f.l.WithField("vpnAddrs", hostinfo.vpnAddrs).WithField("from", via).
|
|
|
WithField("certName", certName).
|
|
|
WithField("certVersion", certVersion).
|
|
|
WithField("fingerprint", fingerprint).
|
|
|
@@ -329,7 +329,9 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
ci.eKey = NewNebulaCipherState(eKey)
|
|
|
|
|
|
hostinfo.remotes = f.lightHouse.QueryCache(vpnAddrs)
|
|
|
- hostinfo.SetRemote(addr)
|
|
|
+ if !via.IsRelayed {
|
|
|
+ hostinfo.SetRemote(via.UdpAddr)
|
|
|
+ }
|
|
|
hostinfo.buildNetworks(f.myVpnNetworksTable, remoteCert.Certificate)
|
|
|
|
|
|
existing, err := f.handshakeManager.CheckAndComplete(hostinfo, 0, f)
|
|
|
@@ -337,7 +339,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
switch err {
|
|
|
case ErrAlreadySeen:
|
|
|
// Update remote if preferred
|
|
|
- if existing.SetRemoteIfPreferred(f.hostMap, addr) {
|
|
|
+ if existing.SetRemoteIfPreferred(f.hostMap, via) {
|
|
|
// Send a test packet to ensure the other side has also switched to
|
|
|
// the preferred remote
|
|
|
f.SendMessageToVpnAddr(header.Test, header.TestRequest, vpnAddrs[0], []byte(""), make([]byte, 12, 12), make([]byte, mtu))
|
|
|
@@ -345,21 +347,21 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
|
|
|
msg = existing.HandshakePacket[2]
|
|
|
f.messageMetrics.Tx(header.Handshake, header.MessageSubType(msg[1]), 1)
|
|
|
- if addr.IsValid() {
|
|
|
- err := f.outside.WriteTo(msg, addr)
|
|
|
+ if !via.IsRelayed {
|
|
|
+ err := f.outside.WriteTo(msg, via.UdpAddr)
|
|
|
if err != nil {
|
|
|
- f.l.WithField("vpnAddrs", existing.vpnAddrs).WithField("udpAddr", addr).
|
|
|
+ f.l.WithField("vpnAddrs", existing.vpnAddrs).WithField("from", via).
|
|
|
WithField("handshake", m{"stage": 2, "style": "ix_psk0"}).WithField("cached", true).
|
|
|
WithError(err).Error("Failed to send handshake message")
|
|
|
} else {
|
|
|
- f.l.WithField("vpnAddrs", existing.vpnAddrs).WithField("udpAddr", addr).
|
|
|
+ f.l.WithField("vpnAddrs", existing.vpnAddrs).WithField("from", via).
|
|
|
WithField("handshake", m{"stage": 2, "style": "ix_psk0"}).WithField("cached", true).
|
|
|
Info("Handshake message sent")
|
|
|
}
|
|
|
return
|
|
|
} else {
|
|
|
- if via == nil {
|
|
|
- f.l.Error("Handshake send failed: both addr and via are nil.")
|
|
|
+ if via.relay == nil {
|
|
|
+ f.l.Error("Handshake send failed: both addr and via.relay are nil.")
|
|
|
return
|
|
|
}
|
|
|
hostinfo.relayState.InsertRelayTo(via.relayHI.vpnAddrs[0])
|
|
|
@@ -371,7 +373,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
}
|
|
|
case ErrExistingHostInfo:
|
|
|
// This means there was an existing tunnel and this handshake was older than the one we are currently based on
|
|
|
- f.l.WithField("vpnAddrs", vpnAddrs).WithField("udpAddr", addr).
|
|
|
+ f.l.WithField("vpnAddrs", vpnAddrs).WithField("from", via).
|
|
|
WithField("certName", certName).
|
|
|
WithField("certVersion", certVersion).
|
|
|
WithField("oldHandshakeTime", existing.lastHandshakeTime).
|
|
|
@@ -387,7 +389,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
return
|
|
|
case ErrLocalIndexCollision:
|
|
|
// This means we failed to insert because of collision on localIndexId. Just let the next handshake packet retry
|
|
|
- f.l.WithField("vpnAddrs", vpnAddrs).WithField("udpAddr", addr).
|
|
|
+ f.l.WithField("vpnAddrs", vpnAddrs).WithField("from", via).
|
|
|
WithField("certName", certName).
|
|
|
WithField("certVersion", certVersion).
|
|
|
WithField("fingerprint", fingerprint).
|
|
|
@@ -400,7 +402,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
default:
|
|
|
// Shouldn't happen, but just in case someone adds a new error type to CheckAndComplete
|
|
|
// And we forget to update it here
|
|
|
- f.l.WithError(err).WithField("vpnAddrs", vpnAddrs).WithField("udpAddr", addr).
|
|
|
+ f.l.WithError(err).WithField("vpnAddrs", vpnAddrs).WithField("from", via).
|
|
|
WithField("certName", certName).
|
|
|
WithField("certVersion", certVersion).
|
|
|
WithField("fingerprint", fingerprint).
|
|
|
@@ -414,30 +416,23 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
|
|
|
// Do the send
|
|
|
f.messageMetrics.Tx(header.Handshake, header.MessageSubType(msg[1]), 1)
|
|
|
- if addr.IsValid() {
|
|
|
- err = f.outside.WriteTo(msg, addr)
|
|
|
+ if !via.IsRelayed {
|
|
|
+ err = f.outside.WriteTo(msg, via.UdpAddr)
|
|
|
+ log := f.l.WithField("vpnAddrs", vpnAddrs).WithField("from", via).
|
|
|
+ WithField("certName", certName).
|
|
|
+ WithField("certVersion", certVersion).
|
|
|
+ WithField("fingerprint", fingerprint).
|
|
|
+ WithField("issuer", issuer).
|
|
|
+ WithField("initiatorIndex", hs.Details.InitiatorIndex).WithField("responderIndex", hs.Details.ResponderIndex).
|
|
|
+ WithField("remoteIndex", h.RemoteIndex).WithField("handshake", m{"stage": 2, "style": "ix_psk0"})
|
|
|
if err != nil {
|
|
|
- f.l.WithField("vpnAddrs", vpnAddrs).WithField("udpAddr", addr).
|
|
|
- WithField("certName", certName).
|
|
|
- WithField("certVersion", certVersion).
|
|
|
- WithField("fingerprint", fingerprint).
|
|
|
- WithField("issuer", issuer).
|
|
|
- WithField("initiatorIndex", hs.Details.InitiatorIndex).WithField("responderIndex", hs.Details.ResponderIndex).
|
|
|
- WithField("remoteIndex", h.RemoteIndex).WithField("handshake", m{"stage": 2, "style": "ix_psk0"}).
|
|
|
- WithError(err).Error("Failed to send handshake")
|
|
|
+ log.WithError(err).Error("Failed to send handshake")
|
|
|
} else {
|
|
|
- f.l.WithField("vpnAddrs", vpnAddrs).WithField("udpAddr", addr).
|
|
|
- WithField("certName", certName).
|
|
|
- WithField("certVersion", certVersion).
|
|
|
- WithField("fingerprint", fingerprint).
|
|
|
- WithField("issuer", issuer).
|
|
|
- WithField("initiatorIndex", hs.Details.InitiatorIndex).WithField("responderIndex", hs.Details.ResponderIndex).
|
|
|
- WithField("remoteIndex", h.RemoteIndex).WithField("handshake", m{"stage": 2, "style": "ix_psk0"}).
|
|
|
- Info("Handshake message sent")
|
|
|
+ log.Info("Handshake message sent")
|
|
|
}
|
|
|
} else {
|
|
|
- if via == nil {
|
|
|
- f.l.Error("Handshake send failed: both addr and via are nil.")
|
|
|
+ if via.relay == nil {
|
|
|
+ f.l.Error("Handshake send failed: both addr and via.relay are nil.")
|
|
|
return
|
|
|
}
|
|
|
hostinfo.relayState.InsertRelayTo(via.relayHI.vpnAddrs[0])
|
|
|
@@ -462,7 +457,7 @@ func ixHandshakeStage1(f *Interface, addr netip.AddrPort, via *ViaSender, packet
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-func ixHandshakeStage2(f *Interface, addr netip.AddrPort, via *ViaSender, hh *HandshakeHostInfo, packet []byte, h *header.H) bool {
|
|
|
+func ixHandshakeStage2(f *Interface, via ViaSender, hh *HandshakeHostInfo, packet []byte, h *header.H) bool {
|
|
|
if hh == nil {
|
|
|
// Nothing here to tear down, got a bogus stage 2 packet
|
|
|
return true
|
|
|
@@ -472,10 +467,10 @@ func ixHandshakeStage2(f *Interface, addr netip.AddrPort, via *ViaSender, hh *Ha
|
|
|
defer hh.Unlock()
|
|
|
|
|
|
hostinfo := hh.hostinfo
|
|
|
- if addr.IsValid() {
|
|
|
+ if !via.IsRelayed {
|
|
|
// The vpnAddr we know about is the one we tried to handshake with, use it to apply the remote allow list.
|
|
|
- if !f.lightHouse.GetRemoteAllowList().AllowAll(hostinfo.vpnAddrs, addr.Addr()) {
|
|
|
- f.l.WithField("vpnAddrs", hostinfo.vpnAddrs).WithField("udpAddr", addr).Debug("lighthouse.remote_allow_list denied incoming handshake")
|
|
|
+ if !f.lightHouse.GetRemoteAllowList().AllowAll(hostinfo.vpnAddrs, via.UdpAddr.Addr()) {
|
|
|
+ f.l.WithField("vpnAddrs", hostinfo.vpnAddrs).WithField("from", via).Debug("lighthouse.remote_allow_list denied incoming handshake")
|
|
|
return false
|
|
|
}
|
|
|
}
|
|
|
@@ -483,7 +478,7 @@ func ixHandshakeStage2(f *Interface, addr netip.AddrPort, via *ViaSender, hh *Ha
|
|
|
ci := hostinfo.ConnectionState
|
|
|
msg, eKey, dKey, err := ci.H.ReadMessage(nil, packet[header.Len:])
|
|
|
if err != nil {
|
|
|
- f.l.WithError(err).WithField("vpnAddrs", hostinfo.vpnAddrs).WithField("udpAddr", addr).
|
|
|
+ f.l.WithError(err).WithField("vpnAddrs", hostinfo.vpnAddrs).WithField("from", via).
|
|
|
WithField("handshake", m{"stage": 2, "style": "ix_psk0"}).WithField("header", h).
|
|
|
Error("Failed to call noise.ReadMessage")
|
|
|
|
|
|
@@ -492,7 +487,7 @@ func ixHandshakeStage2(f *Interface, addr netip.AddrPort, via *ViaSender, hh *Ha
|
|
|
// near future
|
|
|
return false
|
|
|
} else if dKey == nil || eKey == nil {
|
|
|
- f.l.WithField("vpnAddrs", hostinfo.vpnAddrs).WithField("udpAddr", addr).
|
|
|
+ f.l.WithField("vpnAddrs", hostinfo.vpnAddrs).WithField("from", via).
|
|
|
WithField("handshake", m{"stage": 2, "style": "ix_psk0"}).
|
|
|
Error("Noise did not arrive at a key")
|
|
|
|
|
|
@@ -504,7 +499,7 @@ func ixHandshakeStage2(f *Interface, addr netip.AddrPort, via *ViaSender, hh *Ha
|
|
|
hs := &NebulaHandshake{}
|
|
|
err = hs.Unmarshal(msg)
|
|
|
if err != nil || hs.Details == nil {
|
|
|
- f.l.WithError(err).WithField("vpnAddrs", hostinfo.vpnAddrs).WithField("udpAddr", addr).
|
|
|
+ f.l.WithError(err).WithField("vpnAddrs", hostinfo.vpnAddrs).WithField("from", via).
|
|
|
WithField("handshake", m{"stage": 2, "style": "ix_psk0"}).Error("Failed unmarshal handshake message")
|
|
|
|
|
|
// The handshake state machine is complete, if things break now there is no chance to recover. Tear down and start again
|
|
|
@@ -513,7 +508,7 @@ func ixHandshakeStage2(f *Interface, addr netip.AddrPort, via *ViaSender, hh *Ha
|
|
|
|
|
|
rc, err := cert.Recombine(cert.Version(hs.Details.CertVersion), hs.Details.Cert, ci.H.PeerStatic(), ci.Curve())
|
|
|
if err != nil {
|
|
|
- f.l.WithError(err).WithField("udpAddr", addr).
|
|
|
+ f.l.WithError(err).WithField("from", via).
|
|
|
WithField("vpnAddrs", hostinfo.vpnAddrs).
|
|
|
WithField("handshake", m{"stage": 2, "style": "ix_psk0"}).
|
|
|
Info("Handshake did not contain a certificate")
|
|
|
@@ -527,7 +522,7 @@ func ixHandshakeStage2(f *Interface, addr netip.AddrPort, via *ViaSender, hh *Ha
|
|
|
fp = "<error generating certificate fingerprint>"
|
|
|
}
|
|
|
|
|
|
- e := f.l.WithError(err).WithField("udpAddr", addr).
|
|
|
+ e := f.l.WithError(err).WithField("from", via).
|
|
|
WithField("vpnAddrs", hostinfo.vpnAddrs).
|
|
|
WithField("handshake", m{"stage": 2, "style": "ix_psk0"}).
|
|
|
WithField("certFingerprint", fp).
|
|
|
@@ -542,7 +537,7 @@ func ixHandshakeStage2(f *Interface, addr netip.AddrPort, via *ViaSender, hh *Ha
|
|
|
}
|
|
|
|
|
|
if len(remoteCert.Certificate.Networks()) == 0 {
|
|
|
- f.l.WithError(err).WithField("udpAddr", addr).
|
|
|
+ f.l.WithError(err).WithField("from", via).
|
|
|
WithField("vpnAddrs", hostinfo.vpnAddrs).
|
|
|
WithField("cert", remoteCert).
|
|
|
WithField("handshake", m{"stage": 2, "style": "ix_psk0"}).
|
|
|
@@ -565,8 +560,8 @@ func ixHandshakeStage2(f *Interface, addr netip.AddrPort, via *ViaSender, hh *Ha
|
|
|
ci.eKey = NewNebulaCipherState(eKey)
|
|
|
|
|
|
// Make sure the current udpAddr being used is set for responding
|
|
|
- if addr.IsValid() {
|
|
|
- hostinfo.SetRemote(addr)
|
|
|
+ if !via.IsRelayed {
|
|
|
+ hostinfo.SetRemote(via.UdpAddr)
|
|
|
} else {
|
|
|
hostinfo.relayState.InsertRelayTo(via.relayHI.vpnAddrs[0])
|
|
|
}
|
|
|
@@ -588,7 +583,7 @@ func ixHandshakeStage2(f *Interface, addr netip.AddrPort, via *ViaSender, hh *Ha
|
|
|
// Ensure the right host responded
|
|
|
if !correctHostResponded {
|
|
|
f.l.WithField("intendedVpnAddrs", hostinfo.vpnAddrs).WithField("haveVpnNetworks", vpnNetworks).
|
|
|
- WithField("udpAddr", addr).
|
|
|
+ WithField("from", via).
|
|
|
WithField("certName", certName).
|
|
|
WithField("certVersion", certVersion).
|
|
|
WithField("handshake", m{"stage": 2, "style": "ix_psk0"}).
|
|
|
@@ -602,7 +597,7 @@ func ixHandshakeStage2(f *Interface, addr netip.AddrPort, via *ViaSender, hh *Ha
|
|
|
f.handshakeManager.StartHandshake(hostinfo.vpnAddrs[0], func(newHH *HandshakeHostInfo) {
|
|
|
// Block the current used address
|
|
|
newHH.hostinfo.remotes = hostinfo.remotes
|
|
|
- newHH.hostinfo.remotes.BlockRemote(addr)
|
|
|
+ newHH.hostinfo.remotes.BlockRemote(via)
|
|
|
|
|
|
f.l.WithField("blockedUdpAddrs", newHH.hostinfo.remotes.CopyBlockedRemotes()).
|
|
|
WithField("vpnNetworks", vpnNetworks).
|
|
|
@@ -625,7 +620,7 @@ func ixHandshakeStage2(f *Interface, addr netip.AddrPort, via *ViaSender, hh *Ha
|
|
|
ci.window.Update(f.l, 2)
|
|
|
|
|
|
duration := time.Since(hh.startTime).Nanoseconds()
|
|
|
- msgRxL := f.l.WithField("vpnAddrs", vpnAddrs).WithField("udpAddr", addr).
|
|
|
+ msgRxL := f.l.WithField("vpnAddrs", vpnAddrs).WithField("from", via).
|
|
|
WithField("certName", certName).
|
|
|
WithField("certVersion", certVersion).
|
|
|
WithField("fingerprint", fingerprint).
|