Relay log fix (#1765)

* ensure CreateRelayRequest gets logged correctly

* ensure CreateRelayResponse gets logged correctly
This commit is contained in:
Jack Doan
2026-06-16 11:38:34 -05:00
committed by GitHub
parent ab539f8a3f
commit 16b302c11d
2 changed files with 22 additions and 23 deletions
+2 -2
View File
@@ -298,8 +298,8 @@ func (cm *connectionManager) migrateRelayUsed(oldhostinfo, newhostinfo *HostInfo
} else { } else {
cm.intf.SendMessageToHostInfo(header.Control, 0, newhostinfo, msg, make([]byte, 12), make([]byte, mtu)) cm.intf.SendMessageToHostInfo(header.Control, 0, newhostinfo, msg, make([]byte, 12), make([]byte, mtu))
cm.l.Info("send CreateRelayRequest", cm.l.Info("send CreateRelayRequest",
"relayFrom", req.RelayFromAddr, "relayFrom", relayFrom,
"relayTo", req.RelayToAddr, "relayTo", relayTo,
"initiatorRelayIndex", req.InitiatorRelayIndex, "initiatorRelayIndex", req.InitiatorRelayIndex,
"responderRelayIndex", req.ResponderRelayIndex, "responderRelayIndex", req.ResponderRelayIndex,
"vpnAddrs", newhostinfo.vpnAddrs, "vpnAddrs", newhostinfo.vpnAddrs,
+15 -16
View File
@@ -318,17 +318,16 @@ func (rm *relayManager) HandleControlMsg(h *HostInfo, d []byte, f *Interface) {
} }
func (rm *relayManager) handleCreateRelayResponse(v cert.Version, h *HostInfo, f *Interface, m *NebulaControl) { func (rm *relayManager) handleCreateRelayResponse(v cert.Version, h *HostInfo, f *Interface, m *NebulaControl) {
relayFrom := protoAddrToNetAddr(m.RelayFromAddr)
relayTo := protoAddrToNetAddr(m.RelayToAddr)
rm.l.Info("handleCreateRelayResponse", rm.l.Info("handleCreateRelayResponse",
"relayFrom", protoAddrToNetAddr(m.RelayFromAddr), "relayFrom", relayFrom,
"relayTo", protoAddrToNetAddr(m.RelayToAddr), "relayTo", relayTo,
"initiatorRelayIndex", m.InitiatorRelayIndex, "initiatorRelayIndex", m.InitiatorRelayIndex,
"responderRelayIndex", m.ResponderRelayIndex, "responderRelayIndex", m.ResponderRelayIndex,
"vpnAddrs", h.vpnAddrs, "vpnAddrs", h.vpnAddrs,
) )
target := m.RelayToAddr
targetAddr := protoAddrToNetAddr(target)
relay, err := rm.EstablishRelay(h, m) relay, err := rm.EstablishRelay(h, m)
if err != nil { if err != nil {
rm.l.Error("Failed to update relay for relayTo", "error", err) rm.l.Error("Failed to update relay for relayTo", "error", err)
@@ -344,7 +343,7 @@ func (rm *relayManager) handleCreateRelayResponse(v cert.Version, h *HostInfo, f
rm.l.Error("Can't find a HostInfo for peer", "relayTo", relay.PeerAddr) rm.l.Error("Can't find a HostInfo for peer", "relayTo", relay.PeerAddr)
return return
} }
peerRelay, ok := peerHostInfo.relayState.QueryRelayForByIp(targetAddr) peerRelay, ok := peerHostInfo.relayState.QueryRelayForByIp(relayTo)
if !ok { if !ok {
rm.l.Error("peerRelay does not have Relay state for relayTo", "relayTo", peerHostInfo.vpnAddrs[0]) rm.l.Error("peerRelay does not have Relay state for relayTo", "relayTo", peerHostInfo.vpnAddrs[0])
return return
@@ -354,19 +353,19 @@ func (rm *relayManager) handleCreateRelayResponse(v cert.Version, h *HostInfo, f
// I initiated the request to this peer, but haven't heard back from the peer yet. I must wait for this peer // I initiated the request to this peer, but haven't heard back from the peer yet. I must wait for this peer
// to respond to complete the connection. // to respond to complete the connection.
case PeerRequested, Disestablished, Established: case PeerRequested, Disestablished, Established:
peerHostInfo.relayState.UpdateRelayForByIpState(targetAddr, Established) peerHostInfo.relayState.UpdateRelayForByIpState(relayTo, Established)
resp := NebulaControl{ resp := NebulaControl{
Type: NebulaControl_CreateRelayResponse, Type: NebulaControl_CreateRelayResponse,
ResponderRelayIndex: peerRelay.LocalIndex, ResponderRelayIndex: peerRelay.LocalIndex,
InitiatorRelayIndex: peerRelay.RemoteIndex, InitiatorRelayIndex: peerRelay.RemoteIndex,
} }
if v == cert.Version1 {
peer := peerHostInfo.vpnAddrs[0] peer := peerHostInfo.vpnAddrs[0]
if v == cert.Version1 {
if !peer.Is4() { if !peer.Is4() {
rm.l.Error("Refusing to CreateRelayResponse for a v1 relay with an ipv6 address", rm.l.Error("Refusing to CreateRelayResponse for a v1 relay with an ipv6 address",
"relayFrom", peer, "relayFrom", peer,
"relayTo", target, "relayTo", relayTo,
"initiatorRelayIndex", resp.InitiatorRelayIndex, "initiatorRelayIndex", resp.InitiatorRelayIndex,
"responderRelayIndex", resp.ResponderRelayIndex, "responderRelayIndex", resp.ResponderRelayIndex,
"vpnAddrs", peerHostInfo.vpnAddrs, "vpnAddrs", peerHostInfo.vpnAddrs,
@@ -376,28 +375,28 @@ func (rm *relayManager) handleCreateRelayResponse(v cert.Version, h *HostInfo, f
b := peer.As4() b := peer.As4()
resp.OldRelayFromAddr = binary.BigEndian.Uint32(b[:]) resp.OldRelayFromAddr = binary.BigEndian.Uint32(b[:])
b = targetAddr.As4() b = relayTo.As4()
resp.OldRelayToAddr = binary.BigEndian.Uint32(b[:]) resp.OldRelayToAddr = binary.BigEndian.Uint32(b[:])
} else { } else {
resp.RelayFromAddr = netAddrToProtoAddr(peerHostInfo.vpnAddrs[0]) resp.RelayFromAddr = netAddrToProtoAddr(peer)
resp.RelayToAddr = target resp.RelayToAddr = m.RelayToAddr
} }
msg, err := resp.Marshal() msg, err := resp.Marshal()
if err != nil { if err != nil {
rm.l.Error("relayManager Failed to marshal Control CreateRelayResponse message to create relay", "error", err) rm.l.Error("relayManager Failed to marshal Control CreateRelayResponse message to create relay", "error", err)
} else { return
}
f.SendMessageToHostInfo(header.Control, 0, peerHostInfo, msg, make([]byte, 12), make([]byte, mtu)) f.SendMessageToHostInfo(header.Control, 0, peerHostInfo, msg, make([]byte, 12), make([]byte, mtu))
rm.l.Info("send CreateRelayResponse", rm.l.Info("send CreateRelayResponse",
"relayFrom", resp.RelayFromAddr, "relayFrom", peer,
"relayTo", resp.RelayToAddr, "relayTo", relayTo,
"initiatorRelayIndex", resp.InitiatorRelayIndex, "initiatorRelayIndex", resp.InitiatorRelayIndex,
"responderRelayIndex", resp.ResponderRelayIndex, "responderRelayIndex", resp.ResponderRelayIndex,
"vpnAddrs", peerHostInfo.vpnAddrs, "vpnAddrs", peerHostInfo.vpnAddrs,
) )
} }
} }
}
func (rm *relayManager) handleCreateRelayRequest(v cert.Version, h *HostInfo, f *Interface, m *NebulaControl) { func (rm *relayManager) handleCreateRelayRequest(v cert.Version, h *HostInfo, f *Interface, m *NebulaControl) {
from := protoAddrToNetAddr(m.RelayFromAddr) from := protoAddrToNetAddr(m.RelayFromAddr)